Sunday, March 1, 2015

Embracing Change

I recently listened to a recording of a webinar put on through the ACM titled "Agile Methods: Agile Methods: The Good, the Hype and the Ugly" where Bertrand Meyer (the Eiffel/Design by Contract guy) gave his interpretation of the agile software movement, and how we may tweak agile thinking. 

A point in particular caught my attention.  He talked about a rephrasing of some of the agile principles as stated in the manifesto, and in particular he talked about rather than "embracing" change, one should "accept" change.  While this might seem like splitting hairs, I think it an important distinction, and one I completely disagree with.  I'd like to elaborate why I feel the distinction matters.

The rationale behind Meyer's thinking was that nobody is happy when they have to throw away work.  Say you built a fancy front end for a payment system and then after weeks of development the customer says "nope, that's not what I want" and you have to throw it away.  You're obviously not going to be happy about that, but given the customer pays the bills (and as such your salary), you have to just roll with that punch and start over.  As such, Meyer paints this picture of the developer who begrudgingly throws away his/her pristine work, all the while muttering under his/her breath about how the customer can't make up their mind and resenting the indecision.

I agree with this in principle (I don't like to waste my time), but it fundamentally misses the point of not only the agile philosophy, but of modern professional software development.  As a developer, I don't want to build things for the sake of building things, I want to build things that solve problems.  In particular, I want to build things that provide value to a user (ideally a user who will pay for such services, but the monetary unpleasantries I tend to leave to the business folk).

That is, if what I'm building isn't what the customer wants, I don't want to build it.

This is important.  I'm a craftsman, so I very much care about, and put my entire energy into writing the best code I can, building the best systems I can, but I fully recognize that none of the stuff that goes into that "quality" equation matters if you're building the wrong thing.  As much as I love development, it's value is instrumental, not intrinsic.  If the stuff I create never gets used, then it doesn't matter how good it is.

With this in mind, hell yes, I embrace change.  When a customer gives feedback and says "that's not quite what I want" it's music to my ears because it means I'm now that much closer to building the right thing.

So yeah, don't just accept change, embrace it.  Wrap it around you like a warm blanket, secure in the knowledge that because of that change you're now even closer to building something truly amazing that will change people's lives.