Defining Lean Software Development is challenging because there is no specific Lean Software Development method or process. Lean is not an equivalent of Personal Software Process, V-Model, Spiral Model, EVO, Feature-Driven Development, Extreme Programming, Scrum, or Test-Driven Development. A software development lifecycle process or a project management process could be said to be “lean” if it was observed to be aligned with the values of the Lean Software Development movement and the principles of Lean Software Development. So those anticipating a simple recipe that can be followed and named Lean Software Development will be disappointed. You must fashion or tailor your own software development process by understanding Lean principles and adopting the core values of Lean.
There are several schools of thought within Lean Software Development. The largest, and arguably leading, school is the Lean Systems Society, which includes Donald Reinertsen, Jim Sutton, Alan Shalloway, Bob Charette, Mary Poppendeick, and David J. Anderson. Mary and Tom Poppendieck’s work developed prior to the formation of the Society and its credo stands separately, as does the work of Craig Larman, Bas Vodde, and, most recently, Jim Coplien. This article seeks to be broadly representative of the Lean Systems Society viewpoint as expressed in its credo and to provide a synthesis and summary of their ideas.
Lean Software Development is more strategically focused than other Agile methodology. The goals are to develop software in one-third the time, with one-third the budget, and with one-third the defect rate.
JIT (Just in Time), another important element of Lean is a production strategy that strives to improve a business return on investment by reducing in-process inventory and associated carrying costs. This improves quality at every step and empowers the team.
The 7 key principles of lean software development are:
1. Eliminate Waste.
2. Quality at every step/Build Quality In.
3. Create Knowledge.
4. Decide JIT (just in time)/Defer Commitment.
5. Deliver Fast.
6. Respect People.
7. Optimize The Whole.
The Kanban method, as formulated by Toyota’s Taiichi Ohno, is a system to improve and maintain a high level of production. It is a way to organize the chaos that surrounds so many delivery teams by making the need for prioritization and focus clear.
It is also a way to find workflow and process problems to solve in order to deliver more consistently to your client/customer/etc. Both of these are made possible by introducing constraints into the system to optimize the flow of value. Flow of value is king. If you can’t get your business value flowing out the door consistently, your business is not performing optimally.
Finally, Kanban resets your brain to value finishing over starting. It sounds like common sense right? Well, if you’re like most developers you have been conditioned into associating your value by what you have started. Kanban reminds you to stop starting and start finishing!
Kanban has 8 things you need to know. They are broken down into three basic principles (how you need to think) and five properties (what you need to do).
How you need to think
1. Start with what you do now.
2. Agree to pursue incremental, evolutionary change.
3. Respect the current process, roles, responsibilities & titles.
What you need to do
4. Visualize the workflow – a “Kanban board” team using Scrum may call it a Scrum board or “whiteboard” but this comes from Kanban and is called a Kanban board.
5. Limit Work in Progress (Wip).
6. Manage flow.
7. Make Process Policies Explicit.
8. Improve Collaboratively (using models & the scientific method).