Lean software development is a process that focuses on minimizing waste and maximizing efficiency, but even with the best of intentions, it can be easy to fall into bad habits.
The last thing you want is to derail your project and slow down development.
At CyberMedics, we'll explore the seven deadly wastes of lean software development made famous by Mary and Tom Poppendieck in their book Lean Software Development: An Agile Toolkit. We also see companies do these all the time in multiple projects.
So let's dive into what they are, why they're dangerous, and how you can avoid them to make your software project more efficient.
Ready? Let's go.
Benefits of eliminating waste in software development
The main goal of lean software development is to cut out any waste and make the process as efficient as possible. To do this, project managers must be willing to identify wasteful activities, analyze their sources, and take proactive steps to eliminate them.
By eliminating waste from your software development projects, you can:
Improved efficiency and productivity: By eliminating unnecessary steps, you can enhance the speed of your development cycle.
Increased agility and flexibility: Lean processes are designed to be adaptive, so that your team can quickly respond to changes in business needs.
Reduced costs and resources: By eliminating redundant activities, you can reduce the cost and minimize the resources needed to complete a project.
Better quality and customer satisfaction: Lean software development encourages the creation of higher quality products with shorter time-to-market.
1. Overproduction: Cut the fat
You ever use an app, see a feature, and think: why is that even here? Samsung had that moment with the air gesture feature, which let you control your phones with mid-air hand movements. It was an innovative idea on paper, but it never really caught on, and eventually had to be removed.
That's overproduction - producing something when there’s no real need for it – in other words, the masses aren't interested.
It can be tempting to add extra features and bells & whistles that aren’t necessarily needed. Many companies in the software development industry rush to add features as a show of strength. But when you overproduce, you’re wasting resources (not only time, but money too). Plus, you’re making your app more difficult to maintain and increasing the chance of bugs.
The fix: Use the Pareto Principle
This concept states that 80% of the effects come from 20% of the causes (features in this case). You may use the Pareto principle to prioritize the lean development of a small set of high-impact features over a larger set of low-impact ones.
By using agile development methodologies (e.g., scrum framework, kanban project management, and iterative development), organizations can deliver value in small increments, which reduces the risk of overproduction and allows them to make changes and adjustments more quickly.
When it comes to designing software, the customer and their users are essential factors in deciding what features should be included. This involves talking to them, gathering feedback and insights, then using this information to make informed decisions on which features should be included in the final product.
Once you've established which features are essential you can develop a minimum viable product that has just enough features to satisfy customer needs. This will help you to quickly launch the product with minimal waste and still receive maximum value from it.
2. Inventory waste: Reducing partially done work
This is a bit different from overproduction because it involves work that's not yet complete, whereas overproduction describes work that is complete but isn't necessarily needed.
This waste occurs when projects are held up due to parts or materials not being on-site, or other tasks taking priority over the current project. Inventory waste can also happen if an organization holds onto too much stock, meaning valuable resources and funds are tied up in excess inventory. Some typical examples are:
Uncoded documentation: Documentation that hasn’t been implemented yet and is waiting in the backlog
Unsynchronized code: Until it's integrated, written code cannot be validated or deployed, and therefore adds no value to the end user. Too often, the code is no longer needed or too much has happened since its inception so many changes are required by the developer.
Untested code: A backlog of code that is untested can cause issues down the line if it hasn’t been thoroughly checked for bugs. (Check out next: Performance Test vs Load Test vs Stress Test: Ultimate Guide)
The fix: Implement a pull system & CI/CD practices
Rather than stockpiling work, in a pull-based development process, work is only started when there is a specific customer demand for it. This can help to prevent the buildup of inventory waste by ensuring that work is only completed when it is needed.
Additionally, with continuous integration and delivery like automated testing and deployment, your team can deliver value to customers more quickly and reduce the risk of inventory waste. And by regularly reviewing and optimizing the development process, you can identify bottlenecks in the process, streamline workflows, and implement automation to improve efficiency.
3. Extra processing: Avoiding unnecessary steps
Extra processing waste occurs when developers are repeating tasks or have unnecessary additional process steps that could be made more efficient. This can happen in almost any area of software development, but is particularly common in the analysis and design stages.
For example, a developer might spend hours creating a document to explain their idea, only for it to end up unused. Or perhaps a task takes twice as long to complete because of “invisible” steps that don’t contribute to the value of the product. Why waste time, energy, and money creating documents when you could just deliver the information verbally or by other means (speaking, emailing, etc.)?
The fix: Automation & knowledge silos
Automation can help to reduce wasted time and effort by streamlining processes in the value stream, such as testing and deployment. For instance, you can use automatic software systems to run tests quickly, or design tools that allow developers to create applications with minimal coding.
In addition, knowledge silos are a great way of sharing information without having to waste time repeating the same information over and over. You can create silos for each area of the development process, such as design, coding, or testing, where relevant and pertinent documents or notes can be stored.
That way, everyone has access to the same up-to-date information in one place.
4. Transportation: Cutting down on hand-offs
Transport in lean manufacturing refers to moving a product, but handoffs in lean software development refer to moving activities. See, sending projects from one team to another generates additional work for transferring knowledge and providing training. This assumes a 100% success rate for knowledge transfer, which isn't true.
In every handover, companies lose about 50% of knowledge, according to Tom and Mary Poppendieck. That means after 5 handovers, there's only 3% of the initial amount left.
The fix: Effective communication & collaboration
Any project needs knowledge transfer, but we can reduce its negative effects. Implement policies to break down knowledge silos by integrating disparate teams and adding cross-functional teams.
You should also prioritize communication channels like documentation, emails, voice calls, and in-person conversations. To get even better results, feedback loops should be quick, and iterations should be short.
5. Defects: Get rid of them for good
Defects in the software development world are mistakes that occur during coding and can cause a product to malfunction. Usually, defects need to be identified and fixed by the development team before they make it into the final product. The bigger the project, the more time and money is spent on debugging and fixing bugs.
The fix: Quality-oriented development & process optimization
To prevent defects from occurring in the first place, you should practice quality-oriented development. This involves using high-quality coding standards and following established processes to ensure that mistakes are avoided. You should also take a deeper look into process optimization by reviewing your development workflow regularly and identifying areas that need improvement.
6. Waiting: Don't be idle
Waiting around is a waste of time in any field, let alone software development. This includes waiting for requirements to be delivered, feedback to be provided, resources to become available, and projects to move along. Any kind of waiting can lead to delays and missed deadlines.
The fix: Prioritization & resource management
You need good prioritization and resource management processes to avoid delays and develop stuff faster. Start by determining the importance of each task and allocating resources accordingly. You should also use scheduling tools to plan out your projects more effectively.
Instead of emails or reminders, software teams should use in-person communication or instant messaging for approvals. Establish independent teams that do not require approval or validation from anyone. This may take time to implement, but makes it easier to work. In lean software development, decision-making power needs to be shared among members.
7. Motion: Avoid context-switching
Often developers juggle between different tasks and projects, switching from one context to another. This can lead to time-consuming and inefficient work processes. When a developer quickly jumps from one project to another without taking time to recover, it can lead to fatigue and burnout. The reason for this is that developers have to start from the beginning every time with task switching, even if it's something simple.
The fix: Create processes & set boundaries
You can reduce context-switching by creating processes and setting boundaries. Start by understanding why developers switch tasks often and which tasks they usually switch to. After that, create specific processes for each task or project and make sure each one is explained clearly before it's implemented. Furthermore, set boundaries on how often you allow switching between tasks so developers can stay in the same context for longer periods of time.
By limiting the amount of work-in-progress in a software development context, your team can minimize context switching in the same way they would handle the waste of partial work. A post-incident review can also reduce context switching from unplanned work. To reduce "surprises", individuals and teams should prioritize tasks and synchronize with each other's priorities.
By implementing the seven wastes of lean software development and following these tips, you can create a more efficient workflow for your team. This will help to reduce costs, cut down on time wasted, and ultimately improve the overall quality of your product.
With careful planning, prioritization, process optimization, resource management and communication strategies in place - teams can work together better with less context-switching.
At CyberMedics, we partner up with your organization to help you minimize these wastes of development and accelerate the software production process.
Get in touch today to see how we can help!