- What’s the origin story behind the Lean approach?
- What are the 7 Lean software development principles?
- How can you benefit from lean software development?
Lean software development has evolved far beyond its origins. From the bustling factory floors of Toyota to the dynamic world of the digital, the principles of Lean are now optimizing software engineering. However, this isn't merely a tale of adopting a new methodology; it's about a fundamental shift in thinking.
Whether it's a budding startup, a rapidly evolving scale-up, or an established tech giant, the Lean approach can be your golden ticket to sustainable growth.
Allow me to take you on a journey through Lean software development, which applies lean manufacturing principles to software development. We will explain the origin story behind its seven key principles. As active practitioners of Lean methodology, we also offer you expert insights on how we intertwine them with our software development process.
You are probably all too familiar with traditional management frameworks and recent ones inspired by the Agile mindset.
You know their strengths and weaknesses. Not only that, but you've probably identified that neither of the approaches guarantees nor answers excessively the need for excellent customer value. I bet that you’ve experienced situations where even the most thought-through implementations of Agile processes still resulted in slow or ineffective communication, knowledge gaps, or context switching. You’ve also wasted resources on unnecessary code, features, or even products.
How do I know that this might have been your experience? Vazco is an efficiency multiplier for companies of all sizes – from seeds to enterprises. We advise on how to improve the entire software development process. In our experience, Lean development methodology guarantees consistent delivery, customer value, and continuous improvement of the whole E2E product development process.
In a second, I will dive into the application of Lean, including how it could soothe your process-related challenges and amplify what’s best in agile practices. Before we do so, however, let me tell you a short story.
What’s the origin story behind the Lean approach?
In the post-WWII era, Japan faced immense challenges. Toyota – a car manufacturer – has been struggling with production inefficiencies. The arrival of Taiichi Ohno, an industrial engineer, marked a pivotal turn. Inspired by the Ford Motor Company and the just-in-time model of American supermarkets, Ohno envisioned a process that would minimize waste and maximize value.
Ohno's vision birthed a series of experiments at Toyota, leading to the development of groundbreaking concepts like Kanban (scheduling system), Kaizen (continuous improvement), and Jidoka (pursuing the right first time). These innovations laid the groundwork for the Toyota Production System (TPS), a revolutionary approach emphasizing efficiency and waste reduction in manufacturing. However, this transformation wasn't straightforward; it demanded a profound cultural shift within Toyota.
By the 2000s, had profoundly influenced software development. This movement has been greatly influenced by a book by Mary and Tom Poppendieck. The lean principles, initially honed in factories, were now instrumental in shaping efficient, quality-driven software production processes.
That brings us back to the original question. What is lean software development? And, most importantly, why is it beneficial for you - whether you are a startup CEO or a project manager of a globe-spanning enterprise?
What are the 7 Lean software development principles?
1. Eliminate Waste (Muda)
This principle focuses on identifying and removing any activities or processes that do not add value to the customer.
In software development, this often comes down to overengineering - building the wrong (unnecessary) features or products. This can even mean delivering great code… which is not needed.
A practical approach to avoid building the wrong features or products is through MVP (Minimum Viable Product). This involves building a product with just enough features to satisfy early customers and provide feedback for future development.
Moreover, it allows testing hypotheses and iterating quickly whenever the project demands it. However, even when building an MVP, there's often a temptation to add more features or make a product more complex than necessary. While these additions might seem valuable from a technical perspective, if they don't serve a customer's need, they are essentially a waste.
There is another catch. Whether a mobile or web app, the product itself must have a clear competitive advantage. If many strikingly similar apps already address all plausible user needs, it may be a tell-tale sign that you're building the wrong product. We recommend sufficient competitive analysis, creating a strong value proposition, and, perhaps most importantly, user research. Without them, you risk building a final product blindfolded by your own assumptions on what adds value to your user base.
We are also advocates of the “code is a waste” approach. In our view, each line of code must be purposeful and drive your business product. Convoluted or unnecessary code can not only make your app more difficult to understand (resulting in poor Developer Experience), but also lead to technical debt.
Building the wrong feature or product is merely the tip of the iceberg regarding waste. If you want to learn more about the topic, stay tuned for our blog post on types of waste in the software development process.
2. Deliver Fast
In Lean thinking, delaying value delivery to the customer is a waste. This mindset boils down to an even more profound implication.
When your work reaches your customer, it’s valuable. Until then, it isn’t.
Thus, this principle prioritizes shorter development cycles, faster feedback loops, and incremental development.
We must accentuate, though, that a fast delivery process isn't the same as ticket development. Rushing through a backlog to meet an unrealistic deadline is hardly in alignment with Lean philosophy. Another pitfall to avoid is the scope creep. In the rush to deliver quickly, you might be tempted to add new features or changes without proper evaluation. This not only undermines the initial project planning, but can also extend timelines and inflate costs.
So, when you aim to deliver fast, focus on client value. Opt for long-term solutions. Test hypotheses quickly and iterate whenever necessary. Aim to receive or give feedback ASAP. Limit work in progress and avoid task or context switching so that your team doesn’t need to do everything, everywhere, all at once. Automate whatever can be automated without sacrificing quality. By relieving your developers of overburdened mental capacity, they can deliver better work – faster.
Optimizing development time comes with its own set of challenges, like delivering incrementally and implementing omnipresent automation. As active practitioners of the Lean approach, we recommend specific solutions.
Firstly, opt for smaller and more frequent releases. This approach allows for quicker customer feedback and the ability to make adjustments rapidly. Secondly, invest in CI/CD and automated testing. Lastly, encourage everyone to constantly look for ways to improve processes and reduce waste, leading to faster and more efficient development over time.
3. Build Quality In
While many software development companies deliver fast and optimize costs, they sometimes neglect quality.
In Lean software development, quality is defined by value for the end user and the project's impact.
For stakeholders, it equals product-market fit and ROI.
In Lean software development, we aspire to get the product right the first time. To achieve it, we must center the process around embedding quality at each stage of development – in ideation, design, development, testing, and maintenance. Several methods allow you to uphold high standards throughout the entire software development process. We recommend user research, incremental development, regular code reviews, and automated testing.
We also call for a balanced approach. Of course, it’s important to deliver fast. However, in the pursuit of speed, there’s a tendency to opt for quick fixes or patches rather than more sustainable, long-term solutions. This approach accumulates technical debt and contributes to the need for a refactor, which will cause delays in the long run. Moreover, pushing for faster delivery strains the development team, leading to poor Developer Experience and higher chances for burnout.
That’s why you must focus on fast delivery and quality first, even if it means spending more money. In fact, that’s why some software agencies are more expensive than others. However, with proper implementation, these costs will soon pay off with a more maintainable product that satisfies both the client and their end customer. We believe it would benefit you to recognize quality as a long-term investment.
Refactoring is a prime example of avoidable quality-related costs. From a Lean perspective, if the need for refactoring arises from poor initial design, lack of planning, or inadequate understanding of requirements, it could be seen as rework. In these cases, refactoring represents an effort that could have been avoided with better upfront work. On the other hand, excessive refactoring in pursuit of perfection is also a waste when it doesn't add proportional value to the software.
We also see limitations to the "getting it right the first time" approach. For example, when startups and scale-ups build prototypes, quality can be less relevant than a fast time-to-market. Suppose your initial assumption is to ditch the first version and start anew. In that case, it's okay to neglect the overall quality - as long as value for the end user is delivered and hypotheses are tested! Always consider which Lean software development practices work for you.
4. Defer decisions
In our view, some principles of Lean software development are less straightforward than others. Deferring decisions is a prime example of a Lean thinking rule that may sound counterintuitive.
This approach stems from the understanding that making decisions too early can often lead to suboptimal outcomes, especially in an environment where change is constant and rapid.
When you make the decision closer to the latest responsible moment, you can reduce uncertainty related to missing information. Typically, the longer you can wait to make a choice, the more information you have at your disposal. This leads to more informed decisions, while also minimizing the risk of making the wrong ones.
The Lean approach encourages you to make decisions at the latest responsible moment. While deferring decisions, it’s also crucial to identify which decisions can't be delayed without risking the project's success. So... defer decisions, but don't wait until it's too late!
In fact, the understanding of this principle is more complicated than meets the eye. One of the software development wastes is connected to waiting for the decision to be made – from the perspective of a “doer”. Prolonging approvals and feedback can impact the goal of delivering fast. We opt for optimized processes that minimize the risk of pausing tasks and holding them in the “review limbo”.
Adopt agile methodologies that inherently support this principle through iterative and incremental development. This allows for decisions to be made in smaller, manageable chunks and refined over time. In the fast-paced world of software engineering, it might also benefit your team to embrace change and become as comfortable with uncertainty as possible.
5. Amplify Learning
Another Lean development principle focuses on continuous improvement and knowledge sharing within a team and organization. Imagine the following scenario: a tech lead possessing specialized expertise decides to switch jobs. Sure, it might be a loss in an everyday meaning of the word - you liked the pal, and they added significant value to development efforts. However, you also notice that the full understanding of the project has left the conversation alongside them.
This scenario often plays out similarly.
When knowledge is compartmentalized, turnover affects the remaining team members. As they strive to comprehend an area they once knew, you might realize you're now dealing with knowledge loss. To mitigate this, it may be beneficial to dismantle knowledge silos and foster a culture of shared knowledge.
At Vazco, we retain valuable learning processes. One example is pair programming, where two developers from different projects work together. It's an excellent knowledge-sharing opportunity and a chance to learn by doing. Another instance is code reviews, which serve as a platform for learning - developers discuss code quality, programming standards, and alternative solutions.
We also value T-shaped experts. Most of our developers are full-stack and grow in a direction they have set for themselves. Seniors act as mentors both for juniors and each other.
Our velvet organizational culture also promotes cross-functional teams. For example, the tech lead circle (tribe) meets weekly to discuss their ongoing projects, ask for feedback, and solve issues together. As a result, all our tech leads collectively take care of each project.
6. Respect for people
Lean thinking emphasizes the importance of having a motivated, empowered, and cross-functional team.
This involves giving team members the autonomy to make decisions, fostering a collaborative environment, and respecting their professional expertise.
Micromanagement is an important pitfall to avoid. Empower Product Managers to trust their team and limit the tendency for perfectionism. The imperfect product that adds value is a good enough product. Even more so when each team member is satisfied with their work and understands its impact on customer satisfaction.
Vazco is a velvet organization. This means that while we uphold leadership and clear direction (the 'steel' part), we simultaneously place a high value on empathy and a supportive work environment without hierarchy (the 'velvet' part). From our point of view, people can learn and grow only when they're encouraged in their pursuits.
Respecting our team involves more than just acknowledging their efforts; it's about actively fostering an environment of open communication and constructive feedback. We cultivate a culture where healthy debate and candid discussions are encouraged, ensuring every voice is heard and valued.
This approach not only builds trust but also empowers our team members to act proactively and take accountability for how their work impacts the project. To put these principles into action, we have established regular feedback sessions and project retrospectives.
7. Optimize the whole
In software engineering, it's not uncommon to seek improvements or optimizations in a specific area without considering the impact on the overall system or process. Sometimes, they're meant to be a quick fix for a broader issue. And indeed, they might solve one challenge but multiply others - leading to inefficiencies on a larger scale. In our view, it often stems from an insufficient understanding of strategic objectives.
If Product Managers fail to educate software development teams on both business and technical goals, it results in poor work quality.
Many software development companies treat the software team involved in building a project as blunt instruments. Deliver fast, no matter the odds. This gets us back to the other Lean principles: amplify learning and respect for people. Each individual working on a project must understand a broader, holistic vision. Only then can they deliver as much value as customer satisfaction demands.
A software product is more than just the sum of its features - just as a human is more than its body parts. Creating value for the end user lies in how efficiently these features create a cohesive, functional, and user-friendly whole. This principle results in a higher quality product and fosters a more collaborative and purpose-driven team environment.
Lean software development process improvement focuses on the entire value stream. In practice, it means examining and optimizing every step in the software development process. This helps pinpoint bottlenecks, redundancies, or non-value-adding activities that can be eliminated or optimized. Simultaneously, define the value definition – it often correlates with set business objectives. The goal is to create a seamless, efficient process that delivers maximum value to the customer with minimal waste.
It’s not just about delivering fast and efficiently. It’s crucial to deliver the right product, which will undoubtedly result in a great business impact.
How can you benefit from lean software development?
Let's revise what we have established until this point. Lean methodology allows you to overcome several challenges associated with the software development process. Moreover, it offers a cohesive philosophy that streamlines processes when applied.
- Don't build unnecessary code, features, or even products. Identify what brings value to your end user and deliver it using minimum resources to test hypotheses quickly.
- Confusing fast delivery with a ticket development trap is a pitfall to avoid. Achieve speed through sustainable solutions, like incremental development and small (but frequent) releases. Automate on a large scale.
- Pursue the right first time if that aligns with your strategic objectives. Make long-term investments in quality to avoid time-consuming rebuilds and reactors in the future.
- Make decisions at the latest responsible moment. Less uncertainty means more informed decisions. The more information you have, the better.
- Build a culture of continuous improvement and streamline the learning process across the entire organization. Use valuable tools like pair programming and code reviews to facilitate knowledge sharing.
- Build a safe space for open communication, constant feedback, and healthy conflict. Allow each team member to act proactively, taking accountability & ownership for their impact on the project.
- Local optimization can sometimes lead to inefficiencies on a wider scale. Identify what brings the real impact and discard non-value-adding activities. Educate the team involved on the strategic objectives to create a holistic project perspective and customer business model understanding.
It's time for a short summary! What is Lean software development? In essence, it's an approach to perfecting a production process in manufacturing and software development. Both Lean and Agile principles embrace incremental development processes with a focus on efficiency and adaptability. However, Lean helps us optimize beyond software development processes – also in building the right products with greater impact. It teaches us to minimize waste and deliver value as quickly as possible.
In the words of Taiichi Ohno (Head of Toyota Manufacturing):
"All we are doing is to observe time from the moment we get the customer's order till we get paid, focusing on reducing the lead-time by eliminating everything not adding any customer value".
Thank you for joining me in exploring the ins and outs of Lean. This is the first of many in-depth articles about the topic we plan to post in the future. Consider following Vazco on LinkedIn to stay tuned for our recent blog updates. On the other hand, if you’re currently looking for a lean software development team on demand, drop us a line!
With 10+ years leading businesses through their product lifecycles and honing my entrepreneurial spirit for 5+ years, I’m driven by the pulse of innovation. My forte lies in orchestrating Lean transformations and innovations in dynamic, multicultural settings. For example, I’m the co-architect of Lean overhauls in multiple companies worldwide.
Beyond the boardroom, I’m a devoted husband and father of three, juggling a bustling household with three 🐾 Border Collies and 🐈⬛ a stealthy feline. Also, you’ll often find me chasing personal bests as an avid runner, pushing boundaries on both pavement and professional fronts. 🏃