Skip to main content
  1. Posts/

The Bumpy Ride We All Need to Smooth Out

·698 words·4 mins
Todd Linnertz
Author
Todd Linnertz
AI Enablement & Platform/DevOps Engineering · Creator of AIEOS · Enterprise-scale delivery

Today, we’re diving deep into the roller-coaster world of Change Failure Rate (CFR). By the end of our chat, you’ll see why this metric is like the unsung hero of successful software delivery.

What is Change Failure Rate?

In a nutshell, Change Failure Rate is the percentage of deployments that fail. It measures how often we hit a bump when introducing new changes.

So, Why Should We Care?

  • It’s great to deploy often (remember our chat about Deployment Frequency?), but not at the cost of quality. A high CFR indicates we might be moving fast but also breaking things along the way.

  • Every time a user encounters a failure, a bit of trust erodes. High CFRs can lead to dissatisfied users who might eventually jump ship.

  • A failed deployment usually means rollbacks, hotfixes, and more testing. This can strain resources and delay other vital tasks.

Why Does Change Fail Anyway?

Now that we’ve painted a picture of what CFR is and why it’s crucial let’s understand why changes fail in the first place.

  • Sometimes, we might need to test thoroughly, missing out on bugs that rear their heads in production.

  • If teams are in sync, they might get critical information, leading to faulty deployments.

  • Pushing changes quickly without proper checks can spell disaster.

  • Introducing overly complex changes can increase the risk of failure.

Reducing the CFR

Now, onto the good stuff. How do we reduce this pesky Change Failure Rate?

Automate Testing

While manual testing has its merits, it could be better. Automated tests can catch regressions and other issues swiftly and reliably. By setting up a robust Continuous Integration (CI) system, we can ensure every change is put through the wringer before it sees the light of day.

Feature Flags & Toggles

We can release new changes to a subset of users using feature flags. If things go south, it’s limited to a small group, and the feature can be toggled off instantly.

Blameless Postmortems

When a change fails, it’s tempting to play the blame game. But pointing fingers isn’t constructive. Instead, focus on a blameless postmortem. Analyze what went wrong, learn from it, and improve processes. This approach promotes open communication and continuous improvement.

Smaller, Incremental Changes

Massive, monolithic changes are riskier. By breaking down changes into smaller chunks, we reduce complexity and, by extension, the chance of failure.

Clear Communication Channels

Ensure that teams communicate seamlessly. Whether it’s developers coordinating with testers or operations getting a heads-up about an upcoming deployment, clear communication can preempt many issues.

Invest in Monitoring and observability

Sometimes, issues manifest after a while. By having a robust monitoring and observability setup, we can detect and rectify problems before they escalate.

Feedback Loops

Establishing tight feedback loops with users can be invaluable. They can alert us to issues we might have missed, allowing for rapid fixes.

A Tale from the Trenches

I worked with a brilliant team but a tad overenthusiastic a while ago. They’d churn out features at breakneck speed. But, as you might have guessed, our CFR was through the roof.

Every deployment was like walking on eggshells. Would it be smooth, or would we be firefighting issues for the next 48 hours?

The turning point came when a significant release, which we’d heavily marketed, crashed and burned on launch day. The feedback, as you can imagine, wasn’t kind.

So, we regrouped and decided to tackle our CFR head-on:

  • We invested time in setting up a robust CI pipeline with comprehensive tests.

  • Instead of launching features to our entire user base, we started with small groups, expanding gradually.

  • We established clear channels for users to report issues, which helped us catch and fix problems swiftly.

Over time, our CFR reduced dramatically. Deployments were no longer anxiety-inducing events but routine, smooth operations. And the best part? Our users started noticing and appreciating the improved stability.

Change, by its very nature, introduces uncertainty. And in the world of software, this means potential failures. But that doesn’t mean we should shy away from change. Instead, by understanding, measuring, and actively working to reduce our Change Failure Rate, we can ensure that our software evolution is more smooth sailing than a bumpy ride.

Related