Yesterday at work my manager had a group of us get together to watch a presentation by Mary & Tom Peppendieck on Lean development. It was a really good discussion on identifying what makes company’s successful and sparked a lot of conversation afterwards. One the major takeaways from the video were the 7 principles of lean software development.
- Eliminate Waste
- Build Quality In
- Create Knowledge
- Defer Commitment
- Deliver Fast
- Respect People
- Optimize the Whole
Later this afternoon us dev’s will be getting together to discuss what these 7 values mean to us, and how to identify and measure them. In the meantime I thought I would share some of my thoughts on the principles just to get my brain warmed up.
1. Eliminate Waste.
For me there’s nothing more painful then working on something that does not need to be worked on, or building something that does not need to be built. This point drives out the idea of focusing directly on exactly what is necessary to accomplish the goal. Waste is produced when you create unfinished work. (I have a lot of that, you should check out my sandbox) Or building in features that aren’t needed, and carry with it potential for introducing “bugs”.
2. Build Quality In.
I think by developing with a test first mentality you implicitly build quality in because you’re only building the system that is required and you’re verifying that it’s doing what it’s supposed to do with unit tests. When the system needs to change, the unit tests help you to verify what parts of the system has been effected by your change. This reduces the “blind faith” attitude of building software in hoping that it works, and instead verifies that it does what it ought too. Verify it!
3. Create Knowledge.
To me this goes further then just reading books. True knowledge comes from experience, so to create an environment we need to practice and learn. Books are a great way to start, but following through with practical application of the reading is what makes the reading valuable. What use is it if it just sits in your head?
4. Defer Commitment.
When you practice Big Design Up Front, you very rarely have all the information you need to make decisions or even estimates. Like Mary says ##”The beginning is the time of maximum ignorance.” We often jump to making big decisions up front when really most of them can wait, until we have more information. Work towards short term goals, and piece by piece you’ll eventually complete long term goals. It may turn out your long term goal ends up being slightly different from the short term.
5. Deliver Fast.
This isn’t about hacking together code to meet deadlines. I interpret it more as setting shorter milestones and deploying more often. Do we need a web application, that does reporting, and registration all at once? Can it be broken down?
6. Respect People.
Ultimately people want to do more good then bad. So “enable” them to do so by treating them with respect. You’re not always going to see eye to eye, nor would you want to. But if you’re passionate about your stance, speak up and say why. To respect someone you must also be willing to listen,
7. Optimize the Whole.
Throughout your cycles whether daily or monthly be conscious of bottlenecks, and take the time to reflect. What’s slowing you down? What’s not working well? Why? Figure out what or where the weaknesses are, then figure out why and how it can be improved.