public LoadBalancingHttpClient<I, O> build() {
            if (retryHandler == null) {
                retryHandler = new NettyHttpLoadBalancerErrorHandler();
            }
            if (config == null) {
                config = DefaultClientConfigImpl.getClientConfigWithDefaultValues();
            }
            if (lb == null) {
                lb = LoadBalancerBuilder.newBuilder().withClientConfig(config).buildLoadBalancerFromConfigWithReflection();
            }
            if (listeners == null) {
                listeners = Collections.<ExecutionListener<HttpClientRequest<I>, HttpClientResponse<O>>>emptyList();
            }
            if (backoffStrategy == null) {
                backoffStrategy = new Func1<Integer, Integer>() {
                    @Override
                    public Integer call(Integer backoffCount) {
                        int interval = config.getOrDefault(IClientConfigKey.Keys.BackoffInterval);
                        if (backoffCount < 0) {
                            backoffCount = 0;
                        }
                        else if (backoffCount > 10) {   // Reasonable upper bound
                            backoffCount = 10;
                        }
                        return (int)Math.pow(2, backoffCount) * interval;
                    }
                };
            }
            if (responseToErrorPolicy == null) {
                responseToErrorPolicy = new DefaultResponseToErrorPolicy<O>();
            }
            return build.call(this);
        }
Strategy for calculating the backoff based on the number of reties.  Input is the number
of retries and output is the backoff amount in milliseconds.
The default implementation is non random exponential backoff with time interval configurable
via the property BackoffInterval (default 1000 msec)

@param backoffStrategy
ribbon-transport/src/main/java/com/netflix/ribbon/transport/netty/http/LoadBalancingHttpClient.java