Lean software development
Lean software development emerged from lean thinking. Its goal is to deliver maximum value to customers with optimal efficiency.
The lean approach emphasizes speed and low cost. This can be achieved with an effective team because an effective team can create an efficient process. With constant process improvement and quality products, you can achieve high development speeds while keeping costs low.
This also requires management to both respect and empower the people involved. Management should not be obsessing over the product at every stage or micromanaging employees. Rather, they should devote their efforts to supporting the development team as much as possible.
Developers may be focused on creating customer service software, for example, while managers should be focused on employee service.
To understand lean software development fully, you must understand the concepts and values of the lean approach. This article will cover key lean concepts to maximize the output value of your software development project.
Eliminating Waste
The first principle of a lean approach to software development is eliminating waste. Waste can be defined as any work that does not add value.
There are 7 categories of waste: Partially-done work, Extra Processes, Extra Features, Task Switching, Waiting, Motion, and Defects. To maximize the output value of your software project, you must eliminate as much of this waste as possible.
- Partially-done work
The first category is partially-done work. This means that work is started but not taken to its intended conclusion. We often start things and don’t see them through to completion. For example, the requirement specifications may be written, but development has not started for some reason. Or the code for some interactive content may be written, but none of it has been tested yet. Tasks that have been started but not completed contribute to wasted productivity.
- Extra Processes
The second category is extra processes. Extra processes are extra work that does not add any output value. This could be unused documentation, for example. We produce so much documentation which is often never used or referred to. These surplus documents equal wasted time, resources, and storage.
Similarly, unnecessary approvals are an extra process that contribute to waste. Much time is lost waiting for approvals that do not add any value for the customer.
- Extra Features
The third category of waste is extra features. These are features that aren’t required or are thought of merely as “nice-to-have”. As developers, we can often get excited to add all the bells and whistles to our software. However, from the end user’s perspective, these features may not be required or are of minimal use.
If you are creating file share software, an example of an unnecessary feature could be multimedia playback. It’s nice to have but is not requested or expected.
- Task Switching
The fourth category of waste is task switching. With employees working on multiple projects simultaneously, switching from one to the other will inevitably waste time in between.
Due to budget constraints, some small companies and startups require developers to perform marketing and sales tasks. Having to juggle things like writing code with optimizing ecommerce conversion funnels can significantly diminish a worker’s productivity.
So, if team members are being moved around or hopping between tasks, you will encounter these context-switching penalties to your output.
- Waiting
The next category of waste is time lost due to waiting. This is often due to waiting for reviews and approvals. These could be prototype reviews or document approvals, for example.
- Motion
The sixth type of waste is motion. You will suffer this kind of waste especially if you work in different offices where there are distributed teams or multiple handoffs. Much effort is expended on communication or on transferring information and deliverables from one group to another. This could be remedied with a teleconferencing and file share solution such as one of the Flock alternatives. This will reduce the time spent on communicating and administrative tasks.
- Defects
The final category of waste is defects. This could be defective code, documents, or software that needs correction. Examples could be requirement defects or software bugs.
Empower the Team
Empowering your team is the second lean concept. That means instead of micromanaging teams, you should empower them to make their own local decisions. Allow access to and encourage their use of your project management software. This will engage them and make them feel like a valued part of the journey and organization.
The work environment you create should be one where team members can make mistakes and, more importantly, learn from these mistakes. Thereby, they will become more skilled and will feel more valued.
Through building up your team’s confidence to take responsibility for local decisions, you allow them to contribute directly to the project every day. This will maximize output as productivity greatly increases.
Deliver Fast
The next lean concept is to deliver fast. A lean approach dictates that instead of waiting for big releases after long periods, you deliver smaller releases incrementally.
Perhaps you are building an enterprise ecommerce platform, for example. Focus initially on releasing a minimum viable product. After that, you should target time-based releases to deliver the required project to stakeholders in an incremental way. This means that stakeholders are also connected to the output that your team generates.
Breaking up the project in this way will help your team prioritize the next most important milestones and prevent them from getting bogged down in unnecessary work. This is how delivering fast can help maximize output value.
Build-in Quality
Building quality into your project from the beginning is the next lean concept you should adopt to maximize output value. From analysis, design, finding solutions, deploying, and supporting the end-user, it is important to keep the project’s value to the user in mind and build-in quality every step of the way. There are a couple of ways to do this.
Pair programming is one way to ensure quality is built-in. As the name suggests, pair programming aims to avoid quality issues by using two developers to complete a task. This allows them to combine their respective knowledge and experiences. The pair can bounce ideas off each other and catch each other’s mistakes.
Test-driven development is another way to ensure quality. This involves carrying out tests before writing the code. If your developer knows that the software will be subject to property-based testing, for example, it’s more likely that the code they write will pass the tests. This ensures that quality is built in from the beginning and less time is wasted on reworks.
Optimize the Whole
The next part of a lean approach to your software development is to optimize the whole. Optimizing the whole means taking a holistic view of the project. The concept encourages cross-collaboration across teams.
What is team collaboration? Effective strategies for your team can vary. However, a key strategy is for your teams not to focus on one project module alone. They have to focus on all modules that connect to your ultimate project solution. It is also not sufficient to focus on the project solution alone. The project solution must also be connected to the organizational strategy.
Defer Decisions
Deferring decisions is the next part of a lean approach to software development. That means that if there is an opportunity to defer a decision to a later time, without any negative ramifications, then you should defer it. You should maximize any cushion you have for delaying decisions.
If you defer decisions until the end of your set timeline, you can make more informed, engaged, and relevant choices. So wherever possible and where time permits, leverage the opportunity to delay decisions to make better choices and maximize your output value.
Amplify Learning
This lean concept is about fostering an environment where feedback and continuous learning are prioritized. After each iterative development, you need to take feedback from your workforce.
You need to listen and reflect on the feedback to take corrective decisions and learn from it. This information is very relevant, as it comes from practical experience from your own workforce and your own project context.
So, you must make sure that this learning happens and work to amplify it wherever possible, iteration after iteration. This enables you to reflect on people, processes, work, and overall goals. You will find that incorporating developers’ feedback into your software will boost your success metrics, such as customer conversion rates.
It’s important to schedule time for regular feedback sessions. This allows your team to consolidate and prepare useful information. Demanding feedback from your team at random intervals can be seen as similar to cold calling; it catches them unprepared and less willing to engage with you fully.