Any development shop has multiple functions or verticals, separately staffed and having individual capacity and service profiles. For example, a typical SW development shop will have Requirements analysts, Designers, Developers, Testers, Release and configuration management people, and support people. Each of these will have their individual service times with respect to a standard project sizing unit, and individual capacities.
Traditionally, the capacity planning of staff and equipment is done on the basis of typical gut feel and qualitative weighing of various factors such as peak loads and acceptable wait times. However, a gut feel is retrospective and there is very little opportunity for predictive and quantitative understanding of how the resources can be shuffled and optimally reallocated.
Enter a mathematical tool that is often used in various other applications such as networking and service industry design, Erlang’s Queuing Theory.
A very nice writeup on the same appears here: http://jeges.com.au/application-of-queuing-theory-to-capacity-planning/
The average wait time for a new customer (any job that comes from downstream to upstream)
the time between customer arrivals is random with mean time λ. The Service time of each customer is exponentially distributed with mean time 1/μ. The number of servers is s. Server utilization is ρ.
This is the standard canonical form that is a part of most modern spreadsheet programs. The assumption of a Poisson Distribution can be borne out by past data, and the expressions re-derived. This, coupled by some off the shelf optimization software can throw out capacity numbers that minimize wait times at every stage. This approach is worth exploring.