Essential Skills for the Agile Developer

At a time where the Agile approach is often limited to the practice of Scrum, it is good to see a book dedicated to the programming side of Agile. The book wants to present the “trim tabs of software development”. Trim tabs are structures on airplanes and ships that reduce the amount of energy needed to control the flaps on an airplane or the rudder of a ship. The first part of the book is focused on coding and testing and the second part discusses how to handle the software design activity with an Agile perspective.

The book is definitely oriented towards practice with a multi-language approach in code examples. I have particularly appreciated the design part that provides guidelines to navigate between the dangers of either overdesign or not design enough. I recommend this book to every software developers who want to write good code that is easy to test and easy to change, whether they operate in an Agile context or not.

Reference: “Essential Skills for the Agile Developer – A Guide to Better Programming and Design”, Alan Shalloway, Scott Bain, Ken Pugh and Amir Kolsky, Addison-Wesley, 219 pages, IBSN 978-0-321-54373-8

Get more details on this book or buy it on
Get more details on this book or buy it on


Good practices should, ideally, be things you can do all the time and can promote across the team as something that should always be done. This is possible only if they are very low cost – essentially free – to do.

Testability and Code Quality. Why is this useful? We suggest it’s because testability is highly correlated to the code qualities we want to manifest, in particular, loose coupling, strong cohesion, and no redundancy. […]We’ve often summed it up by saying, “Gee, I wish they had thought of how this code was going to be tested while they were writing it!”

The Gang of Four recommends that you should “design to interfaces, not implementations.” Many patterns, such as the Adapter, Façade, Strategy, and Proxy deal with interfaces. Martin Fowler repeats this in his recommendation of separating the specification perspective (the interface) from the implementation perspective. Interfaces are the key to making decoupled designs that simplify testing and promote maintainability.

People often think of design patterns as a kind of design up front. One needs to remember that the design patterns came into vogue when that was mostly how you did things. However, if you explore the thought process under the patterns, you can apply that thought process to agile development just as well as you can when you are doing a big design up front—perhaps better, because the lessons of patterns tell us what to be looking at, not so much what to do.

Related Books: