Sunday, June 24, 2007

Lean Software Development

The main idea behind Lean is to avoid over production because over production is not only wasteful it prevents rapid response to changing customer demand.

The lean initiative in the product development primarily revolves around the concept of eliminating waste and getting quality right the first time. Lean product development is a new concept. This concept is first developed and tested in Toyota's Motor Company design studios and it is a very successful approach that Toyota uses to design new car models. Toyota’s success caused their methods to be studied and imitated by people in many diverse industries, including software development.

Lean Software Development Principles

Lean principles are very important for organization that continuously improve its process. Let's look at the basic principles and practices of Lean, as applied to software development.

Eliminate Waste
The three biggest wastes in software development are:


Extra Features
We need a process which allows us to develop just those 20% of the features that give 80% of the value.

Churn
If you have requirements churn, you are specifying too early. If you have test and fix cycles, you are testing too late.

Crossing Boundaries
Organizational boundaries typically increase cost by over 25%, creating buffers that slow down response time and interfere with communication.


Focus On Learning
Planning is useful. Learning is essential.


Use the Scientific method
Teach teams to: establish hypotheses, conduct many rapid experiments, create concise documentation, and implement the best alternative.


Standards Exist to be Challenged and Improved
Embody the current best known practice in standards that everyone follows, while actively encouraging everyone to challenge and change the standards.


Predictable Performance is Driven by Feedback
A predictable organization does not guess about the future and call it a plan; it develops the capacity to rapidly respond to the future as it unfolds.



Build Quality In
If you routinely find defects in your verification process, your process is defective.


Mistake-Proof Code with Test-Driven Development
Write executable specifications instead of requirements.

Stop Building Legacy Code
Legacy code is code that lacks automated unit and acceptance tests.

The Big Bang is Obsolete
Use continuous integration and nested synchronization


Defer Commitment
Abolish the idea that it is a good idea to start development with a complete specification.



Break Dependencies
System architecture should support the addition of any feature at any time.

Maintain Options
Think of code as an experiment – make it change-tolerant.

Schedule Irreversible Decisions at the Last Responsible Moment
Learn as much as possible before making irreversible decisions.


Deliver Fast
Lists and queues are buffers between organizations that simply slow things down.



Rapid Delivery, High Quality, and Low Cost are Fully Compatible
Companies that compete on the basis of speed have a big cost advantage, deliver superior quality, and are more attuned to their customers' needs.

Queuing Theory Applies to Development, not Just Servers
Focusing on utilization creates a traffic jams that actually reduces utilization. Drive down cycle time with small batches and fewer things-in-process.

Limit Work to Capacity
Establish a reliable, repeatable velocity with iterative development. Aggressively limit the size of lists and queues to your capacity to deliver.


Respect People
Engaged, thinking people provide the most sustainable competitive advantage.



Teams Thrive on Pride, Commitment, Trust, and Applause
What makes a team? Members are mutually committed to achieve a common goal.

Provide Effective Leadership
Effective teams have effective leaders who bring out the best in the team.

Respect Partners
Allegiance to the joint venture must never create a conflict of interest.


Optimize the Whole
Brilliant products emerge from a unique combination of opportunity and technology.

Focus on the Entire Value Stream
– from concept to cash.
– from customer request to deployed software.

Deliver a Complete Product
Develop a complete product, not just software. Complete products are built by complete teams.

Measure UP
Measure process capability with cycle time. Measure team performance with delivered business value. Measure customer satisfaction with a net promoter score.


Now, let's look at the agile principles from the agile manifest.

Agile Principles


. Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

· Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.

· Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.

· Business people and developers must work together daily throughout the project.

· Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.

· The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

· Working software is the primary measure of progress.

· Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

· Continuous attention to technical excellence and good design enhances agility.

· Simplicity--the art of maximizing the amount of work not done--is essential.

· The best architectures, requirements, and designs emerge from self-organizing teams.

· At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

The non-agile world values Process whereas the Agile world values People. Documentation and Traceability are key objectives in the non-agile world and Working Software is the main objective of Agility.

The executives lean towards Lean Product Development more readily that they do Agile. This is partly because Agility is expressed in the language of developers, not managers. Lean, on the other hand generally makes sense at all levels from developers up through executive officers. Lean speaks the language of "production" without much regard to what is being produced.

References

1. http://www.poppendieck.com/

No comments: