What is Lean Software Development?
What does lean mean and why would we use it in our software development process? Lean Startup is important to us here at CIL because it is a core belief in how businesses should be run and software should be built. Lean means we follow a build, measure, learn cycle to ensure that we are building software that people will actually want to use. A novel concept, for sure!
We talk through Lean Startup at length with clients and within our own team because it is a mentality that ensures we are building something valuable. We constantly validate a product by getting it into consumer’s hands [fast] for continual feedback and iteration. Therefore, we can make quick changes because we understand what consumers like and what they don’t.
Lean Startup and Lean Development is important for entrepreneurs because you learn to measure everything. Are you building or creating something of value? Whether software or a physical product, a lean mindset means wanting to consistently provide value for your team and for your customers. No one wants to build a product that no one wants or uses. So buckle up – we’ll get into the history of lean development, how to apply it, and why it has been so groundbreaking for startups and enterprises alike.
The History of Lean Software Development
Lean Software Development comes from Lean Startup comes from Lean Manufacturing. Toyota started Lean Manufacturing back in the way back when – by optimizing its production line to minimize waste. This was a radical way of thinking. It altered the way supply chains and production lines were (and are!) run. How can a company build quality products from the beginning? Identifying value versus waste and turning that into validated learnings is what the lean mentality celebrates.
How does that pertain to software? Software Developers that use lean reasoning think about building software in iterations. Typically, using Agile Methodology, developers begin by producing a Minimum Viable Product (MVP). Getting a product into consumers’ hands to validate whether the product is needed at all. Once there is a product, getting valuable feedback on the product to see if adjustments need to be made or the product should be scrapped altogether. We are constantly making assumptions, but we prove them with data along the way.
Lean Software Development Strengths and Weaknesses
- There is an overall efficiency of the development process because you are eliminating wasteful practices.
- Efficiency should save time and money – thereby reducing project cost.
- Empowerment and involvement of the development team – developers are able to determine the best way to create the functionality of the project.
- Delivering the product faster and allowing feedback from customers increases value for everyone.
- The project is dependent on the cohesiveness of the team.
- Project members need to be diligent and disciplined when moving through a project – otherwise, the project cannot move forward. Therefore you need an excellent team with awesome technical skills.
- Documentation is key. If a project is poorly documented – your product can be underdeveloped.
- Your clients need to be able to make decisions quickly (which is not always easy) so that the project can iterate and continue.
- Easy to lose sight of original objectives if you continue to change the scope of the project. There is a possibility the project never finishes.
Agile & Lean Software Development
Lean Software Development is a methodology that is used to implement agile. Lean and Agile are very similar. In both, the people working on the project are more important than the tools that are used to complete the process. Both empower people – allowing those that are working on the project to cooperate and make decisions.
The difference between Agile and Lean is that during a lean process – they manage the flow by limiting the amount of work that is in process. You are essentially eliminating any part of the process that is not delivering value. In Agile – tasks are broken down into sprints and managed by working in small batch sizes. Small batches may contain work that is deemed invaluable, however, is still done within the sprint. The goal is to deliver a working product.
Lean Software Development Principles
There are seven principles of Lean Software Development. We’ll break them all down below. For further reading, check out Tom and Mary Poppendieck’s Implementing Lean Software Development.
1. Eliminate Waste
Eliminating waste is the main principle of any lean operation. Waste takes away from being able to deliver something valuable to the customer. There are quality issues in all sorts of waste. You can create waste testing code, rebuilding code, or doing anything more than once. Lean calls for efficiency in the process.
2. Build Quality In
Each element built should meet quality standards throughout the development process. As stated before, we’re trying to eliminate waste, and quality issues can result in a lot of waste.
When you think about how you can build a quality product – step back and think about what makes it quality.
- Constant feedback between the product owner and the team so the development team can make iterations quickly. This ensures the team is building the RIGHT product.
- Minimize time to eliminate anything that might create waste. If there are bugs, fix them immediately instead of creating a backlog. This ensures that the quality of the product remains intact. We want continuity during the build so that we don’t lose time. This means no task switching, testing the code right away, and creating automations.
- Continually build and integrate. In Lean Development, we want to be building frequently and integrating the code. This ensures everything works and this part of the development phase is productive.
3. Create Knowledge
This seems like an easy one – but it is necessary to share knowledge. It helps us be more productive in the future. We need to properly document any valuable learnings. We can do this through: pair programming, code reviews, documentation, commented code, knowledge sharing sessions, or training.
4. Defer Commitment
Decide as late as possible. This doesn’t mean you should not commit to anything – it simply means that you want to decide once you have all the information you need. The more information you have when the time comes, the better equipped you will be to make the right choice. You’ll reduce the chance of repeating work later.
The sooner you make a decision, the greater chance that could be wrong. Does the decision need to be made right away? Can it be put off until later when we have more information?
5. Deliver Fast
We want to deliver software fast so that customers don’t have time to change their minds. This can save a significant amount of time which also saves a lot of money. Deliver the correct architecture to the client at the right time. Don’t overthink it and add new features to the project scope, it does not need to be over-engineered. Less time means fewer changes in the environment or market, less time to change minds or requirements, and less time to change people. Keep it simple.
6. Respect People
This should be a given – but what does it mean in practice? Listen attentively, hear your teammates’ opinions, encourage team members, and practice empathy. Disagreements can happen without getting argumentative or aggressive.
Develop people who can think for themselves and that have enough knowledge on the project to do so. People that work autonomously typically have been empowered to make decisions. This is the most important one as we mentioned above – both lean and agile value people first.
7. Optimize the Whole
There are a few things we don’t want to do in the development process. We don’t want to do something too fast at the cost of the code, making sloppy changes to get it out the door. We also don’t want to make changes without testing, offering a product that is suboptimal to the customer.
These things can result in a lower quality product. In a lean development process, the goal is to optimize the entire process not just individual functions. This means being able to structure a team around a project or product so all roles are available to deliver the request from the beginning. This can help you optimize workflow because everyone is in the same room (or Zoom meeting!). It also results in a better workflow because every team member knows what they are responsible for.
Therefore, optimizing every step of the process allows for greater teamwork (team spirit, whoo!), quicker collaboration, and a better quality product. Better optimization increases the opportunity that you are able to hit the other six principles listed above.
How to Choose a Lean Developer?
How can you choose a lean developer or lean development team? What questions should you ask?
The goal of hiring a software development company is to find the RIGHT team, for the right project, at the right time. When searching for a Lean Software Development company – you should be looking for a company that adheres to the seven principles above. Overall, they are interested in an efficient process where the RIGHT product is created. You’ll want to find a company interested in optimizing your time and money to create the best product for you, not the best product they can build. They should constantly be reviewing and eliminating anything from the process that does not deliver value.
Here are some questions you should ask right off the bat:
- Does the development team use an agile or waterfall methodology for building software? You should look for a team that uses agile, typically they’ll also work pretty lean. They’ll work within small timelines to get you a version quickly so they can garner feedback and make iterations.
- How do they structure their team? Are they structured in a way where you meet everyone working on the project? The team should be cohesive and have a very clear explanation of how they work together.
- How do they deliver software? You’ll want a company that delivers software in increments and by feature. This will give you a chance to review and also to share with your customers to see if you’re on the right track to build the right product.
- What do your developers value? Do they value your time? Do they value your budget? And most importantly – do they value building the RIGHT product?
- Do they get to the bottom of the features that are most important? Does the development team ask a lot of questions? Do they construct a journey map or a persona map to understand your customer? At the end of the day – do they understand what you want to build and will they build it in an efficient way?