Lean practices promote speed and flexibility by implementing core disciplines that promote change tolerance and allow decisions to be delayed as long as possible. Lean software development changes the focus from gathering requirements to encoding all requirements in tests. It introduces the concept of refactoring that is, creating a simple design at the beginning of development to handle early requirements, and then improving the design later as more requirements are discovered.
System testing and code integration are perform regularly to ensure maintainable code which reflects flexibility for any rapid change. Considering all these qualities it is evident that if this framework is applied in software
development it can produce highest quality software in shortest possible time.
Lean Software Development defines the maturity of an organization by how quickly and reliably it can serve its customers. It is based on the theory and principles behind lean production, which was pioneered by the once – upstart Toyota automobile company. Lean Software Development is a toolkit of principles, ideas that guide but that are not concrete instruction of what to do, that may be used by managers and team leaders to identify, shape, and implement practices for the project team and organization. It will resolve unacknowledged issues in software development but will also improve the development process and obtain better results.
Lean development takes lean manufacturing principles and applies them to software development. Lean development is founded by these following described principles.
Eliminate Waste: Waste is any activity, artefact or output that does not add value to the system. This includes documents that are not required, components that are built but then not used any features programmed that are not immediately needed, and even the handing off of activities from one group to another. Basically, whatever slows down the project team from giving the customer what he needs is considered waste. “However, the priority of the project team should be to avoid these following wastes during
the development process, which are
· Overproduction (Extra features)
· Inventory (Requirements)
· Extra processing steps
· Motion (Finding information)
· Defects (Bugs not caught by tests)
· Waiting (Waiting for decisions, including customers)
· Transportation (Handoffs) ”
This principle distinguishes the development process from the production process. While the production process is focused on reducing variation; the development process is focused on defining the right product
or system. Project teams need to put processes in place and shape their environments. Decide as late as possible: This principle tackles environments of high and rapid change head on. Delaying decisions allows a project team to wait until the future is closer and easier to predict. Keeping options open in terms of
design requirements and code enables a project team to move quickly on new and even unexpected pieces of information.
Deliver as fast as possible: Delivering working software quickly and as needed instead of all at once and after substantial investment and effort helps reinforce the three above discussed principles. By focusing on
delivering what is needed now, we are able to hold off on decisions about what may be needed later. Learning is amplified because early deliveries enable the customer and the team to better understand and give feedback on the portions of the system that have yet to be developed. Finally, reducing the time between a request for functionality and the delivery of that functionality also reduces waste.
Empower the team: One of basic principle of Lean Production “is to drive decisions down to lowest possible level, delegating decision – making tools and authority to the people on the floor ”
Decisions cannot be put off until as late as possible if they all need to be made by managers and other highlevel people. When programmers are provided with appropriate guidance and engaged in activities related to design and process, they make better decisions on their own than anyone else could make for them.
Build in integrity: Integrity means that the product or system is put together well, operates smoothly, will continue to be useful over time, can be extended, is easy to use, and is not difficult to maintain. Integrity comes from good leadership, domain knowledge, communication and discipline, not simply good practice and process. The integrity of a system is based on how well its part work together, not simply quality of each individual part.