11Sep
Agile-Lean Overview

Agile refers to a set of values and principles for software development, put into Agile Manifesto in 2001, under which requirements and solutions evolve through the collaborative effort of self-organizing cross-functional teams. The Manifesto was a reaction against heavyweight methodologies that were popular at that time, and It advocates adaptive planning, evolutionary development, early delivery and continuous improvement, while encouraging rapid and flexible response to change.

Lean Software Development (LSD) has made a translation of lean manufacturing principles into software development domain and it time has evolve as part of Agile Community. In a nutshell, Lean says to relentlessly eliminate anything that isn’t adding value and only work on what we absolutely need to be doing at this moment in time. Eliminating “waste” (this is how is called) is not that simple at it looks because “waste” can mean a lot of things in this context: partially done work, extra processes, extra features, task switching, waiting, defects, management activities. Eliminating waste means eliminating useless meetings, tasks and documentation. But it also means eliminating time spent building things in advance (might be the case that they will not be needed anymore), doing many things in parallel, etc.

Lean is based on two fundamental principles – first, one must take a systemic view to improvement and second, one must do this by looking at the flow of work through the system.  The first is a shift from managing people to improving the systems within which people work.  The second is a shift from focusing on productivity directly to removing delays in workflow to increase productivity.

Lean also puts a very strong emphasis on what it calls the system and looks at the way that the team operates as a whole. It is common among managers to try to optimize individual developers by by ensuring they are always at 100% allocated – but most of the time, this is actually counter-productive because they end-up developing things that will not be needed or things fully defined yet, just for the sake of coding, because that actually creates more work in the future.

Along those lines, Lean says to respect that the people doing the work are the ones that best know how to do it. Give them what they need to be effective and then trust them to do it. Software development is about learning, so structure the work to ensure continuous learning. And because of that, defer decisions until the last responsible moment (because more information will be available then). Finally, develop in a way that builds quality into our product, because there’s no way to continuously deliver fast if we have to keep going back to clean up our messes.

Lean’s mantra of delivering fast is often misunderstood to mean go fast.  It doesn’t mean that.  It means avoid delays and interruptions in order to get there (delivery) fast. You avoid delays and interruptions by attending to flow.

“Organizations that are truly lean have a strong competitive advantage because they respond very rapidly and in a highly disciplined manner to market demand, rather than try to predict the future.” – Mary Poppendieck