Scrum Agile Project Management

Book Review: Essential Skills for the Agile Developer by Alan Shalloway

If Scrum provides the project management framework used in a majority of Agile projects, eXtreme Programming (XP) is the main source of technical practices for Agile software development. This book written by Alan Shalloway, Scott Bain, Ken Pugh and Amir Kolsky is focused on these technical aspects. The first part deal with the coding and testing activities, and the second part discusses how to handle the software design activity with an Agile perspective.

I have found particularly insightful the part that deal with software design. It presents guidelines to navigate between the dangers of either overdesign or not having enough design. This book is recommended to every software developers who want to write good code that is easy to test and easy to change, whether it is in an Agile context or not.


Reducing Complexity: Overbuilding systems is one of the greatest causes of waste in software development. A function that isn’t used doesn’t just waste the time it took to write it, it makes the system more complex. This makes adding other functionality or fixing existing errors much more time-consuming, not to mention that the system is likely to have more errors in it. By clarifying the scope of work in a clearer way, we can help avoid this.

Acceptance tests and requirements are linked. You can’t have one without the other. The tests clarify and amplify the requirements. A test that fails shows that the system does not properly implement a requirement. A test that passes is a specification of how the system works.

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.

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