Eliminating waste seems to be common sense for any business operations. According to the article The Seven Wastes of Software Development, it can also be applied to software development.
The article starts off by talking about eliminating waste to improve productive by the Toyota car company in the mid 1900’s. According to the article, Toyota needed a way to cut cost of car manufacturing in order to reduce the cost of the car so that it remains affordable for Japanese car buyers. The solution was to eliminate waste. Waste is anything that does not add value to the process. If you can eliminate anything that does not add value for the customer, then you will be able to build something that is cheaper and faster. This is heart of the “Lean” manufacturing process.
The article goes on to explain that the “Seven Waste” of software development originated from Mary and Tom Poppendieck. They got their ideas from Shigeo, the forefathers of the Toyota Production System (TPS), who came up with the seven major types of manufacturing waste. The seven waste of software development according to Mary and Tom Poppendieck are:
- Partially Done Work
- Extra Features
- Task Switching
Similar to the seven major types of manufacturing waste came up by Shigeo, these seven waste of software development can help improve software development as it has with car manufacturing.
The first on the list is partially done work. This is very wastefully if the partially done work is scrapped altogether without making it into the software release at all. The development work spent never added any values to the software. Even if the intend is for a future release, additional refactoring work will probably have to be spent to get it back into the software development release cycle.
The second on the list is extra features. Extra features could be something that customer never asked for but they were added to the release because an assumption was made that the customer might want the features. Sometimes, it can actually remove value from the software. Extra features can also be something that the customer asked for but rarely used in the software. These are features that doesn’t really add a whole lot of value to the software but take up development time.
The third is relearning something that has already been done before, basically reinventing the wheel. If there is already a piece of software code or an existing feature that does something very well, you should reuse it. From a design perspective, it could mean designing the software in a modular way so that so that the code for feature can be used or called upon many times. From a knowledge perspective, it could mean collaboration among team members to share what worked and what didn’t work from past experiences.
The fourth is handoffs. Handoffs involves transferring an already started work to another individual or team. During the transfer, you not only have to transfer the work, but most often you also have to transfer knowledge through training. Many times, the knowledge doesn’t get transferred and the individual or the team who have to take up the work have to relearn or remake the same mistakes.
The fifth is delays. Most of the time, software systems are interdependent on other systems. Delay in one system, can also delay the release of other systems. The longer the delay, the more risk it is going to be to the project. It’s also going to affect project scope as customer expectation might have changed. If delayed for too longer, it can even run the risk of getting cancelled.
The sixth is task switching. Similar to handoffs, task switching involves the extra work of relearning something. Each time the individual or team switch to another task, it always involves some type of relearning overhead.
The seventh and final one on the list is defects. Defects are extra work put in to something that should have worked the first time around. Extra work is put in to fixing the defect without producing extra value. It could also mean extra work for the customer to work around the defect until the defect is fixed.
If eliminating waste can lead to decrease in cost for car manufacturing, it can also be applied to software development to decrease the time and cost it takes to develop software. Waste are extra work put in without adding value to the process. Eliminating waste works well in manufacturing and can work just as well in software development.