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
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.
LikeLiked by 2 people