Disciplined Agile

Essential Skills for the Agile Developer: A Guide to Better Programming and Design

CoverEssential Skills for the Agile Developer: A Guide to Better Programming and Design by Alan Shalloway, Scott L. Bain, Ken Pugh, and Amir Kolsky.

This book provides over a dozen proven practices that help developers improve their coding practices and make their code more easily changeable and maintainable in Agile projects. Sample chapters are available.

It answers the question many developers have after taking some initial Agile/Scrum training, “OK, how do I write code now that we are building our software in iterations?” This book provides over a dozen proven practices that help developers improve their coding practices and make their code more easily changeable and maintainable in Agile projects. Please read the preface to better understand how to read this book.

Reviews

Here’s what Dean Leffingwell, creator of Scaled Agile Framework and author of Agile Software Requirements had to say about Essential Skills:

This book clearly meets the promise of the title, as it truly does describe the “essential skills that every agile developer should possess”. With all the focus on agile software project management techniques like Scrum and Kanban these days, it’s refreshing to see that the folks at Net Objectives understand that no matter how we manage, or how we scale, it’s all for nought unless the developers and testers create better quality code at the origin. That’s what this book is about. It’s a short, understandable and essential read for every practitioner interested in improving the quality, agility, and maintainability of the code that ultimately, we all depend on.


You can post comments about these chapters at the Net Objectives Support Group (LinkedIn).

Sample chapters

Errata by chapter

  • Preface
  • The Core Trim Tabs
    1 Programming by Intention
    2 Separate Use From Construction
    3 Define Tests Up-Front
    4 Shalloway’s Law
    5 Encapsulate That!
    6 Interface-Oriented Design
    7 Acceptance Test-Driven Development
  • General Attitudes
    8 Avoid Over and Under Design
    9 Continuous Integration
  • Design Issues
    10 Commonality Variability Analysis
    11 Refactor To The Open Closed
    12 Needs Vs Capabilities in Interfaces
    13 When and How to Use Inheritance
  • Appendix. Basics
    A-1 Introduction to the UML
    A-2 Code Qualities
    A-3 Encapsulating Primitives
    4 Shalloway’s Law

Errata
Page 50, middle of page:

should be:
// NullEncrypter derives from Encrypter but does no encryption
if (<<don’t need an encrypter>>) return new NullEncrypter();

6 Interface-Oriented Design

Page 81, paragraph 2:

Later on you may find that YourCustomerLookup and YourVendorLookup have much more in common than YourCustomerLookup and MyCustomerLookup.

should be:

Later on you may find that YourCustomerLookup and some new lookup, such as YourVendorLookup, have much more in common than YourCustomerLookup and MyCustomerLookup.