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
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.
Closing Comments
Do you also have such a list in your company? Would you care to share it?
Follow-Up
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.
Hi Morten,
One of the best programming books I have read in my life is “LISP: A Gentle Introduction to Symoblic Computation” – while 99.9999% of us do not use LISP and will never use it, that book will teach you solid basics of programming in the a very light way
Continuous Delivery is a must must read for anyone related to software development. Its a Jolt award winner and certainly something that makes software development/delivery a different ball game. Highly recommended!
Thank to everybody for your recommendations!
The title is misleading. A better title might have been “Books Every Agile Developer Should Read”. I find the Agile methods distasteful and lend themselves to wasted time having to redo a lot because time is spent in the short term and not looking to the overall design and architecture. Perhaps Agile fits nicely in certain projects, but I have yet to see one.
Thank you for the feedback. Yes, I agree that it can be a bit misleading out of context. This is our company blog, and as the first line of the post says, this is the list of books we recommend our developers to read. Being an “agile company” (if it is possible to say that), the books might fit best for the “agile developer”.
Hi Mark, sorry for misleading you. As a compensation, I’d point you and other no-agile-crap developers to http://waterfall2006.com/. I hope you’ll have as much fun reading it as I did.
(I don’t know any page about “how to fail with agile” though there is certainly enough material for it in the collective experience. People are great in failing with anything.)
Best Regards, Jakub
The Pragmatic Programmer. It’s the one book I ask *everyone* to read.
Yeah, that was one of the first books I read when I started working as a software developer, and it really had an impact on me. We’ll see if we can make room for it on our next revision of the list!
I’ve been recommending “Team Geek” to just about everyone lately. It’s an excellent text that can get technically-minded people to better understand the importance of soft skills, and how to develop those soft skills into something meaningful — i.e., technical leadership and high-performance engineering teams.
I haven’t read “Team Geek”, but the description of the book looks interesting. Will look into that, thanks!
Working effective with legacy code was of great help and inspiration , converting power builder – cough cough – code to j2ee web app. Thank you for the list, I appreciate the minimal style.