The three biggest wastes in software development are:
- Extra Features – We need a process that allows us to develop just those 20 percent of the features that give 80 percent 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 can increase costs by 25 percent or more. They create buffers that slow down response time and interfere with communication.
Build Quality In
If you routinely find defects in your verification process, your process is defective.
- Mistake-Proof Code with Test-Driven Development (TDD) – 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.
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 practices in standards that are always followed 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.
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.
Lists and queues are buffers between organizations that slow things down.
- Rapid Delivery, High Quality, and Low Cost Are Fully Compatible – Companies that compete on the basis of speed have a significant 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 traffic jams that actually reduce 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.
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.