Wednesday 24 November 2021

Collaborating On Software: Optimising For Recovery

One of the mantras I like to follow when creating software systems is to "optimise for recovery" over "optimising against failures". This is embracing the fact that we're all human and thus mistakes will happen. In practice this means I focus on how quickly we can detect failures and repair them[0]Which is part of the reason I love TDD, the act of predicting and preventing failures BEFORE they even happen :D.

What I find novel is embracing this approach with how we work together. Accepting that we're not always perfect[1]Shocking, I know! and that we will make mistakes in how we communicate and collaborate.

Perhaps one of the most painful parts of this approach is dealing with the "production outage" level of mistake - a breakdown in trust.

Trust is tantamount in any relationship. In working relationships, I really like the definition of trust from Agile Conversations

1) I have expectations about what you will do that have been met before
2) I believe you will meet those expectations again, when we collaborate again in future

This is touched upon in Jeffrey and Squirrel’s podcast on Choosing Grief Over Guilt. It's unpleasant to experience behaviour contrary to my expectations, it is a violation of trust. It's not something to just skip over. The associated negative emotions won’t simply go away, or in the very least they won’t for me! Squirrel makes an excellent point: I can’t be curious[2]If I'm not in the mindset to be curious then my ability to effectively communicate is greatly inhibited.

If I was to try to power through this then it would probably lead to poor communication.

Poor communicate will probably lead to poor collaboration... and thus the spiral towards the Dark Side continues!
until I deal with my emotions.


When trust is broken, guilt is not the answer. Guilt isn't helpful and neither is ignoring emotions. To recover from a breakdown in trust, it is more effective to first drain off the sadness, the anger and the frustration. I find this helps me get into a mindset where I can cultivate curiosity and thus more effectively communicate/collaborate.

So when working with others, I will take up the mantra of optimising for recovery. When mistakes are made, we can deal with the emotions first, so that we can move forward to rebuilding trust. I predict that, just as with software, it will make our relationships more robust in the long term.

No comments:

Post a Comment