Agile Development

Recently I came across a very interesting article on the ThoughtWorks  website (Oct 2017), where the author was reflecting  on the fundamental software engineering values that most of us developers will share. The four core values and eight core practices were depicted in a simple yet powerful diagram. Note that the values and practices are not new, but loosely inspired by the world of extreme programming (XP). 

We can realize a core value by performing one or more core practices (= concrete activities). For instance, you can realize the value of Clean Code by applying the practices Test Driven Design and Refactoring. Values and practices are linked by principles. Principles guide practices in realizing values. It might not be obvious straight away but the core practices in the outer circle of a slice do not strictly belong to the core values in the inner circle of the slice.

Now let’s look at the core values. I quote literally:

Fast feedback: We value being able to find out whether a change has been successful in moments not days. It might be that unit tests have passed, or that we haven’t broken production, or that a customer is happy with what we’ve built.

Repeatability: We value the confidence and predictability that comes from removing manual tasks that introduce weird inconsistencies. We also want to spend time on activities that are more important than troubleshooting something that should have just worked.

Simplicity: We value software that contains no more complexity than it needs to do a good job. We build for what we need now, not what we think might be coming (YAGNI principle). But we make choices that allow our software to rapidly change to meet the requirements that are coming.

Clean Code. We value software that’s easy to understand and maintain and is intention-revealing, as we know that this allows us to continue making changes with confidence, as we learn more about the problem.

It’s interesting to compare the above values and practices to the values, principles and practices of extreme programming. So here they are:

XP Values:

  • Communication
  • Simplicity
  • Feedback
  • Courage
  • Respect

XP Principles:

  • Fast Feedback
  • Simplicity
  • Incremental Change
  • Embracing Change
  • Failure and Quality

XP Practices:

  • Faster Feedback
    • Test Driven Development
    • On-site Customer
    • Pair Programming
  • Continuous Process
    • Continuous Integration
    • Refactoring
    • Short Releases
  • Shared Understanding
    • The Planning Game
    • Simple Design
    • System Metaphor
    • Collective Ownership
    • Coding Standard