On my current project, I introduced some of the concepts of Lean into my team, which is very small but had absolutely no structure or process of any kind. The first thing we tackled was waste. This included removing code (including stored procedures) that didn't do anything, eliminating various people from the requirements gathering process (thus ending the "committee approach"), and improving communication by introducing some basic mechanisms such as defining limits to meetings and lengths of project-related emails. We are continuously trying to improve, and the next major hurdle for us to overcome is the delays in the development process. That means doing away with bureaucracy, mainly.
In addition to eliminating waste, we established a fairer decision-making process by letting developers interact with the customer directly, and giving the team lead (me) the power to solve problems without having to involve higher-level managers. This allows us to shorten the iterations between deliveries, which aligns quite well with "decide as late as possible."
The Wikipedia article on Lean software development is what introduced me to the concepts:
Lean Principles
- Eliminate waste
- Amplify learning
- Decide as late as possible
- Deliver as fast as possible
- Empower the team
- Build integrity in
Eliminate waste
The principle to eliminate waste (or muda, which is a specific kind of waste in Toyota's lexicon) has been borrowed from the ideas of Taiichi Ohno – the father of the Toyota Production System.
[...]
[A]pplied to lean thinking, everything not adding value to the Customer is considered to be waste. This includes:
- unnecessary code and functionality
- delay in the software development process
- unclear requirements
- bureaucracy
- slow internal communication