Friday 2 October 2009

Lean development – eliminate waste

One of the principles of lean software development is to eliminate waste. Anything that not adding value to the customer is a candidate to be considered as waste.

In terms of software development wasteful activities can include:

  • Writing unnecessary code and features
  • Delays in the development process
  • Unclear or ambiguous requirements
  • Unnecessary bureaucracy (this could include estimating)

Other candidates for waste are:

  • Implementing features not actually used by the customer
  • Waiting (e.g. for another team to complete something)
  • Bugs and low quality software

There are 3 terms that are often applied to waste in a system:

  • Muda – an activity that is wasteful or unproductive
  • Mura – unevenness or inconsistency
  • Muri - overburden

Mary Poppendiek states the following:

“The first step in lean thinking is to understand what value is and what activities and resources are absolutely necessary to create that value. Once this is understood, everything else is waste.”

And this:

“All lean thinking starts with a re-examination of what waste is and an aggressive campaign to eliminate it. Quite simply, anything you do that does not add value from the customer perspective is waste. The seven wastes of software development are:

  • Partially Done Work (the “inventory” of a development process
  • Extra Processes (easy to find in documentation-centric development)
  • Extra Features (develop only what customers want right now)
  • Task Switching (everyone should do one thing at a time)
  • Waiting (for instructions, for information)
  • Handoffs (tons of tacit knowledge gets lost)
  • Defects (at least defects that are not quickly caught by a test)”