… Your company likens software development to a production (manufacturing) environment and expects people and processes to reflect the same.

???

A number of organizations use Waterfall based processes for software development that call for all requirements to be gathered at the start of a project.

Software project managers and delivery departments (IT) are often evaluated on how well they meet the budgetary and schedule constraints while delivering the agreed to scope. Variations are frowned upon and delays are attributed to poor planning — if the team had done a good job in anticipating and planning, the team would not have been surprised in the middle of the project, and would have delivered on time. To get better, then, the bias is to try and drive out the variation by doing more rigorous up-front planning.

A perfect metaphor for this is manufacturing — isn’t the team producing units of work just like in a manufacturing environment? If manufacturers can get to 6-sigma tolerances then can’t software engineers do the same?

It is important to note that manufacturing environments work well because:

Treating software development as manufacturing gives a false impression that everything can be planned upfront and that subsequent deviations from the plan are due to people problems, i.e., people did not plan well enough.

But, software development differs significantly from production processes:

Therefore:

To optimize software development, quit trying to make it look like production.

To succeed you must:

???

Think of software development as a inventing a recipe for a book; production as someone else following the printed recipe exactly. Inventing a recipe involves experimentation and the final recipe is rarely the first attempt at coming up with the right dish. Following the printed directions is easier and if done correctly will lead to a faithful reproduction.

To optimize software development, quit trying to make it look like production. Recognize that learning (discovery) is the critical activity and that software development is about people who are inventing and communicating in the face of a problem that keeps changing, a solution that keeps changing, technology that keeps changing.

Alistair Cockburn, said it best when he wrote that software development is a cooperative game of invention and communication, where people are:

Standard defined methodologies also err by assuming that a single methodology will work all the time:

Heavier methodologies incorrectly assume that more planning and documentation up-front equates to greater safety. But safety is not the goal; delivering user-valued functionality as fast as possible is! Signed-off documents at each phase of the project do not guarantee success — signing-off does not equate to eventual user happiness; close collaboration with the users to determine their shifting needs and how best to fulfill them is what is important.

Software development also has the advantage that the end-product does not have to be perfect (incorporate every bell and whistle) before release. Teams have the option of delivering value sooner even if in smaller chunks. This is unlike manufacturing, where often only the final product can be sold to the end user — would you like to buy just the engine and car chassis from then wait months till other sections of the car become available!