When developing software, companies must ensure that every action they take delivers value to the client. Why? Because building the wrong thing can result in wasted resources, additional costs and delays in delivery. By utilising methodologies such as Lean and Agile, companies can prioritise eliminating waste, collaborating with customers, creating recurring feedback loops, and continuously delivering solutions. These approaches ensure that companies deliver value during every step of the software development lifecycle.
Lean and Agile are at the heart of what we do at Contic. We work in tandem with our clients and their customers from conception to completion, and beyond, while also encouraging our employees to identify and eliminate areas of waste. This allows us to get projects out the door quickly while also building impactful products that delight our clients (and their customers!).
This blog post is one of two that will look at ways you can improve your software development lifecycle using these methodologies. This blog will be focused of Lean software development and how it can be implemented. Let’s get started!
What is Lean?
Lean software development evolved from a methodology introduced by Toyota, known as Lean manufacturing. After World War II, the Japanese economy was struggling and Toyota was looking for ways to improve efficiency and productivity. Inspired by Henry Ford’s "continuous production flow”, they noticed they could maximise their productivity by minimising waste.
This involved breaking down the production process into small, manageable pieces and focusing on producing only what was necessary, when it was necessary, while also building quality into their products from the start. This helped ensure quality in their products while also removing waste and reducing costs. Toyota employees were encouraged to continuously improve their workflow by identifying and solving problems on the production line.
Eventually, Lean manufacturing made its way into software development, giving rise to "Lean software development." Its goal is largely the same - maximise customer value by eliminating waste. Anything that doesn't provide value to the customer is considered waste. By encouraging employees to regularly identify and eliminate waste, Lean development creates a more efficient and effective development process while ensuring the team’s efforts are providing value.
There are seven principles that make up lean development:
- Eliminate waste: Identify and eliminate any unnecessary activities, processes, or tools that do not add value to the customer to maximise value
- Build quality in: Build quality in the development process from the beginning by making quality assurance part of the development process
- Create knowledge: Create an environment that encourages learning and continuous improvement to improve processes and outcomes
- Defer commitment: Delaying decisions until they are absolutely necessary to allow for greater flexibility and adaptability
- Deliver fast: Deliver value to the customer as quickly as possible by breaking down work into small, manageable pieces that can be delivered continuously
- Respect people: Treat people with respect and create a positive work environment that empowers team members and provides them with the resources they need to succeed
- Optimise the whole: Optimise the entire development process, rather than focusing on individual parts in isolation, to understand how different parts of the process interact
Let’s explore a couple of ways we can actually achieve these seven principles. Note that all of the things listed below actually originated from Toyota’s Lean manufacturing process, but have been adapted to fit the software development world.
Just-In-Time (JIT) Development
As a software developer, have you ever completed a feature only to see it stuck behind a feature flag for six months? Not only is this frustrating for developers, but often businesses want to validate the success of these features so they can charge for them. If these features aren’t released as soon as they are developed, it could result in lost sales (e.g. if a competitor beats them to market). Hence, in the eyes of Lean development, this is seen as a form of waste.
To counter this, Lean development uses a methodology known as ‘Just-In-Time’ (JIT) development, that aims to deliver features to customers as soon as they are ready. Not only does this take place at the final stage of development (before deployment), but this should happen throughout the whole development process, e.g. as soon as a design is completed, a developer picks it up, which is then verified as soon as the developer completes it and so on. This means that in the value stream, products are pulled from the upstream process to the next downstream process in the correct quantity at the correct time.
This ensures that throughout the team, individuals are only working on features that are absolutely necessary while also allowing the team to respond to changes in the project quickly and efficiently.
JIT development is achieved by breaking down features into small, manageable pieces, using continuous integration and deployment, and having a flexible development process that allows for changes to be made easily. As well as this, we need to ensure that the development team are working on the highest value items at all times. This will and should be reprioritised by the product team constantly, based on customer feedback, user analytics, sales statistics and past releases.
Both organisation and visibility are key when it comes to eliminating waste. It’s important that each individual can see how they are delivering and maximising value to the customer, while also seeing how the rest of the team is doing that as well. This helps create an environment that encourages challenging decisions, innovating and collaborating.
Kanban is a visual management tool that helps teams to manage their work more effectively by providing both organisation and visibility. It uses a board with cards to represent work items (i.e. tickets/user stories) and columns to represent the stages of the process (to do, in progress, in review, done etc). This means that everyone in the entire team can see what each individual is working on throughout the whole software development life cycle. This allows the team to hold each other accountable when work is not completed on time, help get things unblocked when problems arise and have foresight on upcoming work.
Visible Value Stream
We have discussed how Kanban can function as a visual management tool to streamline visibility across teams. We can actually take this one step further by setting up a visible value stream, which ensures that for each piece of work, each step of our process is clearly visible to the whole team, from conception to deployment. There are a couple of steps we need to take to do this, using a technique called ‘Value Stream Mapping’ (VSM).
Firstly, we need to increase the visibility of work in progress by taking the principles of Kanban to the next level by:
- Ensuring each department or team has its own Kanban, which includes each step of their process. We can visualise the value stream as a high level map between these Kanban boards
- Imposing ‘Work In Progress’ (WIP) limits for each column in your Kanbans, to restrict how many work items can be in one column at a time. This will help improve processes that contribute to delays rather than ignoring them
- Using burndown or burn-up charts to show the cumulative status of all work being done, which will allow the team to predict how long it will take to complete the current backlog
Next, you should start using metrics to track progress. This can include things like cycle time, lead time, and throughput. By tracking these metrics, teams can see how quickly work is moving through the development process and identify areas where improvements can be made, as we’ll see in the next step.
Finally, we create a value stream map. This involves gathering stakeholders from every part of the team (design, testing, QA, dev ops, customer success etc). Together, you break the value stream into process blocks, noting what happens in each process block along with the team that performs it. For each process block, we analyse the state of work within the value stream, gathering the information to determine barriers to flow, using key metrics such as lead time, process time and percent complete and accurate (%C/A).
This helps identify process blocks that either produce poor quality work (which then require a lot of downstream rework) or processes that have long lead times relative to their process time. It’s these process blocks that we should see as wasteful and aim to improve. We plan to give a more detailed blog post on VSM in the future, so watch this space!
Traditionally, in large enterprise organisations, process is dictated from the top and individuals lower down the chain follow blindly. The problem with this is that these individuals are often the ones most involved in these processes, and are therefore likely the most suited to spot inefficiencies in them. They should be empowered to feel like they can influence change to help companies become more efficient and eliminate waste.
This is where ‘Kaizen’ comes in. The word Kaizen is a Japanese word, which roughly translates as ‘Continuous improvement’. The aim of Kaizen is to encourage individual team members to practise continuous improvement by giving them a voice when they feel there is waste or inefficiency in the processes they are involved in or have observed.
An important part of this is the ‘Gemba Walk’, which encourages management to speak to their employees to check what problems they are facing (Gemba is another Japanese word which roughly translates to ‘The actual/real place’).
At Contic, we encourage all employees to practise Kaizen any time they identify a potential form of waste. We even have a template that we share with all our employees that walks them through the process, which consists of the following steps:
- Define your hypothesis - where do you think there is waste?
- Define the background - why is this a problem?
- Define the current conditions - what data indicates there’s a problem?
- Define the goal - what do you want to achieve?
- Give an analysis - why does this problem exist?
- Give recommendations - how do you plan on solving this problem?
- Come up with a plan - what are the main actions and outcomes?
- Come up with a followup - how are you going to know your plan has succeeded?
A key to success for teams in any industry is being able to identify and resolve problems quickly. In Lean manufacturing, there is a cord (known as the Andon cord) that hangs above the production line and can be pulled by any employee to signal a quality or process problem. Once the cord is pulled, the production line is stopped and all workers stop what they’re doing until the problem is resolved. This helps reduce downtime, improves efficiency and, most importantly, ensures quality by not letting the problem flow downstream.
There are a couple of ways we can implement a system like this in software development. Firstly, by setting up continuous integration and deployment, along with automated testing, you can minimise the chances that defects (i.e. bugs) sneak through to production while also ensuring fixes can be pushed up quickly.
Secondly, it’s important to implement a streamlined communication process where the members of the team can ask each other for help. If a member of the team becomes stuck, the rest of the team should respond by dropping what they’re doing and resolving the problem. This could be as simple as a Slack channel where all employees are encouraged to post any problems they are having (this is what we do at Contic).
As we’ve seen in this post, Lean is all about maximising value to the customer through eliminating waste. This is by no means an extensive list of all Lean practices, but hopefully it’s given you a few tips on how you can make your software development process more valuable and less wasteful! In the next blog post we’ll be looking at how you can further improve your software development process with Agile, so stay tuned!