By Ryan Sauer
Lean software development’s origins are actually in automobile manufacturing. In the early days of the Toyota Motor Corporation, an engineer named Taiichi Ohno developed a new production method that focused on eliminating waste. The company’s methods became known as Lean Manufacturing, and grew into the philosophy of identifying and eliminating any manufacturing action or product that did not add value to the customer.
In 2003, Mary and Tom Poppendieck applied Lean Manufacturing principles to software development and authored the award-winning book, Lean Software Development. Both Mary and Tom Poppendieck have led teams that implemented software development solutions such as, building 3M’s first Just-in-Time lean production system. Now, the Poppendiecks specialize in the implementation of lean production techniques to software development through Poppendieck LLC.
Lean Development Principles Can Lead to Big Improvements
The lean principles that work for Toyota’s development and manufacturing processes have been tested and proven to generate dramatic improvements in many other fields including healthcare delivery, construction, communications and software development, among others.
But Lean software development may not be right for every project and product. Some projects are too big, with teams comprised of more members than will allow for the close communication required of a truly Lean project. And some products may have requirements that change throughout the development cycle. Project managers who are considering Lean software development should start small and simple, test often and analyze the results. Most importantly, they should learn the seven principles of Lean thinking.
The Seven Principles of Lean Thinking
Lean software development shares many concepts with lean manufacturing, and centers around these seven principles:
1. Eliminate Waste – In Lean thinking, waste is anything that does not add value for the customer. In software development, waste is found in unnecessary functionality, redundant features, unclear requirements and delays. Waste also crops up in communication lapses, documentation overload, unnecessary packaging and defects.
2. Amplify Learning – Improving software development means focusing on creating solutions to customer problems. Frequent testing and feedback loops are the keys to minimizing defects by determining whether the current development phase is working, or if adjustments are required. In this continuous learning process, end users get a better idea of their needs and developers learn how to address those needs.
3. Decide as Late as Possible – Decisions are always better made on facts, not assumptions. Since no one can predict what might happen, it’s smart to keep options open and delay decisions until they absolutely must be made. This flexibility is essential to Lean software development because it supports change management and avoids costly errors. It also allows crucial decisions to be made after customers better know what they need.
4. Deliver as Fast as Possible – Customers much prefer fast delivery to slow delivery. It’s good for sellers, too, because customers have less time to change their minds. Similarly, short cycles of developing and delivering the product, receiving feedback and making changes are at the heart of Lean software development. The shorter the cycle, the greater the opportunity for learning. And customers get what they need right away.
5. Empower the Team – The Lean approach empowers developers to make decisions and design their own procedures, while contributing to a higher purpose. It encourages team leaders to listen to developers, make suggestions for improvements, catch errors and remove roadblocks to progress. Feedback is fundamental to continuous improvement for both developers and leadership.
6. Build Integrity In – When software has integrity, its architecture is logical, highly usable and adaptable. Plus, it maintains usefulness over time. Customers perceive integrity when the system is intuitive, available at a fair price, delivered when needed and functions as advertised. Perceived integrity is the customer’s whole view of the system. Conceptual integrity is a critical factor of perceived integrity. It means the various components of the system work together, smoothly and consistently, with a balance between flexibility, efficiency, responsiveness and maintainability. Integrity should be verified through testing.
7. See the Whole – Software systems are a product of the way their various parts interact. They require a great deal of expertise in a number of diverse areas. When disparate groups focus on the performance of their area of expertise, or on their specific tasks – rather than on the whole system – defects tend to start showing up. This risk is more likely when more than one company is involved in a project. Measuring individuals or groups on the merit of their performance, rather than on the entire system’s performance, contributes to this problem.
In Lean Software Development, Eliminating Waste is the Focus
From the time a software feature is identified, to the time a customer received value from that feature, it’s the developer’s job to recognize and eliminate the sources of waste. Here, the Seven Deadly Wastes are defined so developers can know what to look for and get rid of.
The Seven Deadly Wastes of Software Development
1. Partially Done Work – Partially done work is like excess inventory. It gets in the way of other work, or becomes obsolete before it’s finished, thus wasting money and hiding inefficiencies in the process. Until work is completed, there is no way to know if there are defects or shortcomings that customers will find less than valuable. In Lean software development, the amount of partially done work in each project at a given moment is kept to a minimum.
2. Extra Processes – Unnecessary processes and paperwork are often huge time and resource wasters in software development. So is relearning, or reworking features due to poor code quality. Extra processes slow down response time, and can even mask small problems that become bigger down the road. Taking the time to properly document code and record test results and other findings can significantly reduce the time it takes to relearn the same code. Certain paperwork may not be necessary or even desired. Look for more efficient ways to communicate information, such as condensed table- or template-driven formats.
3. Extra Features – It’s been said that the cheapest and most reliable features of a software system are the ones that aren’t there. Extra features slow down development because they must be tracked, compiled, integrated, tested and maintained throughout the product lifecycle. They might be the result of long feedback cycles, the desire to add in trendy technology or a request from a project stakeholder. Extra features can also come about when customer wants and needs are not properly determined from the start. Utilizing the short feedback cycle is the best defense against extra features.
4. Task Switching – When developers switch tasks, or work on more than one project at once, time is wasted. Knowledge must be relearned, feedback loops are lengthened and defects can fall through the cracks. Avoid task switching by keeping the team on one project until it’s complete, and then move to the next project.
5. Waiting – Delays are normal in software development. They are harmful because they keep customers from receiving value as soon as possible, and can cause other wastes, such as task switching and partially done work. But since there is no way to improve delays, the goal in Lean software development is to eliminate them. The first step is to build a complete project team, where each member has the knowledge to contribute to successful product delivery and the reliability to be there when needed. Seeking out feedback and acting on it immediately are additional ways to eliminate delays.
6. Motion – Motion refers to the steps required to get questions answered. Walking down the hall, finding a vendor or contacting customers require various motions that can waste time. It’s more efficient to have everyone working on the project in the same room – either literally or virtually – so they are immediately available to each other, and all have access to the people who can answer questions.
7. Defects – Large or small, all defects cause waste. But the time it takes to detect them can make a significant difference in their overall impact. Work toward finding defects immediately by testing often, integrating continuously and releasing products as soon as possible.
First Identify, Then Eliminate Waste in Software Development
Lean manufacturing helped improve efficiencies and profits in the early days of Toyota Motor Company. Lean software development is doing the same for developers today. The first step is understanding where waste happens; next is identifying it; and third is eliminating it. Start identifying waste by learning and applying the Seven Deadly Wastes of Software Development to your specific project and find out how Lean software development principles can improve production and lead to higher customer satisfaction.
Ryan Sauer is a writer and editor for Bisk Education in association with University Alliance. He actively writes about project management in different industries and strives to help professionals succeed in getting their project management certification. Through the University Alliance, Ryan writes to help enable professionals obtain their PMP certification online.