The Seven Principles of Lean Software Development

Chapter 2 of Implementing Lean Software Development From Concept to Cash deals with the seven principles of Lean Software Development.

Here are some quotes and personal thoughts about each principle.

  1. Eliminate Waste

    The biggest waste in software development is unnecessary features and unfinished work. They add complexity to the code and cause confusion. People make wrong assumptions based on code that should not even be there. Unnecessary features equate to over production in the manufacturing world.

  2. Build quality in

    Zero tolerance. Every defect that is identified is fixed immediately. Using TDD and CI your defect rate should be so low as to render a defect tracking system pointless. Testers still play an important role, but a tester finding a defect should be the exception not the rule.

  3. Create Knowledge

    Knowledge crunching. You will always know more tomorrow than you know today. Requirements and initial design are nothing but a forecast, an initial guess. Not only do you learn more about the business as you go along but you also learn about your own processes. Successful projects adjust their practices to rectify problems as they occur.

  4. Defer Commitment

    Leave your options open so that irreversible decisions are made as late as possible. This requires flexibility in the code areas more susceptible to change. There is a fine line between adding flexibility and producing waste.

    “In preparing for battle I have found that plans are useless, but planning is indispensable” – Dwight Eisenhower.

  5. Deliver Fast

    Deliver software so fast that our customers don’t have time to change their minds. This needs to be done with quality built in, otherwise it’s a hack.

  6. Respect People

    Self explanatory. Although it is worth noting that this has more to do with empowering people to make decisions and respecting their abilities and ambitions.

  7. Optimize the Whole

    A lean organization optimizes the whole value stream, from the time a feature is requested until it is deployed. This involves at least analysis, development and QA.  The separation between developers and testers is particularly harmful and common. They are often treated as two different teams with two different managers. Efforts to optimize each team separately are counter-productive.  Each team develops their own schedules and priorities which are not always aligned with the other teams.  The process as a whole suffers and the customer needs fall between the cracks.

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.