Lean and agile – two methods to improve software development
In one of the previous articles posted on our blog we attempted to demonstrate that the traditional methods of software creation, based on plans, have turned out insufficient within the context of the current market environment.
The search for the optimal solutions for accomplishing IT projects has continued since the 1990, however, its origins can be traced back to a much earlier period. The result of these pursuits was an assortment of numerous theories, with two being the most popular: lean software development and agile software development.
In the following article I shall attempt to present the primary features of each of them, as well as their similarities and dissimilarities.
Lean management, i.e. from car production to software development
The history of lean software development can be traced back to the first decades just after World War 2, when the Japanese engineers at the Toyota factory would begin the development of a production system allowing to eliminate mismanagement, losses, and to increase flexibility.
The result of their efforts was the Toyota Production System, which served as the basis for the following theory of lean management. In the West, the theory was not well known until the 1990s.
Following the year 1990 the situation had changed drastically with the publishing of the book titled The Machine that Changed the World [1], which (in the result of conducted research) demonstrated that Japanese enterprise that would manage production according to the principles of lean manufacturing would achieve much better efficiency and use much less resources than their Western competition.
From this moment on, the theories and principles would be adopted willingly by companies outside of the production enterprise. Very soon, these principles were adopted for the use in software development.
Lean software management
Despite the fact, that the attempts to describe the lean software development method would appear earlier, the most successful publication about the matter, was the theory described by Mary and Tom Poppendieck in their book from 2003 titled Lean Software Development: An Agile Toolkit[2]. Currently, the book is considered to be the Bible lean software development.
7 principles describing how to develop software, constitute the foundations of the theory:
1. Eliminate waste
Every action of the software developer, that does not result in producing value from the customer perspective (redundant software functions or overly extensive tests) is considered a waste. In consequence, in order to be able to eliminate waste, one must primarily recognise the needs of customers.
2. Amplify learning
Individuals who develop software are constantly learning, while working on the code. Learning will be even more effective if incremental software development cycles, tests and customer feedback are applied, allowing to avoid the accumulation of irregularities.
3. Decide as late as possible
The principle is based on assuming that in time, many more facts are revealed, serving as essential premises for decision making. In consequence, transferring decision to the latest phase possible decreases the risk related to uncertainty.
4. Deliver as fast as possible
Due to the swift delivery of the early first version of the software, one may receive customer feedback already at the early stage of project realisation, and use it in the subsequent iterations of software development.
5. Empower the team
Late decision making and swift delivery of software require allowing your team members to have significant decision making freedom. Employee control should be replaced with frequent team meetings that will allow to identify potential errors.
6. Build integrity in
It is imperative to maintain the integrity of software and the customer’s needs, as well as, internal integrity and an attitude open towards modifications.
7. See the whole
The principle is based on the belief that software is more than just a sum of its parts. Therefore, its evaluation or optimisation should relate to the whole and not to its individual constitutive.
Agile software development
Another theory resulting from the pursuit of an alternative to the traditional methods of software development is agile software development. Its principles had been included in the Agile Manifesto[3] published in 2003.
Agile is based on twelve software development principles:
1. Customer satisfaction
achieved through early and continuous delivery of valuable software.
2. Being prepared for changing requirements
even brief incremental periods allow for flexible adjustments in accordance with the changing customer requirements.
3. Frequent delivery cycles
functional software should be delivered to the customer as often as possible.
4. A close cooperation of business and developer teams.
5. The culture of trust, support and motivation.
6. Direct communication
a face-to-face conversation is the most effective way of conveying information within a development team.
7. Working software is the primary measure of progress.
8. Sustainable development
the sponsors, developers, and users should be able to maintain a constant pace.
9. Technical excellence and good design.
9. Simplicity
the art of minimizing the amount of work necessary to accomplish a project.
10. Self-organizing teams
they constitute the source of the best architectures, requirements and projects.
11. Regular analysis of the increase of efficiency and implementation of conclusions.
How much lean in agile, how much agile in lean
The theories of lean software development and agile software development were developed independently. The former is the transfer of the principles of lean manufacturing from factories to software development.
The latter is a collection of principles created by the developers themselves, as they had identified the flaws of the traditional methods of software development. Despite the differences, one may identify a significant amount of similarities for the lean and agile theories. Both theories highlight the meaning of identifying and precise adjusting to customer requirements, as well as, of delivering software as fast as possible in short incremental cycles.
Additionally, both theories highlight the meaning of independent, competent and constantly learning developer teams. Therefore, while searching for the answer to „how to improve software development”, the creators of lean and agile came up with similar conclusions. It is now up to the software developers to implement these conclusions in practice.
Author: Michał Karmelita – Junior Java Developer
- [1] Womack J.P., Jones D.T, Ross D., Machine that changed the world, Simon and Schuster, 1990.
- [2] Poppendieck M., Poppendieck T., Lean Software Development: An Agile Toolkit, Boston: Addison Wesley, 2003.
- [3] http://agilemanifesto.org/iso/en/manifesto.html.
Related posts:
- How scrum may help you manage your IT project?
- Outsourcing, Nearshoring and Offshoring. What’s the difference?
- How to prepare internal workflows to meet the challenges associated with software development?