Monday, April 02, 2012

Software Delivery Bottlenecks - Deployment


Seems that the business waits on software developers, who have waited on system administrators, who have waited on infrastructure engineers to produce the ecosystem required for todays software applications, while waiting on the business to produce the contracts, by which the business can legally operate.

Looking at the most simplistic example of the macro tasks involved in a software project we have:
  • develop software 
  • runtime environment(s) 
  • deploy software

If we assume an admissibly arbitrary cost of 1, for our tasks, and fundamentally all tasks being equal, then we can create a simple formula to help describe the bottleneck in our software delivery process.

We do have to account for things we do many times or iterations. For instance, we will deploy software through more than 1 environment. While the software hasn't changed, but we still have the overhead of the deployment cost.

Example

  • assumed cost of 1 arbitrary unit 
  • multiplier N, where N is equal to the number of iterations, which will be 5. 
  • multiplier E, where E is equal to the number of environments, which will be 4 (Development, QA, Staging, and Production)

The Cost of Doing Business

  • develop software (1 * N) = (1 * 5) = 5 
  • provision hardware (1 * E) = (1 * 4) = 4 
  • deploy software ((1 * E) * N) = ((1 * 4) * 5) = (4 * 5) = 20

  Software Delivery Bottleneck


Of course, this is a very simplistic view, contrived to drive the point home that deploying software can have a very high overall cost of a software delivery. Deployment is an area of the overall software delivery process that can bring an almost immediate value in economy of scale as the number of servers, and number of environments, increases.

Automate those things that have a high rate of repeatability. Don't be surprised, removing one bottleneck will typically force another bottleneck into the light and we address those one at a time.

People, Process, and Automation. 

Lather, Rinse, Repeat.