Introduction
The more I learn about Lean, the more I realize how much we can learn from Lean teachings and how they apply to software development practices. Typically, we go about our day-to-day activities without thinking about the bigger picture. Lean specifically addresses the complete end-to-end process with the view of enhancing cycle time and quality.
Lean
Value stream mapping is one of the key areas for helping us learn where we fail, but in particular, what I'd like to address in the next series of posts are the 7 wastes which Lean identifies and which I believe are worth mentioning. Once you hear about these wastes I believe you will be more sensitive to realizing when you see these manifested in your organization and should therefore help you to enhance the overall productivity of your teams.
Mary and Tom Poppendiek are two of the thought leaders in applying Lean to software development and I would highly recommend that you buy their books or attend their courses. Mary in particular is inspirational and their knowledge in this space is profound.
7 Manufacturing Wastes
The 7 manufacturing wastes identified by Shigeo Shingo (from his studies of the Toyota production system) are listed below:
In-process Inventory
Over-Production
Extra Processing
Transportation
Motion
Waiting
Defects
Corresponding 7 Software Development Wastes
The 7 corresponding wastes in software development as defined by Mary and Tom Poppendiek are:
Partially done work
Extra Features
Relearning
Handoffs
Task Switching
Delays
Bugs
Today I'd like to address the 1st waste - Partially done work
Partially done work (In Process Inventory)
Partially done work is probably the biggest killer of all the wastes. Partially done work is essentially work-in-progress. Until this work is done, you don't know that there are quality issues i.e. you don't know that the customer will be happy. You don't know if there are going to be problems one you deploy your software onto your production systems. So the idea should be to complete work-in-progress as soon as possible i.e. minimize work-in-progress as much as possible. Examples of partially done work are:
* code that is completed but not checked in to your version control system - if it's not checked in, you don't know if your code changes are going to break the build
* undocumented code - If your code is undocumented, if the developer leaves and someone has to take over, there's going to take longer for the developer to get up to speed. Additionally, if bugs are found, it will be harder for the original developer to figure out what he has done.
* untested code (both unit tests and functional tests) - if your code is untested, you won't know till the code is in your customers hands that there is a bug. The further downstream you are in the process the more costly it's going to be to fix the bugs. So if you build quality in from the start (like writing unit tests) you'll find out the moment you execute the tests
* code that exists on your staging environment and not your production environment - I hear this all the time - "works on my machine" - enough said. Only once you're on production can you be sure the software is 100%. Production always surfaces issues, so the sooner you get it on production servers, the better.
* code that is commented out - makes the software less readable and maintainable
My advice to any company doing software development is to figure out how to get things that are in progress fully completed i.e. DONE in accordance with your definition of DONE, as early as possible. Don't put too many items into the development pipe that you know you can't complete in a given Sprint. Consider everything in your definition of Done to be completed in one cycle. Set your quality bar really high. This will help you ship faster, make your customers happier sooner.
Next week I will be going over a second type of waste - Extra Features.
Comments
You've missed the big one
June 28, 2009 by Paul Johnson (not verified), 32 weeks 1 day ago
Comment id: 2780
Pretty much everything produced until you actually cut code is partially done work. That means requirements, architecture and design. Thats not to say that these things are inherently bad, but they are expensive, need to be kept to a minimum, and not stockpiled.
Reference card
June 29, 2009 by Tim Ottinger (not verified), 32 weeks 1 day ago
Comment id: 2781
Slightly paraphrased, formatted to fit on a 3x5 card, here is a reference card http://agileinaflash.blogspot.com/2009/02/seven-wastes.html
The Greatest Waste
June 29, 2009 by Henrik Mårtensson (not verified), 32 weeks 21 hours ago
Comment id: 2787
The greatest waste is building the wrong thing. The better you are at building it, the worse off you are.
Getting the wrong thing
June 29, 2009 by jackMilunsky, 32 weeks 19 hours ago
Comment id: 2788
I completely agree Henrik that building the wrong thing is the greatest waste of all. And that's why companies must ensure that their agile process get's this and nails the product. However it's important to be aware of all the different wastes so that you can make the organization as efficient as possible. The holy grail is getting it right and being cost effective doing it. Minimizing waste makes your overall organization that much more efficient thereby reducing cycle time.
2 important one
July 17, 2009 by Chad Albrecht (not verified), 29 weeks 4 days ago
Comment id: 2879
Great post! I've found that limiting WIP and avoiding delays are the most critical in the above list. Remedy these and the others seem to go away or get significantly better. Thanks for the thoughts on this! Keep the posts coming!
Great analysis
August 13, 2009 by Mohamed Faramawi (not verified), 25 weeks 5 days ago
Comment id: 2953
I can't wait till you finish the other 6 wastes
Post new comment