Lean Software Development – 7 Wastes of Software Development

What is Waste?

Any activity that absorbs resources but does not add any value, as perceived by the customer, is waste.

Lean Software Development is inspired by Lean Manufacturing and Toyota Production Systems which defined the 7 wastes of manufacturing. Mary and Tom Poppendeick in their book ‘Lean Software Development – An Agile Toolkit’ translated these into the 7 wastes of software development.

7 wastes of manufacturing 7 wastes of software development
Inventory Partially Done Work
Overproduction Extra Features
Extra Processing Extra Processing
Transportation Task Switching
Waiting Waiting/Delays
Motion Hand-offs
Defects Defects

Waste 1: Partially Done Work

Unless a work item is complete it does not add value to the customer.

Impact:

  • There is no way of assessing whether it will finally work or not
  • There are times when a work item is left incomplete thinking that at some point in time a resource would get back to it. But many times it keeps lying there on-hold and becomes obsolete
  • Partially done work keeps resources occupied in investments which are yet to produce results

Typical examples:

  • Un-coded documentation: A detailed requirement specification document which is never implemented
  • Unsynchronized code: Unless the code is integrated, it cannot be validated or deployed and thus add no value to the end customer. So many times the code becomes obsolete or too many changes are required when the developer gets back to the code long after it was initially written
  • Untested code

How to reduce?

  • The goal should be ‘Stop starting and start finishing’
  • Limit work in progress
  • Delay detailed requirement specification until the team is ready to implement

Waste 2: Extra Features

Any feature that is not needed/asked for by the customer is an extra feature.

Impact:

The popular 80/20 rule in software is that 80% of the users use only 20% of the features. Code added for any additional features has its pitfalls:

  • Increases code complexity
  • May be a potential failure point
  • May become obsolete even before its used
  • Adds overhead to be tracked, compiled, maintained throughout its lifecycle

How to reduce?

This is where the iterative development can help. For the first release of the product aim for just enough features which are must-have for the product to be useful and to be able to gather validated learning for the product’s continued development. Then iteratively keep adding in more features based on customer feedback.

“Instead of worrying about how to develop stuff faster, it is far better to learn how to stop developing the things that are not important and focus on the things that will have real impact” – The Lean Mindset

Waste 3: Extra Processing

Inefficient or Unnecessary additional process steps which adds no value.

Typical examples:

  • Detailed documentation
  • Extra management/planning activities

Waste 4: Task Switching

Assigning people to multiple projects/multiple tasks.

Impact:

Every time a person switches between tasks a significant switching time is incurred to gather the thoughts and re-orient to the new task. In their book ‘Peopleware’,Tom DeMarco and Tim Lister describe flow as a highly productive state of concentration. It takes around 15 minutes of concentration to enter flow and during this time, you are not really doing work. Each time you are interrupted your flow is broken and it’ll take another 15 minutes to re-enter it. Imagine if a software developer is interrupted 4 times a day, one hour of work is lost.

How to reduce?

Aim for minimizing context switching:

  • Assign resources to one project at a time
  • Eliminate the unimportant
  • Minimize interruptions
  • Prioritize

Waste 5: Waiting/Delays

Waiting for things to happen

Impact:

  • Causes Task Switching. While waiting on something pick up another task
  • Delay in testing. Fixing a defect later is more time consuming
  • Delay keeps the customer from realizing value as quickly as possible

Typical examples:

  • Waiting for inputs
  • Delays in reviews and approvals
  • Delayed testing

How to reduce?

  • Co-location
  • Face-to-face conversations/instant messaging over emails
  • Short time-boxed iterations
  • Regular feedback

Waste 6: Hand-off:

Each time a deliverable/artifact is handed-off (analyst, designer, developer, tester)

Impact:

Knowledge lost each time a deliverable is handed off

How to reduce?

  • Cross-functional teams – integrate the disparate teams to work together
  • Face-to-face collaboration, phone, instant messages
  • Shorten feedback loops

Waste 7: Defect:

Amount of waste caused by defect = (Impact of defect) x (Time it goes undetected)

Impact:

  • Expenses incurred on fixing a defect detected at early stages is significantly lower than those detected after the product has been delivered
  • It’s much quicker for a developer to fix a bug if the code is tested immediately after it was implemented rather than weeks later

How to reduce?

The way to reduce impact of defects is to find them as soon as they occur by:

  • Testing immediately
  • Integrating often
  • Releasing to production asap
Advertisements

One thought on “Lean Software Development – 7 Wastes of Software Development

  1. Great article Deepti, a checklist for us and lots we (in particular I) can get better at. I think extra processing is also all the extra steps/work that come from not using best tools.

    Liked by 1 person

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s