Editor’s note: this article is published in two pieces, since the concept of lean software development is too wide to be covered fairly in a single post.
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.
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.
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:
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:
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.
Efficient quality management is, too, a guiding principle in lean 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 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.
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 development, however, the importance of learning was never in doubt and lean 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.
That’s it for the first part of our series. If you’d like to learn more about lean software development check our second article on the topic, or reach out to our expert.