Day 42-44: Advocating Lean Development
So I’ve spent the last three days reading the Lean Software Development: An Agile Toolkit book, and as I am now done with it, that desperately calls for a blog post to summarize my impressions.
All in all, I liked the idea. It made sense. Lean is not something that replaces Agile, but rather enhances it. I’d say it felt like both a philosophy (as in: a way of thinking) and a methodology, given that it doesn’t just give you values and principles to uphold, but also practices to bring all those ideas to reality.
Lean originated in automotive industry and was initially used to improve the manufacturing process of Toyota cars. It was the authors of this book, Mary and Tom Poppendieck, who took those lean manufactoring principles and adapted them to software development. In the book, they went to great lengths to explain them in as much detail as possible. Here are those principles, together with my understanding of what they mean:
- Eliminate waste. Lean is all about waste, or rather: lack of it. Everything that doesn’t add value to the customer is waste. Partially done, wrong or unneeded features are waste. Complex and low quality solutions are waste. Multitasking is waste. Unnecessary documentation is waste (which is not an excuse to eliminate it completely!). It is important to recognize the source of waste in order to eliminate it.
- Amplify learning. Don’t expect the software development process to be predictable and always the same. It is a constant learning process, and one that requires frequent feedback so that we can adjust accordingly. Make the iterations short in order to get this feedback at a required rate.
- Decide as late as possible. This reminded me of that famous meme: “I always do my assignments at the latest possible moment, as I will be older, and therefore wiser.” That kind of explains the idea. It’s about making the decisions based on facts, and not assumptions, and these facts often emerge later in the process. By any means, it’s not an excuse to procrastinate!
- Deliver as fast as possible. Never produce anything until you actually need it, but once you do - do it fast. In today’s market, only the fastest survive. Fast delivery enables quick feedback, and also the opportunity to delay decisions (see how everything is connected?). This does not mean that we should rush and produce something of low quality just for the sake of it; rather, we should find a way to make the whole process more efficient. How? Make the whole system transparent and let the team organize itself (hello, Kanban!).
- Empower the team. Managers should lead the team, not order them around and tell them how to do their job. Odds are, they know how to do it already (that’s why they were hired, after all). Instead, managers should be there to listen, support, protect, encourage, eliminate waste and any negativity lurking around.
- Build integrity in. There are two types of integrity: perceived (the customer’s overall experience of the system) and conceptual (the ability of different components to work well together and provide a high-quality system). Integrity should be verified through testing and maintained through refactoring.
- See the whole. Don’t look at a system as merely a sum of its parts. The interactions between those parts are just as important; don’t miss the whole wood by looking at a single tree. The same goes for the Lean principles: implementing just one or two is not enough. You cannot be partially lean. You are or you are not. “Do or do not. There is no try,” as Yoda would say.
Final conclusion: Lean is cool. Be lean.
As it is Friday, and on Fridays I usually do my famous “reflections”, there is no reason to make this one any different. It is also quite fitting that today we had this group activity of solving the Myers–Briggs Type Indicator personality test. The results scared me, to be honest, but only because of their incredible accuracy; as I sat there reading through them, I kept thinking how this thing knows me better than most of the people that are actually close to me. I am used to people putting me in the introvert box and not giving it a second thought. Yes, I may be 79% there, but that box is filled with so much other stuff, that I’m sometimes scared of drowning.
So I’m the Advocate (or INFJ). I have difficulties connecting to people at first and I hesitate to open up. But once I do, I love deeply and truly. I enjoy helping people, and consider empathy one of my strongest points. I look for depth even in the shallowest places. I’m a perfectionist, an idealist and a dreamer, but that never stops me from doing something concrete to reach my goals. If I believe in something, I will defend it with everything I’ve got. My emotions are usually the ones leading the way, no matter how much my mind tries to fight for dominance. As nice as all this sounds at first glance, it still has its downsides. Feeling everything so strongly is a tiring affair, to tell you the truth.
They say I’m in less than 1% of the population (the rarest personality type), and having read that, everything kind of made sense. And honestly, I finally felt at peace. That 1% sounds nice enough; it didn’t make me feel weird at all.
It made me feel special :)