Republished from blog.iterate.no with the permission of my co-author, Morten Berg, and later updated.
There are a few books that every developer in Iterate should read because they express what we believe in and are extremely valuable in themselves. The books chosen are generally and broadly useful and not tied to some too limited domain (contrary to e.g. Effective Java). The list is kept as short as possible, about 4-5 books, and is revised regularly.
Why particularly these books, why lean and agile? Our people are primarily responsible for crafting solutions for our clients, for making sure that they use the customers’ limited resources efficiently to produce the maximal business value possible. However, according to our experience, it is never truly known upfront where that value lies. Software development is therefore inherently a learning and exploration process. A process that needs to be continually adjusted based on empirical feedback from the reality and on shifting conditions. This is what lean is about: eliminating waste, maximizing value by maximizing learning, making sure that the right product is built. We value software craftmanship and building things right – but building the right things is crucial.
Here are the books and why we believe they are so important.
1. Implementing Lean Software Development: From Concept to Cash
Mary and Tom Poppendieck, 2006 (amazon)
Thin yet extremely rich book that is a perfect introduction into the lean thinking and its many sides. It’s unbelievable how much valuable insights can fit into this book. It not only conveys why the lean approach is the only feasible one, but also how to implement it in practice.
Keywords: Eliminating waste, last responsible moment, sustainable cadence, build quality in
Tips: It’s highly recommended to read The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win befor/after Poppendiecks; it’s a brief, exciting novel following the story of a company in crisis and its new Ops boss that brings it from chaos to incredible effectivity through the application of lean principles. You won’t be able to put it down.
2. Running Lean: Iterate from Plan A to a Plan That Works
Ash Maurya, 2012 (amazon)
Iterate believes that the Lean Startup methodology is the right way to foster innovation both in new and existing companies. And innovation is that what drives us forward and helps us survive in the ever more competitive market. Provided that you already have an idea of what lean startup is, then this book is the right one for you. Contrary to Eric Ries’ “The Lean Startup”, this book is very practical and introduces many ways how to do hypothesis testing in practice etc.
Keywords: User centric, measuring, interviewing, eliminate waste by not creating what’s not worth creating, unknown solution
3. Clean Code: A Handbook of Agile Software Craftsmanship
Robert C. Martin (Uncle Bob), 2008 (amazon)
The very essential book for every self-respecting software professional providing insights into what is good code and how to write it. It will change the way you code for the better. Everybody has heard that methods and classes should be small, do one thing, have self-explanatory names, be implemented in test-first fashion etc. This book explains all of it and explains why.
Keywords: Single responsibility principle, TDD, YAGNI, DRY
4. Working Effectively with Legacy Code
Michael Feathers, 2004 (amazon)
The bible of anybody working with legacy code (i.e. most code). Even some green field projects happen to create legacy code from the start and thus can benefit from it. But even non-legacy development would benefit from the refactoring and (emergent) design insights. The key topics of this book are refactoring and testing. Getting to know a complex code base, making it better, changing it safely. Though little older, it is still equally valuable. It introduces many methods, techniques, and approaches that every developer should have in his/her arsenal. Taster of the chapters: I Don’t Understand the Code well Enough to Change It, My Application Has No Structure, This Class Is Too Big and I Don’t Want It to Get Any Bigger.
It perhaps isn’t necessary to read it cover-to-cover but it’s important to be familiar with what is there so that when you are in a situation where you’d benefit from its wisdom, you know it is there and where to find it.
Keywords: Technical debt, refactoring, testing, mocks/fakes, breaking dependencies, scratch refactoring, effect analysis, emergent design.
5. Agile in a Nutshell (original title Agile Product Ownership in a Nutshell)
Henrik Kniberg, 2012
Wow, that was 15 minutes well spent. It’s like compressing all important knowledge into one sketch. – Pål
This 15 min video is the best explanation of the key aspects of the agile development process ever, and with a wonderful animation. It touches most of the main points in agile; not just the practices but the reasons why they are there. It visualizes the big picture, placing the individual aspects into the context. It is Scrum and Product Owner-centric but still very valuable in a broader context. We recommend to watch it after becoming familiar with lean/agile (f.ex. by reading From Concept to Cash) as it is a great summary and a self-test of understanding agile.
It discusses among other things building the right thing vs. building it right vs. building it fast, technical debt, focus on value instead of features, saying no to requests, the estimation conversation.
Do you also have such a list in your company? Would you care to share it?
Some of the other books that the readers highly valued were Code Complete: A Practical Handbook of Software Construction and The Pragmatic Programmer: From Journeyman to Master. We will evaluate whether to add any of them or replace a book from the list.