LEAN SOFTWARE DEVELOPMENT
The core principle of the lean approach is to focus on value for the customer and at the same time eliminate waste. “Value” is defined as any action or process that the customer would be willing to pay for. “Waste” in turn is any action or process that does not add value.
The focus on value
In software value is what users will value once they start using the software. Such value, however, is very likely to change in time if only because users may often not know exactly what they want; what is more, when they see the software “in action”, their idea of what they want will invariably shift.
Making improvements little-but-often creates a learning environment which allows to truly discover and deliver value to end users. The first version of Gmail was literally written in a day and in the early days every new feature went live soon after it had been programmed, and most new ideas were implemented shortly after they had been conceived. It is the subsequent users’ feedback / behaviour that helped to establish what was valuable and directed the effort towards the outcome we are able to appreciate today.
Lean defines waste as anything you do that does not add customer value or delays the delivery of value to customers. In software development this may translate into the following common forms of waste:
Partially done work
Some examples of partially done work include:
specifications and requirement documents created too early
code which is not covered with tests
code which is not deployed to production
Some of the practices which helps to eliminate partially done work are to divide the work to be done into small batches or short iterations and do detailed requirements specifications just before an iteration. At the end of each iteration, it is a good idea to stick to a simple rule: either code is integrated, tested and accepted, or it does not count at all.
Frequent deployments have an additional benefit of reducing the risk of delivering wrong features, because the users who start using a minimum feature implementation can often immediately provide valuable feedback with which to decide on how the feature should be developed further. Therefore, avoid writing requirements too early – in each iteration you learn something new which positively affects your ability to structure the contents of the next iteration.
Too many features The worst form of waste in software development is adding features that are not essential. There is a remedy which helps to guard against the practice: be strongly biased against adding features. If there is any doubt about the need for a feature, wait with it.
Every line of code adds to the complexity of the solution you are building and exponentially increases the workload and cost of further development and maintenance. Successful software development requires a process that results in the implementation of the 20% of the code that will deliver 80% of the value.
Slow communications or feedback bottlenecks
Developers make critical decisions about every 15 minutes. The longer they have to wait for answers from the Product Owner, the other developers on the team, the users or other stakeholders, the slower the process and the lower the quality of their decisions. If developers have to wait too often / for too long, they tend to lose momentum and find it hard to resist the temptation to switch to other tasks where they can apply their knowledge, skills and expertise in a more productive fashion.
At the key moments during project execution, like the project kickstart, consider the various ways to facilitate the information flows among the people involved. For example, collocate the complete cross-functional team in the same office for close physical collaboration. Depending on what you feel is more effective, invite the development team to your office or go to work with them on their premises.
You may as well consider putting all the documents needed into the cloud (for example, Google Docs, MyBalsamiq). Such tools make it easier to keep everyone up to date on what is going on and allow the people involved to work on changes collaboratively. When you are not in the same office, skype screen sharing can be used for face-to-face discussion, direct observation, as well as the interaction with mock-ups and prototypes.
FINAL WORD – LEAN
Lean is centred around preserving value with less work. To achieve the effect it promotes the development of a change-oriented mindset which promptly responds to the future as it unfolds. Together with your development team, pose hypotheses, conduct rapid experiments and implement only the best alternatives!
Once you master quick delivery and short feedback loops, focus on the elimination of waste. Your goal is to deliver working and valuable software to users; everything that slows this process down is waste and should thus be eradicated.