In the world of software “revolutions” emerge nearly every month. Each shift in IT, it seems, whether in ways of development or management of software projects, gets labeled a “breakthrough”, which turns the term into a buzzword, stripped of any meaning. However, every once in awhile, important innovations do appear on the web, and it’s hard for them to cut through all the noise to grab your attention.
Therefore, today, we’ll introduce one of them: lean software development – a ground-breaking methodology that has completely reshaped the whole value stream in IT and yet, unfortunately, remained obscure to a lot of entrepreneurs.
What is Lean Software Development?
The concept of lean, in general, was pioneered by Toyota, the Japanese automotive giant, as a mean to reduce waste in manufacturing; but soon grew explosively popular and was adapted, among others, to various competencies in IT business.
“Lean development means removing all things unnecessary”
As the title suggests, it aims at removing all things unnecessary, all the fat, from software engineering. Its principles resonate largely with those of Agile development; some even consider the two methodologies to be inseparable. Others, on the other hand, admitting to the shared philosophy, still state that lean is more convergeable in terms of development strategy.
Overall, there are 7 principles to Lean software development, each aiming to quicken delivery and bring higher value to end-user:
- Eliminating Waste
- Building Quality In
- Amplifying Knowledge
- Delaying Commitment
- Delivering Fast
- Respecting people
- Optimizing the whole thing
To fulfill them, Lean makes use of such tools:
Inventory management. A practice of reducing the number of operations in progress at once through application of a theory of constraints and queuing theory.
Kanban – a pull project management system, which by means of limiting tasks that are being completed simultaneously, prevents overloading of the development process.
Value stream mapping – a method of visualization of the development cycle as a whole, from a request of a client to a deployment stage, that demonstrates and helps optimize the time spent on waiting and on actual processing.
Now, let’s look closer into each of the seven commandments of lean software development:
1. Eliminating Waste
Waste reduction, being the first rule in Lean engineering, defines its entire purpose. For the most part, the methodology tries to fight these 9 types of waste.
- Unnecessary features and code
- More tasks in log than can be completed
- Delays in the engineering process
- Vague requirements
- Inefficient communication
- Issues with quality
- Unneeded and crippling bureaucracy
- Data duplications
- Costs of aforementioned
To identify and eliminate waste, regular meetings are held by Project Managers after each short iteration. They allow team members to report progress, point out bottlenecks and suggest which changes to implement during next iterations, which facilitates learning and allows improvements to the code to be implemented in small, manageable increments.
2. Building Quality In
Efficient quality management is, too, a guiding principle in lean development methodology, as issues in this area lead to different types of waste. Repetitive testing of the code, mistakes in logging and their resolvement take time and therefore drive costs of development higher; lean strives to address such nuances before they even happen.
Various tactics are used in lean, and all related agile development types, to ensure that quality is maintained all along the process. Engineering is kept flexible. Every small iteration, each loop is followed by an immediate assessment. The time between software development stages is always reduced as much as possible and trade-offs (occasional sacrifices of qualify for other project dimensions – time, costs and scope) are regularly discussed and considered.
Additionally, to fix bugs before the fact either Pair Programming or Test-Driven Development can be applied.
Pair Programming is the application of “two heads better than one” principle to software engineering. Each task is being completed by two developers, combined experience of which allows to figure out more effective solutions, foresee possible issues better and deliver higher quality than one of them would, singly.
Test-driven programming turns conventional “build, then scrutinize” approach upside down. Tests are written before the code is, so that an engineer, knowing precisely how features’ conditions are going to be checked, works out all probable scenarios whilst developing.
3. Amplifying knowledge
Lean software development originated from lean manufacturing, where the ultimate goal had always been a simplified, standardized, pipeline production which requires no knowledge and rare modifications. Therefore, when lean’s concept “amplify learning” was introduced to physical business, it was a game changer.
In software engineering, however, the importance of learning was never in doubt and lean development methodology, perhaps, only proven it once more. Each time the code is written, engineers reflect on it immediately and then incorporate, during following iterations, the lessons they have learned. That’s true of lean and all agile methodologies. To ensure that particular knowledge isn’t accumulated exclusively by one engineer, who’s writing a particular piece of code, lean methodology often uses paired programming.
Besides that, learning is amplified through ample code reviewing, meetings and establishment of metrics from data that are cross-team applicable. You, as a client, get to voice your feedback to the development team upon each iteration; collecting it and adjusting future efforts to your requirements is paramount to all lean developers.
4. Delaying commitment
It happens or rather used to happen often in traditional project management, that your application, though meeting the spec precisely, turned out completely unfit for the market by the date of release. Too many changes had emerged since your requests – in the business environment, in technologies your competitors use and in market’s course overall; changes that had not been addressed over the course of development.
Lean software development methodology recognizes this threat. It always leaves room for improvement by postponing irreversible decisions until all the needed experimentation is done and as much info as possible is gathered; until you’ve checked and examined your requirements comprehensively and there are no doubts as to their relevance.
The methodology strives always to construct software to be flexible, so that when new knowledge is made available, engineers can act upon it without wrecking completely what’s been done earlier. As all new projects, nowadays, are bound to face uncertainty, so the importance of this is hard to overestimate.
5. Delivering fast
Historically, meticulous and long-term planning used to be the key to success in business. Only when each aspect of your strategy had been worked out thoroughly, agreed upon, strict milestones and pace of development had been established, you were considered ready to enter the software market.
As practice showed, however, such approach often led to a catastrophe. It made engineers spend too much time on building complex, monolithic systems packed with unneeded features. It restrained them from adapting the software to the ever-changing environment and client requirements.
As a result, lean engineers came up with the concept of MVP (minimum viable product) and overall opposite philosophy: build quickly, include little functionality and launch a product to the market as fast as possible. Then, study the reaction.
Such approach allows to enhance a piece of software incrementally, based on the feedback collected from real customers, and ditch everything that is of no value.
6. Respecting the team
Lean software development is a system aimed at empowering team members, rather than controlling them. It goes beyond establishing basic human courtesy; it instills trust within each project. Engineers are granted freedom to make important development decisions, based on knowledge they receive whilst writing code and their own judgment. Providing, of course, that they’re experienced enough to do so.
Such approach contributes a lot to a faster application of changes to software that are needed to reflect the changes in the environment, and it keeps your developers motivated.
And what’s more important than team’s motivation?
Setting up a collaborative atmosphere, however, and keeping the perfect balance of control within the project is hard. Developers should be let to do their thing, implement changes that they feel are necessary, but they’re also ought to report on their decisions; to explain the approach, they intend to take to managers and, more importantly, to you – the client. In the end, it’s you who are in charge of the overall course.
7. Optimizing the entire value stream
According to Mary and Tom Poppedniecks, sub-optimizing is one of those unfortunate tendencies that, though being unproductive, still occurs often in traditional IT departments. Managers choose to break each issue into multiple constituent parts, which they then have their teams fix separately, without optimizing entire systems. Lean software development opposes that and stands for focusing on value stream as a whole.
At Perfectial, for instance, we find people that are best suitable for each specific project and organize them into complete, standalone teams. That way, there aren’t delays, disruptions, and miscommunications that would happen, surely, if project members were scattered across various departments.
Lean principles allow to optimise team’s workflow, create unity among everyone involved in the project, inspire a sense of shared responsibility and shared objectives, which translates into higher performance.
Although lean agile methodology introduces a customer oriented, flexible system to software development, it’s people who actually make it work. Therefore, look for expertise when hiring a team to build your application; professionals, who are committed to a continuous improvement, and qualified enough to embody the core values of Lean methodology – delivering as much value, in the shortest amount of time and in a most efficient way possible.
Want to learn more about lean software development and how your company can benefit from it?