Lean software development is an emerging strategy from the Agile community to apply the principles and practices of Lean manufacturing to the software development process. In very broad terms, lean software development considers anything which does not add to the final value of the product as waste.
Lean manufacturing is a result of the Toyota production system, a highly efficient process for building as many cars in as little time as possible whilst minimising waste and maximising efficiency.
The central concern of lean software development is the elimination of waste, where waste is work that adds no value to a product or service. Lean software could be summarised by seven general principles, all of which are closely related to their manufacturing counterparts:
- Eliminate Waste
Anything that is not considered value to the customer can be classified as waste. Un-necessary resources, work, functionality and communication or bureaucracy all add up to waste.
To reduce waste, you have to first recognise it! Project managers should be able to able to spot waste such as abandoned code, waiting on other teams and un-needed functionality. All of these items are not considered lean software development.
When waste has been recognised it must then be removed, usually by working with management to produce guidelines and procedures to learn from mistakes and improve. The whole waste elimination process should be constantly, iteratively, repeated until every process is as efficient as possible.
- Amplify learning
Learning in this context does not refer to a programmer gaining new skills, it means gaining knowledge, or learning, about the software being developed, usually from the end user and/or customer.
Lean software development often utilises rapid prototyping tools is a great way to get constant feedback from the end user. Regular testing in cycles is necessary and ensures quality is up to scratch and no creeping bugs are introduced.
Customer feedback should be enlisted as often as possible to ensure the project is on track, on spec and on time.
- Decide as late as possible
A lot of research and fact searching takes places when it comes to lean software development. Rather than deciding first, decisions should be kept flexible as possible whilst going along with the process as requirements may change, rendering the outcome of a decision null. A methodology like Agile keeps the planning and development phase short to take in to account customer feedback at an early stage. This helps to move things in the right direction earlier than later.
- Deliver as soon as possible
Delays can cause upsets, whereas early submissions without any errors can cause delight. When considering deliverables, working with team management is very important. The team leader should be a keeping the work going without complications and keeping constant updates and meetings with the customer.
It is important that every lean software developer, and every team member, deliver on time. A small delay in one step can cause a chain reaction that pushes the delivery date back considerably.
- Empower the team
The classic saying “There is no I in team” is an important principle in lean development of software. Successful lean development of software teams are where everyone works as an equal, with the process of delegating done by a team leader. Developers should have as much say and input to the end result as possible – they are the ones directly involved in it’s creation, so they have unique insight.
- Build Integrity in
You have to build integrity in to your product when it comes to your software. Conceptual integrity has to match perceived integrity to ensure customer satisfaction. The former is how the software functions in part and together whilst perceived integrity is what the customer understands it to be. If there is minimal gap between the two, the chance of customer satisfaction is very high, even when created with lean software development.
- See as whole
Defects in software tend to accumulate during the development process – by decomposing the big tasks into smaller tasks, and by standardizing different stages of software development, the root causes of defects can be found and eliminated.
Lean development of software is all about being fast, eliminating waste and producing a product that satisfies the end user. Lean software development will produce software that is on time and on budget, every time.