Introduction
Waste is a killer in any organization. But if you don't know what to look for then you're probably not going to be able to find waste and minimize it or eradicate it. This series primarily deals with explicitly defining the 7 wastes in software development so that you can start thinking about how this may affect your ability to remain as productive as you can be. This can make a significant difference to your company's bottom line.
As reference, the first two wastes can be found in my previous blog posts here: In-Process Inventory/Partially done work and Over Production/Extra Features.
#3 - Extra processing
Extra processing in Manufacturing is the 3rd waste and this can be equated to Relearning or Rework in Software development. The time we spend relearning things we once knew or having to rework the same feature due to poor code quality can be significant in many organizations, ergo, it's important to be mindful of this. It's probably useful to list examples that would cause extra processing in software development
Undocumented code
If your developers don't document the code properly then later on when you're either fixing the code or making changes to the code due to new feature requirements, your developers (even the original author of code) are going to need to relearn why the code was written that way in the first place. Taking the time to document your code up front while it's fresh in your mind can therefore save the company time and money.
Poor planning
Some project managers assign work to developers in a haphazard manner. Although you do want to ensure there's knowledge overlap on your team, if you keep switching developers on the same features, each time a new developer takes over, he is going to have to relearn what the original developer already knows.
Poor quality
The earlier you find bugs and fix them the less costly it is for the organization. The most expensive scenario is when you find problems once they're already deployed to production. Partly this is due to the fact that the developer now has to reacquaint himself/herself with the code again. So if the developer spends the time upfront to write extensive unit tests, if the team takes the time to define proper acceptance test criteria then the chances of having to rework the code and worse yet relearn the code diminishes significantly
Task switching
The more things you throw at a developer at the same time the longer things take to get done. Task switching beyond 2 tasks is highly inefficient as the developer has to more often than not relearn or re-acquaint himself with the task context each time he switches back.
Poor communication and recording of knowledge
Today, with the proliferation of technology, there's no excuse for poor communication. Wiki's provide a great way for developers to record knowledge about their findings. And search makes it really easy to find information. I am not advocating heave documentation here. I am suggesting short summaries of information on key decisions you made during development so that if someone else has to take over or you have to come back to that code in the future, the relearning curve is not that great.
Stay tuned for next weeks blog post in this series which will cover the 4th waste - the equivalent of "Transportation" in manufacturing processes.
Comments
Quality
July 17, 2009 by Todd Landry (not verified), 35 weeks 8 hours ago
Comment id: 2877
Jack, enjoy your blog and tweets!
Totally agree with you about the importance of finding bugs as early as possible in the SDLC. They get more and more expensive to fix the further down the lifecycle they go. Static code analysis can play a role here, allowing developers to run the analysis and fix their bugs before they even check in their code. Will this catch everything? Of course not, but reducing the number of bugs introduced into the code stream is always a good thing. Check out our blog for more info on this and more... http://kloctalk.klocwork.com/
Todd
My Take on 7 Wastes in Software Development
July 17, 2009 by Keith (not verified), 35 weeks 7 hours ago
Comment id: 2878
I've aligned the 7 manufacturing wastes with waste in software development this way:
Inventory = Partially Done Work (getting multiple things partially done and not delivered to production consumes capital without adding value)
Extra Processing = Extra Processes (meetings, paperwork, manual reports, manual status updated, etc., all take workers away from value-added tasks)
Overproduction = Extra Features (features that don't add business value should never be produced)
Transportation = Task Switching (moving a knowledge worker off and on different tasks slows down his/her productivity)
Waiting = Waiting (short iterations/cycles keep a continuous flow of value moving through the process)
Motion = Motion (co-located teams reduce wasted time through motion; daily standups get the right people together when and where they're needed)
Defects = Defects (coding standards, paired programming, TDD, automated builds, customer involvement all help prevent defects)
Previous two posts broken?
February 18, 2010 by Keilaron (not verified), 4 weeks 1 day ago
Comment id: 5531
For some reason, I can't read parts 1 and 2 ... even though my co-worker had part 1 open just a few minutes ago! We're getting 404 errors now.
Did your cool URLs break?
Post new comment