Who doesn’t want to eliminate unproductive operations, reduce costs and development time, improve product quality, and increase profits? Especially in today’s ever-changing business environment. Sounds too good to be true, doesn’t it? We at MindK also believed so until we applied Lean to our software development process. After years of practice with the Lean approach, we can say for sure that it really can bring a number of benefits, if applied properly.
In order to correctly adapt the Lean concept to software development and make the most out of it, it’s important to understand its key principles and how Lean differs from other software development methodologies. So, in this article we’ll discuss:
- What exactly is the Lean approach;
- How Lean principles are applied to software development;
- How Lean software development differs from Agile;
- Which best practices that align with Lean principles we apply to projects;
So, let’s start with the basics, shall we?
The basics of the Lean philosophy: an anti-crisis approach to automotive production
“Lean” generally refers to a set of knowledge usually called “Lean Manufacturing“. Today, it’s hard to believe, but the Lean concept now used across industries was first developed in Japan for Toyota vehicle production.
After World War II the Toyota company was on the edge of bankruptcy which forced it to adopt austerity measures. For this reason, in the 50s the company began to build a special production organization system (Toyota Production System, or TPS) based on the principles of Lean Manufacturing.
The ultimate objective of Lean manufacturing is to produce high-quality products that satisfy customers and meet demand, while using as few resources as possible. The growing popularity of Lean Manufacturing principles is based on the fact that the methodology focuses on:
- eliminating all that does not add value;
- improving every aspect of the workflow;
- performing production in small lots in order to exploit economies of scale and improve efficiency; and
- basing production on demand, not supply.
In spite of the fact that the Lean manufacturing concept was created for the industrial tasks of Toyota, it quickly became clear that the principles worked not only for the automotive industry. By choosing this method, a number of companies across industries, including IT, can become much more flexible and respond much faster to customer requests, especially in times of crisis.
Lean principles applied in software development: what does it look like?
The connection between the Lean approach and software development was originally highlighted in 2003 in the book “Lean Software Development: An Agile Toolkit.” It was the first book that analyzed how Lean ideas might be applied to developing software products.
Another book by the same authors showed that both the software development and manufacturing processes have much in common. They follow repeatable structures and workflows, rely on strict quality requirements, and are highly dependent on team collaboration.
The authors singled out seven Lean principles that easily adapt to needs of the software product development process:
- Eliminate waste: It is one of the key principles of Lean software development that is focused on eliminating everything that does not bring value to the end-user. In software development, waste can take the form of incomplete work, delays, unnecessary features, inefficient processes, and more.
- Create knowledge: By knowledge the authors mean a set of all the information describing a software product and its development: specifications, architecture, documentation, user expectations, and more. A great role here plays the constant involvement of the customer in the work, taking into account new, relevant user requirements. This helps to get a new experience based on understanding the needs of the customer and develop more efficient and in-demand products.
- Build quality in: The purpose of the Lean development methodology is to not only improve testing of the end product, but improve the quality of the code itself so that it has as few errors as possible. For this purpose, testing should be integrated directly into the development process.
- Fast delivery: For instance, products like pizza must be delivered to the user piping hot. If you deliver pizza to a client not in half an hour, but within a day, the pizza will be cold and the client might wish they’d ordered sushi instead. The same applies to software products. Fast delivery allows the product to be shown to customers as soon as possible, allowing the company to receive feedback and iterate. Fast delivery is possible within short iterations that produce software in small increments by focusing on the features of the highest priority.
- Defer commitment: This principle rejects the fact that a project should start with a predetermined specification plan. This approach encourages teams to make responsible decisions by continually obtaining knowledge, rather than making conclusions based on incomplete information.
- Respect for people: Instead of using a micromanagement approach, the Lean principle emphasizes the need to respect team members who have the necessary knowledge and skills and allow them to make on-the-spot decisions to improve performance.
- Optimize the whole: Optimizing the whole development process generates better results than optimizing local processes. Great software products are frequently the outcome of a one-of-a-kind mix of technology and opportunity made possible by a well-defined, clear, and optimized software development process.
Among the main advantages of Lean software development are:
- ability to develop more features in less time due to optimized processes and workflows;
- eliminating unnecessary activities and, as a result, reducing the cost of the project; and
- enabling the project team to make decisions that motivate them to achieve their goals.
In conclusion, we can say that Lean software development focuses on continual improvement in the following three business objectives: value, workflows, and people.
I know what you must be thinking. If the Lean development principles are focused so much on fast delivery, people, and providing constant value to the customer, how does it differ from the popular Agile methodology?
Lean and Agile: any differences to consider?
Indeed, the Lean and Agile methodologies are very similar. Both of them are dedicated to optimizing the process. In Lean, it is reflected by the principle ‘optimize the whole’, while in Agile this principle sounds more like ‘responding to change over following a plan’. Regardless of the terminology used, both methodologies recognize the importance of improving processes over time.
The same applies to continuous learning. Both in Agile and Lean the main idea is that while developers work on a project to best fulfill the demands of the customer, they should also spend time learning new skills and experimenting with new techniques.
Another thing that Lean and Agile have in common is their organizational methods. Whether calling it self-organization, like Agile, or respect for people, like Lean, both of them place the brunt of responsibility onto the workers, meaning no micro-management and unwanted hierarchies.
However, there are some differences between Lean and Agile that should be taken into account.
- Area of focus: The main difference lies in the core characteristics of these methodologies. Lean is focused on reducing waste while increasing customer value. Agile, on the other hand, doesn’t mention waste reduction in its core, but focuses on flexibility to fight uncertainty and enable continuous improvement.
- Approach to software creation: Agile projects are created in short and incremental cycles known as iterations. Each iteration includes planning, execution, testing, and assessment, and is a part of the working solution as result of each iteration. Lean tries to enhance efficiency by implementing small, ongoing modifications throughout the production process. Even though this can result in quicker development cycles, it is not the primary purpose of Lean.
- Measuring progress: Agile measures progress based on the parts of working software delivered after each iteration, while Lean methodology measures progress by having less waste and more customer value.
- Project timelines: While both Lean and Agile strive to get the product out as soon as possible, their time periods are not the same. Agile teams operate in short iterations, generally 2-4 weeks long. By improving the process flow, Lean teams shorten the duration of their project timeline. They usually limit their labor to procedures which reduces the entire project length. However, unlike Agile, there is no fixed timeline.
- Team structure: An Agile team consists of a small group of people who are all self-organized and cross-functional. Lean creates numerous Lean teams of personnel from various relevant departments with a Team Lead in charge.
After analyzing all the similarities and differences between Lean and Agile, we can see that Lean principles lie at the foundation of the Agile methodology. In short, it’s hard to be Agile without being Lean. If the company plans to embrace Agile, for example, it should first analyze the adoption of Lean principles, otherwise, it risks facing challenges with Agile implementation.
What best practices that align with Lean principles do we apply to our projects?
As mentioned before, most of the approaches and best practices we use throughout the software development cycle at MindK align with the Lean philosophy. Here are some of them:
#1: Cycles of iterations
Iterations are small, manageable parts of the project that involve a complete development cycle and result in delivering a part of the working solution. Traditional development approaches like Waterfall usually employs sequential development cycles, where the project is first planned, developed, and then tested. In such a case, all business value is delivered at the end of the project.
Lean software development uses considerably shorter iterations. By applying an iterative approach to software development, we at MindK are able to check the result at each stage of the development, deliver working solutions to the client and receive feedback.
Customer feedback is the most effective approach to discovering what is important. Each new piece of functionality introduces a new chance for feedback that clarifies the customer’s goal or real changes to the requirements. This helps minimize the risk of the entire project failing.
The client, in turn, receives a product that brings value and can enter the market early in order to make an income while continuously developing the product. As a result, the danger of wasting resources, time, and money is reduced.
An illustrative example of how the iterative principle helped us deliver a better product is a project dedicated to developing an enterprise recruiting system for a company in Europe. The project was a long-term one and lasted for around a year and a half. Since the project involved developing a complicated business platform, it required extensive documentation, high transparency across all project phases, and a well-defined plan of action. However, delivering the result at the end of the project was dangerous because everyone was concerned that the project would fail to satisfy the client’s expectations.
As a result, we divided the development into four sections known as releases or iterations. Each iteration took around three months. We showed the customer the intermediate result after each iteration, received feedback, and improved. Having such client feedback during the development process enabled us to create a high-quality product that fully pleased all stakeholders.
Lean principles implementation:
- Eliminate waste: Small integrations are much more efficient in terms of resources, time, and cost compared to long-term development presuming the result at the end of the project.
- Deliver fast: Working pieces of new functionality are delivered to the client at regular intervals.
- Build quality in: As short iterations focus on the most high-priority functionality required, the end-product receives as much critical functionality as required.
#2. Daily standup meetings
Daily standup meetings are designed to coordinate work and synchronize daily efforts. They happen once per day to gather statuses from each team member, evaluate progress, reveal bottlenecks, and decide what everybody should do today.
The daily standup lasts from five to fifteen minutes. It can even be held without seats to keep the team engaged and make the meeting look more like a water cooler chat. Everyone provides an update on their work and shares important information with the rest of the team.
At MindK, we simply use four questions for this type of meeting:
- What did you do yesterday?
- What are you planning to do today?
- Are there any blockers you need help with?
- Is there anything that has caused a change in your estimation?
These questions can smoke a number of issues out. Just make sure everybody feels free and safe to give each other unvarnished feedback. As a rule, we have a small team, so we use these questions for daily stand-up meetings.
If your team is too big for these questions, “walking the board” can be used as an alternative. In such a situation, the focus is off the people, but on the work. It involves reviewing the board of tasks and giving feedback on them if required.
There is a Japanese term “tsune” which is translated as “everyday routines” and refers to daily activities like taking a shower or similar, something that is so established in one’s daily routine that it cannot be missed or while missing, leaves a feeling that something is incomplete. At MindK, we managed to make the daily standup meetings a part of the team’s “tsune”. It helps us keep everyone in the loop and discover any unexpected issues.
Lean principles implementation:
- Respect people: Daily meetings make people a team that works on one common goal. When everyone is aware of what their colleagues are doing, they may seek or provide assistance as needed to move the project ahead.
- Defer commitment: Standups help the team to make responsible decisions by continually receiving more and more information about the progress from everyone involved.
- Create knowledge: By separating collective knowledge from individual knowledge, information exchange fosters organizational continuous learning.
#3: Test automation
Automating testing is one of the key concepts of Lean software development. There are a number of tests that can be automated, like unit tests, integration tests, and others—we’ve already revealed the key ones when we talked about the types of software testing.
Developing automated tests is a large piece of work that takes time and effort. In such a case, you may ask, “Does implementing automated testing make the development process more complex and longer?” Surprisingly, no. Even vice versa – automated testing helps faster delivery.
For example, a manual QA engineer can only test your system for eight hours, while a test automation specialist can write scripts during business hours and keep them running for the whole day. On average, automated tests allow running on average five times more tests and are therefore fivefold faster.
Moreover, when the project grows, automated testing helps test all the previous functionality and release it faster. Among the other benefits of the automated testing are:
- decreased costs in the long perspective;
- better test coverage;
- increased test accuracy and boosted morale;
- uncover hard to find bugs; and
- easy reporting.
To sum up, in the long run, automated testing leads to a better quality end product. At MindK we believe that “quality is not an accident, it is always the result of high intention, sincere effort, intelligent direction and skillful execution”.
If you look at projects we’ve delivered, you’ll see that we implement automated testing almost on every project we work on. We take the responsibility of software quality, all the products we build are guarded by our Quality Assurance Team at every step of the development flow to ensure that the product functionality meets client requirements and gives pleasure to end-users. Our specialists develop a test automation strategy and a set of test automation frameworks to make the most out of test automation.
Lean principles implementation:
- Build quality in: Automated tests are run on a regular basis, ensuring early bug detection and better product quality.
- Eliminate waste: Errors that are recognized early in the development process are easy and cheaper to fix.
#4: Continuous Integration and Delivery (CI/CD)
Continuous Integration is the process of integrating small code changes as often as needed into a shared repository. The system then automatically compiles the code and runs automated tests. That’s why automating testing is considered a foundational part of the CI/CD pipeline, and CI enables to reveal more bugs and fix them at a lower cost.
Continuous Delivery (CD) is the next step in the evolution of the CI concept. CD automatically compiles code, runs automated tests, and prepares a manual release. If done right, the developers always receive a deployment-ready build artifact that has passed standard testing. This enables more frequent releases.
CI and CD shine bright like diamonds in many MindK projects. One of the examples is our recent project – a self-assessment app for choosing an optimal career path called Xelfer. On this project we decided to design the project structure with separate environments for developers, QA, and production. After our DevOps team created a CI/CD pipeline, developers basically got a “button” they can press to deploy code after an automated build and test process. As a result, thanks to investing roughly 40 hours upfront on setting up the CI and CD for project purposes, our developers were able to spend the next 2 years adding new features without involving DevOps engineers in the process.
Xelfer, an interactive psych assessment tool, developed by MindK
Lean principles implementation:
- Deliver fast: Continuous integration and delivery significantly reduce the time it takes to release new functionality.
- Build quality in: CI/CD pipeline implementation guarantees that code remains functional and of high quality all the time.
- Eliminate waste: Ability to make frequent, small software releases without involving additional resources is much more efficient.
#5: Ongoing customer engagement in the development process
One of the primary reasons software projects fail is because the end product does not meet customer expectations and needs. In other words, stakeholders were not adequately involved with the development process in the belief that everyone would know what to do. This is where Lean makes things different.
When talking about traditional Waterfall projects, customer involvement is often limited to requirements gathering at the beginning of the project and acceptance testing at the end, Lean development process presumes client involvement throughout the project stages. At MindK, we try to involve clients as much as possible in the development workflow. We try to explain to customers that iterations involved in the process is the foundation for success. As a result, our clients are able to:
- provide the expertise required for the project. Except for stakeholders and decision-makers, no one has a comprehensive understanding of processes and industry backstage.
- reduce and uncover potential risks. Involvement during the requirements gathering and checking intermediate results is paramount. It allows for issues or concerns to be brought up at each stage of the process, thus uncovering risks before they arise.
- increase project success. Stakeholders should always be aware of the project scope, key milestones, and when they can review the intermediate product. It helps the team to be aware of delivery expectations, risks, and how to mitigate those risks. It eliminates any surprises at the end of the project.
In short, we made sure that in the Lean software development process, the level of client’s involvement in the process directly correlates with how the finished product will match their expectations.
An illustrative example of client engagement is a demo presented at the end of each iteration. We found that regular demos are a great tool to manage client expectations. By showing small parts of the product, we can collect the feedback and see whether the solution matches the clients’ requirements or if there’s something we should fix.
Lean principles implementation:
- Create knowledge: Client involvement helps the requirements gathering process, as requirements are revealed iteratively and improved over time.
- Build quality in: The end product better meets the clients expectations as the client constantly checks the intermediate result and prioritize features.
- Defer commitment: Involving clients throughout the process removes the need to make initial decisions with a lack of pertinent information.
Lean is the basic concept of a modern approach to software development
Lean approaches software development and engineering in general with a minimalist mindset, and focuses on people, learning, and constant improvement. Although Lean doesn’t have strict process rules, adapting its principles to software development may bring a number of benefits, including overall efficiency of the development process, delivering the product early, and better decision-making.
At MindK we delivered over 170 projects on time and within budget thanks to Lean methodology and Agile approach, which has come out of the Lean principles. If you want to implement Lean software development, we can provide you with outsourced Agile consulting services. It is especially relevant if you are just getting started. Lean transformation entails reevaluating your company’s culture and practices, so there is a sense in involving outside experts who can provide professional help with this transformation.
We can access your existing software development process, analyze your goals and needs, identify bottlenecks and offer changes to improve your development process, adopt new tools, and redefine roles in your team. Just fill the contact form and we’ll organize a free consultation with our experts.