2014 Retrospective

At the end of 2012 I performed a simple Retrospective of the year.  I seem to have neglected to do one at the end of 2013 but it shall be a yearly habit from now on.

Conferences attended:

Presentations:

Published:

This is a big achievement for me personally.  Thank you to those that made it happen.

  • Joint Contributor with Paul Shannon in More Agile Testing by Lisa Crispin and Janet Gregory
  • Contributed a chapter to Build Quality In – the collection of Continuous Delivery and DevOps stories edited by Steve Smith and Matthew Skelton
Personal:

  • Co-organised my first conference – PIPELINE 2014!
  • Went skiing for the first time
  • Started Portuguese lessons
  • Took Cycling Classes and Bicycle Maintenance classes
  • Continued my Cello lessons (aiming for Grade 3 this spring)
  • Attempted the Computer Networks Coursera course and achieved a grade of 47%. I’m proud of this score as it was a pretty intense course.
  • Stepped down from the ACCU committee as I could no longer devote the proper time to it.
  • Only managed to finish reading 6 books when I’d hoped to read 18.
  • Donated blood 3 times before being temporarily suspended to investigate anaemia 😦
  • Sadly, I still have limited proficiency with the Portuguese language

Changed Jobs
In August I left my role at 7digital, I job and company I loved and spoke about, after 4 years of being with them.  I wanted to try a new challenge.  I know it sounds corny, but I really did.  I wanted to see if I could take all the things I’d learned there to somewhere new, share my knowledfe and learn even more.
I took up a Senior Engineer role at JUST EAT and it’s been great.  I’ve had much to learn and as a result have been battling my own Imposter Syndrome, but I hope I’ve been making a difference, even a small one.

Next Year

I plan to get back on top of my reading, blogging and neglected fitness – the usual stuff.

Having left 7digital in August I now longer feel comfortable presenting about the experience report about their journey towards Continuous Delivery.  Change happens there every day and I am no longer able to ‘finish’ the presentation with details of what is currently being achieved.  There are still many things I could talk about from that time though, possibly distil the learnings into something more transferable, but I believe the audiences enjoyed hearing a real life experience report.

Creating a new presentation is top of the list and I’m open to ideas and suggestions.

Conclusion

Once again I’ve achieved more than I thought – a year is a long time and we regularly fail to remember anything other than recent events.  This feeling has been compounded by my focus in the latter half of the year being centred almost exclusively on my new role at JUST EAT, which is to be expected.  A new role is challenging with a new codebase, domain, terminology and people to learn about, which is exactly what I was seeking, so I’m happy!
Here’s to 2015!

Frequent releases reduce risk

This post expands on a train of thought initiated by Dan North in his talk “Kicking the Complexity Habit” at NDC London 2014.

“Frequent releases reduce risk” – this is something you hear all the time in conversations about Continuous Delivery.  How exactly is this the case?  It sounds counter-intuitive.  Surely releasing more often is introducing more volatility into Production? Isn’t it less risky to hold off releasing as long as possible and take your time with testing to guarantee confidence in the package?

Let’s think about what we mean by risk.

What is risk?

Risk is a factor of the likelihood of a failure happening combined with the worst case impact of that failure:

Risk = Likelihood of failure x Worst case impact of failure

Therefore an extremely low risk activity is when failure is incredibly unlikely to happen and the impact of the failure is negligible.  Low risk activities also include those where either of these factors is remarkably low such that it severely reduces the effect of the other.

Playing the lottery is low risk – the chance of failing (i.e. not winning) is very high, but the impact of failing (i.e. losing the cost of the ticket) is minimal, hence why many people play the lottery.

Flying is also low risk due to the factors being balanced the opposite way. The chance of a failure is extremely low – flying has a very high safety record – but the impact of a failure is extremely high.  We fly often as we consider the risk to be very low.

High risk activities are when both sides of the ratio are high – high likelihood of failure and high impact, for example extreme sports such as free solo climbing and cave diving.

Large, infrequent releases are riskier

Rolling a set of changes into a single release package increases the likelihood of a failure occurring – a lot of change is happening all at once.   
The worst case impact of a failure includes the release causing an outage and severe data loss.  Each change in a release could cause this to happen.  
The reaction to try and test for every failure is a reasonable one, but it is impossible.  We can test for the known scenarios but we can’t test for scenarios we don’t know about until they are encountered (“unknown unknowns“).   This is not to say that testing is pointless, on the contrary it provides confidence that the changes have not broken expected, known, behaviour.  The tricky part is balancing the desire for thorough testing against the likelihood of them finding a failure and the time taken to perform and maintain them.
Build up an automated suite of tests which protect against the failure scenarios you know about, and each time a new one is encountered add it to the test suite.  Increase your suite of regressions tests, but keep them light, fast and repeatable.  
No matter how much you test, Production is the only place where it counts.

Small, frequent releases reduce the likelihood of a failure

Releasing often, containing as small a change as possible, reduces the likelihood that the release will contain a failure.

There’s no way to reduce the impact of a failure – the worst case is still that the release could bring the whole system down and incur severe data loss, but we lower the overall risk with the smaller releases.

Release small changes often and reduce the likelihood of a failure and therefore the risk.