Today, I am proud to present a guest post by Jimena Calfa. Jimena is a System Engineer with Software Quality Assurance background and the founder of On Quality blog, an information source dedicated to sharing knowledge, lessons, experiences, opinions and actuality about the interesting world of Quality.
Jimena is one of the contributors of the ASQ Influential Voices – group of quality professionals from around the world who discuss about key quality issues with the main objective to raise the voice of quality and spread the word.
Jimena was born and raised in Argentina. She writes in both English and Spanish on her blog. Jimena came to the Unites States with her husband in 2006. Living in America has fueled her passion for Quality. She is ASQ certified in Quality Process Analyst (CQPA) and Lean Enterprise certified by the University of California - San Diego.
Jimena's motto: "Quality is everyone's responsibility. We never have to stop getting better."
--------------------------------------------------------------------------------Lean Software Development (LSD) is a term originated from a popular book by the same name, written by Mary and Tom Poppendieck. In such book, they presented the first translation of Lean principles to software development, plus 22 thinking tools to help translate those principles into agile practices. Having its roots in the well-known Toyota Production System, LSD focuses on helping software development companies to optimize their process, solving problems that old methodologies like waterfall have, and delivering software with better quality, reduced cost, and faster delivery.
Let’s do a review of the 7 LSD principles:
1. Eliminate Waste: take out all activities that do not add value from the perspective of the customer; in other words eliminate any material/resource beyond what the customer requires and is willing to pay for. The 7 Sins of LSD are: Partially done work, Extra features, Relearning, Handoffs, Task switching, Delay and Defects.
2. Build Quality In: Mistake-proof your code from the beginning to prevent appearance of defects late at the end of the process. One tool used to do that is test-driven-development where developers write unit and acceptance tests before they write the associated code. Coding and testing the system as often as possible working with short iterations, helps to reduce the appearance of defects late in the process. You can consider your development process defective if you assume that verification process is the only time when you could find defects, queue them (partially done work, waste#1) and then perform almost endless test-and-fix cycles.
3. Create Knowledge (aka Learn constantly or Amplify learning): “Planning is useful. Learning is essential”. Software development is a knowledge-creating process; recording the team's knowledge is an efficient way to reduce waste of relearning and make the tacit knowledge more explicit and available for everyone. Also, software development is unpredictable so we shouldn’t base our development process on a plan considering it as a fact (can we predict the future?); we should take it as a forecast and work with short cycles, change-tolerant codes, and iterations with refactoring - improving the design as the system develops- so we can generate knowledge, have quickly feedback, and prevent of making early-irreversible decisions. In that way, you will have a development process that encourages systematic learning throughout the development cycle, so we can respond quickly and correctly to events as they occurred, delivering more predictable outcomes.
4. Defer Commitment (aka Decide as late as possible): the more information you have, the better decisions you make. Developing a robust, change-tolerant design and schedule irreversible decisions for the last moment until uncertainty is reduced and before it is too late, is the best option to not being locked in a critical design decision made in the incorrect time. A software system doesn’t need complete flexibility, but it does need to maintain options at the points where change is likely to occur.
5. Deliver Fast: it refers to companies can deliver faster than customers can change their minds. To achieve that you should focus on 2 main practices:
- develop your product driving down cycle time (short iterations), with small batches of requirements and fewer things-in-process, so at the end of each iteration, you can have a rapidly feedback from your customers and decide how to continue;
- have a fast-moving self-directed development team with excellent reflexes and a disciplined, stop-the-line culture.
You can’t sustain high speed, unless you build quality in.
6. Respect People (aka Engage Everyone or Empower the team): Respect means that instead of telling people what to do and how to do it, teams are given general plans and reasonable goals, and are trusted to self-organize to meet the goals (semi-autonomous teams). Engaged, motivated, thinking people with proper training, coaching and assistance, are the basis of competitive advantage in today’s economy.
7. Improve the System (aka See/Optimize the whole): it refers to improve and control your entire value stream - from customer request to deployed software - instead of just optimize part of it (sub-optimization). One commonly practice used to optimize your system is the use of metrics, but the same concept applies: when a measurement system has too many metrics the real goal of the effort gets lost. The solution is to “Measure UP” - find a higher-level measurement that will drive the right results for the lower level metrics and establish a basis for making trade-offs.
These principles are universal guiding ideas, the application of them into a software development company requires analysis, interpretation, and an exhaustive work to translate them into appropriate practices that can be apply to a particular environment.
The more you learn about Lean, the more you will realize how much value it has when applying to software development projects. And always remember these: rapid delivery, high quality, and low cost are fully compatible; learn from experiences and never stop getting better!
- Lean Software Development: An Agile Toolkit by Mary and Tom Poppendieck – 2003
- Implementing Lean Software Development: From Concept to Cash by Mary and Tom Poppendieck – 2006