You’d be forgiven if you thought this was a blog on weight! It not – its about Lean Software Development. Lean is apparently the new “black” in software dev teams. You’ve heard of agile, you’ve heard of scrum, and quite possibly you’ve heard of lean as I had. Given that I have time on my hands to research and learn new things I decided to investigate Lean.
Mary Poppendieck is the author of Lean Software Development: An Agile Toolkit (2003), and has been instrumental in making Lean a well known term in the software industry. The following information is all taken from her papers/articles on Lean.
- The Basic Principles of Lean Thinking
Add nothing but value.
Transfer responsibility to the people who add the value.
Let the customer pull value.
Optimize across organizations.
The following are guidelines to devising appropriate changes for your environment:
1) Eliminate Waste
This relates to the flow of value from request to delivery. How long and how many steps are there from when a customer requests something to it actually being delivered? How can you eliminate waste to speed up this process?
Some things that are mentioned:
- -task switching : everyone should do one thing at a time
- -waiting : for tasks, instructions, information
- -develop only what the customer wants right now
2) Amplify Learning
Learning is amplified through short feedback loops. So short (1 week to a month) iterations which result in deployable code.
3) Delay Commitment
Delay irreversible decisions until they can be made based on known events rather that assumptions or guesses.
Some things that are mentioned:
- -share partially complete design information
- -direct worker to worker collaboration
- -develop a sense of how to absorb change
- -commit to refactoring
- -use automated test suites
4) Deliver Fast
Once your customer knows what they want, your goal is to deliver that as fast as possible. Delays in staffing, requirements clarification, handoffs, testing, integration, deployment are all waste.
5) Empower the Team
To be empowered you need to have the training, expertise, information and leadership necessary to do the job at hand, make the right decisions and make rapid course corrections as you learn. The best way to ensure you’re doing the correct thing is to work directly with customers (to understand needs), collaborate with team (to figure out how to meet these needs) and frequently present results for feedback.
6) Build integrity in
There are 2 types of integrity – perceived and conceptual.
Perceived integrity is exactly what the customer wants even though they didn’t know how to ask for it. This can be achieved by having a continuous, detailed information flow from the users to the developers.
Conceptual integrity is when all parts of the system work together to achieve a smooth, well-functioning whole. This can be achieved by having a continuous, detailed information flow between all the technical people working on the system. Test early, exhaustively and often!
7) See the whole
Encourage collaboration by making people accountable for what they can influence not just what they can control. Measure the teams defect count not that of individuals. Teams working together and responsible for their own processes, can and will make dramatic improvements.
These are awesome principles and would bring value to any project. Its a bit of a mind shift to those managers who prefer micro managing, and like making all the decisions – but who said change was easy 🙂
Here is a talk by Mary on the History of Leadership – some very interesting stories here!