Plutora Blog - Release Management
Lean Software Development and the 7 Principles That Drive ItReading time 6 minutes
A primary goal of software development teams is delivering valuable features and products as quickly and effectively as possible. One way they can optimize how quickly they deliver software is by leveraging methodologies such as lean.
In this article, I’ll cover the seven principles of lean software development, and how to use value stream mapping to implement them.
7 Principles of Lean
1. Eliminate Waste
The first principle of lean software development is to eliminate waste. Some obvious forms of waste include time spent building, analyzing, or designing features that won’t be used; or time spent supporting software and fixing bugs. But there are sneakier forms of waste as well, such as premature optimization (more on this later).
2. Build Quality In
The second principle of lean software is to build quality in. The primary purpose of building quality into a piece of software is to avoid having to rework it later. If we don’t produce high-quality software in the first place, then we’ll end up having to put out fires after it’s been released, while also juggling our new work. Another name for this workflow detractor is “task switching,” which is an explicit form of lean waste because these kinds of distractions can be costly.
3. Create Knowledge
The third principle of lean software is to create knowledge. Writing software is difficult to do because software engineers must consider an overwhelming number of eventualities. Software has millions, billions, and even trillions of nodes of complexity. Therefore, the cost of hiring new staff members and training them about the business domain can be high. So it’s important that lean companies do whatever they can to retain their staff and keep their accumulated knowledge within the business.
4. Defer Commitment
The fourth principle of lean software is to defer commitment. Do you want an ice cream cone on the fourth of June next year? Maybe, maybe not. Why make a commitment now when you don’t know how things will play out then? The cost of planning step-by-step, multi-year waterfall projects has been shown time and again to be very high. Rather than spending time updating Gantt charts and trying to predict our work four years out, we should defer the commitment, make a small step, and then reflect on what we learned.
5. Deliver Quickly
The fifth principle of lean software is to deliver quickly. Delivering quickly ensures that we don’t accrue waste such as work piling up in queues or having lots of work in progress (i.e., work that isn’t delivering value to the customer). The faster we deliver, the faster we can measure the impact of our work and then adapt it based on our findings. The bleeding edge of delivering quickly can be achieved with practices like trunk-based development and feature flags to achieve true one-piece flow.
6. Respect People
The sixth principle of lean software is to respect people. Lean thinking has always emphasized the importance of the workforce. So much so, in fact, that in Toyota’s factory (the origin of much lean thinking) any employee had access to what was known as an Andon Cord. Pulling that cord whenever a defect was found on the assembly line would halt production. You can see how by doing this Toyota put a lot of power (and responsibility) into the hands of its people. Toyota assumed that those who were doing the work would have the best view on how to improve the work.
7. Optimize the Whole
The seventh and last principle of lean software is to optimize the whole. This principle acknowledges the need to take a holistic view of the software development process in order to make improvements. Software is comprised of many individuals completing their part of the chain. However, to achieve true effectiveness, you must optimize across all of the work completed. In fact, discussing the importance of optimizing the process leads quite nicely into our next topic: value stream mapping, the tool that can help you implement lean principles.
Value Stream Mapping
Let’s start by answering the question: What is value stream mapping (VSM)? It’s a tool for visualizing and analyzing the steps taken to create a product or service.
OK, so you might be wondering what that means in real terms. Let’s take a step back. In software development, VSM helps us see all the steps to be taken during production, from code commit to code execution.
While it may be hard for newcomers to believe, a lot of companies can’t tell you with any clarity what it takes to put a code commit into production. That’s where value stream mapping can help. By seeing the full process, we can start asking questions and making changes.
Visualizing the IT Delivery Process
To understand how we apply value stream mapping, let’s look at the typical steps for taking code from commit to production. It’s almost impossible to define a one-size-fits-all IT delivery process, so we’ll break it down into the four main parts:
- Writing Code — This could happen with test-driven development (TDD) methodology, pair programming, or any flavor in between. Once written, code is often examined through a peer review process.
- Testing Code — Most companies will progress code through a series of testing environments, with each step increasing in similarity to production code.
- Releasing — This is the step when the existing software is replaced in some form with the new software we want to run.
- Monitoring — Now we check to ensure that the changes we’ve made have the desired impact. Does our code run faster or slower than before? What are the error rates? What’s the impact on user success?
In value stream mapping, we lay out each step of the process to show how one event flows into the next. Who is doing what, where, and why? We then construct our mapping visualization by asking questions:
- Are we creating waste? Where?
- Are we empowering team members?
- Why are we doing this work twice?
- What happens if something fails at this step?
- Who is responsible for X?
With value stream mapping as our central point of reference, everyone who’s gathered around it can ask critical questions about the software delivery process.
Applying Lean Principles
Value stream mapping will help you promote the seven lean principles within your company’s software development process, thereby empowering your team to optimize the whole so you can easily see where you may not be eliminating waste or building in quality like you should. In other words, by implementing VSM you’ll be well on your way to delivering high-quality software as quickly and effectively as possible.
If you’d like more details about how to do your own value stream mapping, Plutora has developed a template you can use.