The core idea is to maximize customer value while minimizing waste. Simply, lean means creating more value for customers with fewer resources. A lean organization understands customer value and focuses its key processes to continuously increase it. The ultimate goal is to provide perfect value to the customer through a perfect value creation process that has zero waste. To accomplish this, lean thinking changes the focus of management from optimizing separate technologies, assets, and vertical departments to optimizing the flow of products and services through entire value streams that flow horizontally across technologies, assets, and departments to customers.
Eliminating waste along entire value streams, instead of at isolated points, creates processes that need less human effort, less space, less capital, and less time to make products and services at far less costs and with much fewer defects, compared with traditional business systems. Companies are able to respond to changing customer desires with high variety, high quality, low cost, and with very fast throughput times. Also, information management becomes much simpler and more accurate. Lean is a translation of lean manufacturing to the software development domain.
Adapted from Toyota Production System it focuses on 7 principles:
Eliminate waste – Anything which is not adding value to customer is waste like insufficiently tested module, unnecessary code & functionality
Amplify learning - The best approach for improving a software development environment is to amplify learning. The learning process is sped up by usage of short iteration cycles – each one coupled with refactoring and integration testing. Increasing feedback via short feedback sessions with customers helps when determining the current phase of development and adjusting efforts for future improvements.
Decide as late as possible - As software development is always associated with some uncertainty, better results should be achieved with an options-based approach, delaying decisions as much as possible until they can be made based on facts and not on uncertain assumptions and predictions
Deliver as fast as possible - it is not the biggest that survives, but the fastest. The sooner the end product is delivered without major defects, the sooner feedback can be received, and incorporated into the next iteration.
Empower the team - Artificially organized teams - when a team's structure is fixed by upper management with little knowledge of the requirements, customer or the personalities of the team itself - can create situations where personnel are under-utilized. In the worst case, projects fail simply because of poorly organized teams. In an agile development environment, the team is empowered to organize themselves in a way which allows them to be most effective and efficient.
Build integrity in - The customer needs to have an overall experience of the System – this is the so-called perceived integrity: how it is being advertised, delivered, deployed, accessed, how intuitive its use is, price and how well it solves problems. The information flow should be constant in both directions – from customer to developers and back, thus avoiding the large stressful amount of information after long development in isolation.
Defects in software tend to accumulate during the development process – by decomposing the big tasks into smaller tasks, and by standardizing different stages of development, the root causes of defects should be found and eliminated.
Systems Thinking = Critical Thinking = Strategic Thinking
Synthesis is the core component of Systems Thinking. Software development processes are, in fact, systems working within a larger system – the organization. Systems thinking is very practical and applicable, especially in the world of software development.
It helps us answer :
1. Where do we want to be?
2. How will we know when we get there?
3. Where are we now?
4. How do we get there?
5. What will/may change in your environment in the future?
In the simplest model, process control consists of a flow across three ‘elements’.
2. The System (‘the process’)
If 1 and 2 are both ‘in control’ and highly reliable, then 3 is likely to be reliable. Systems thinking focuses on cyclical rather than linear cause and effect, which is supported by agile methodology.
At the other ‘end’, if both 1 and 2 are ‘out of control’ or unreliable, then 3 is, by the definition of this model, unreliable. These are the conditions for an empirical approach. What does empirical approach mean?
1. We inspect 3 often i.e. output (with the ‘best possible’ eyes, expecting it often, even usually, not to be what we want.
2. When 3 is not what we want, if we can, we pull it back to the beginning, and run it through again. And try to ‘adapt’ either 1 or 2, to make them temporarily more reliable.
3. Transparency allows all facets of this process to be observed by anyone. This promotes an easy and transparent flow of information throughout
System Thinking can be implemented using either single loop or double loop although. Agile Project Management advocates Double Loop learning. In single-loop learning, individuals, groups, or organizations modify their actions according to the difference between expected and obtained outcomes. In double-loop learning, the entities (individuals, groups or organization) question the values, assumptions and policies that led to the actions in the first place. If they are able to view and modify those, then second-order or double-loop learning has taken place. Double loop learning is the learning about single-loop learning.
Traditional vs Agile Project Management
While traditional methodologies require the user to provide a detailed idea of the exact requirements with respect to the intended software, agile developers are more flexible through their iterative style of work. With agile development, the user is constantly in the loop, suggesting improvements and reviewing every phase.
This increased customer involvement works on two levels:
One is that it makes reflective changes easy, as opposed to traditional development where chunks of system might have to be dismantled to improve a small part, and the second being that it increases the customer satisfaction drastically.
To Sum up we now know the difference between traditional and agile project management:
In Traditional Project Management. Focus is on plans and artifacts while in Agile Project Management Focus Is on customer interaction and satisfaction.
In Traditional Project Management Response to change is either Corrective or Preventive while in Agile Project Management Change is controlled through adaptive actions.
In Traditional Project Management is typically up-from planning while in Agile Project Management is Progressive elaboration with Release and Iterative planning.
In Traditional Project Management has Top-down Control while in Agile Project Management has Self-organizing and cross-functional teams.
In Traditional Project Management is a Scope based delivery while in Agile Project Management has Time-boxed delivery.
In Traditional Project Management is Contract-Oriented while in Agile Project Management is Customer oriented.