function pipeline( opts, clbk ) {
	var ratelimit;
	followers( opts, onFollowers );
	/**
	* Callback invoked after receiving a user's followers.
	*
	* @private
	* @param {(Error|null)} error - error object
	* @param {ObjectArray} data - follower data
	* @param {Object} info - rate limit info
	* @returns {void}
	*/
	function onFollowers( error, data, info ) {
		var usernames;
		var options;
		var i;

		ratelimit = info;
		if ( error ) {
			return done( error );
		}
		usernames = [];
		for ( i = 0; i < data.length; i++ ) {
			usernames.push( data[ i ].login );
		}
		options = {
			'useragent': opts.useragent,
			'usernames': usernames
		};
		if ( opts.token ) {
			options.token = opts.token;
		}
		// Move to next step in pipeline:
		details( options, onDetails );
	}
	/**
	* Callback invoked upon receiving user details.
	*
	* @private
	* @param {(Error|null)} error - error object
	* @param {Object} results - user details
	* @param {Object} info - rate limit info
	* @returns {void}
	*/
	function onDetails( error, results, info ) {
		var options;
		var data;

		ratelimit = info;
		if ( error ) {
			return done( error );
		}
		if ( results.meta.failure ) {
			error = {
				'status': 429,
				'message': 'unable to resolve resources. This is likely due to rate limiting. Check your rate limit and try again.'
			};
			return done( error );
		}
		options = {
			'method': opts.method,
			'useragent': opts.useragent
		};
		if ( opts.token ) {
			options.token = opts.token;
		}
		data = toArray( results.data );

		// Move to next step in pipeline:
		analyze( data, options, done );
	}
	/**
	* Ends the analysis pipeline.
	*
	* @private
	* @param {(Error|null)} error - error object
	* @param {Object} results - analysis results
	* @param {Object} info - rate limit info
	* @returns {void}
	*/
	function done( error, results, info ) {
		if ( info ) {
			ratelimit = info;
		}
		if ( error ) {
			if ( ratelimit ) {
				return clbk( error, null, ratelimit );
			}
			return clbk( error );
		}
		clbk( null, results, ratelimit );
	}
}
Analysis pipeline.

@param {Object} opts - function options
@param {Function} clbk - callback to invoke after running analysis
@returns {void}