Michael Mentele

learning-review   worth-reading

Book Review: Accelerate

Book Author: Nicole Forsgren, Jez Humble, Gene Kim

Accelerate is about how to build and scale a high performing i.e. optimal software organization.

For me, it validated many pet theories I had around development that had lead me to become a thought leader around testing and quality at Oculus. More QA leads to worse quality not better, at least in the world of software and contexts where software failure isn’t catastrophic.

If you only get one shot at a nuclear launch program you’d better do thourough testing!

They identify 5 areas that matter which are:

  • continuous delivery capabilities
  • architecture capabilities
  • product and process capabilities
  • lean management and monitoring capabilities
  • cultural capabilities

Continuous Delivery

The big theme here is developing and releasing in drips and relentlessy optimizing this workflow so that you have tiny units getting shipped isntantly. This leads to fast feedback which prevents wasted effort, over building, over preparing, over testing and so on.

The trap of QA is that it adds lead time, leads to context loss, leads to bad incentives i.e. responsibility for quality is not in the devs hands, leads to lack of investment in automated testing, etc. etc.

The longer lead time means you will have bigger builds. The bigger builds will invariably be higher risk i.e. more changes. They will all land at once making it harder to debug – you will have the hydra problem. The hydra problem is where multiple issues raise their ugly head at the same time but it’s hard to root cause because there were so many changes released. These bugs lead to more QA investment which leads to more of the same and so we go.

Practices they discuss that support CD:

  • version control <- duh
  • deployment automation <- click a button or auto push etc.
  • continuous integration <- be constantly merging
  • trunk based development <- no feature branches, why? because that increases lead time, instead develop and integrate directly from main
  • test automation <- build testing into development, catch bugs early when they are cheap AND design better code (modular code is easy to test)
  • include security into development

Architecture

Loose coupling! Don’t force one team to be blocked due to another team’s work. One service can be deployed without worrying about other parts of the system. It can be tested and verified in isolation WITHOUT an integrated environment.

Product and Process

Your process should organize around continuous delivery and focusing on developing changes that take less than a week to implement and ship. Fast feedback streams from customers and stakeholders, leads to minimal rework and waste. Which means that time can be reinvested.

Lean Management

Limit work in progress. You need to focus and minimize the number of ongoing threads. Threads have overhead. It also helps visualize obstacles and generally you have more clarity. My personal rule of thumb is there should be an A-Project and a B-Project. The A-Project is important and likely urgent. The B-Project is important but non-urgent. This is so that when you are waiting on the A-Project you can backfill work that’s okay to put back down.

They also mention a visual feedback system such as a dashboard that can tie work back into the business unit. My interpretation is this matters with limiting work because you essentially are verifying the work in small batches and following up on it before moving on to other work or losing it in a morass of projects.

Monitoring your work and getting proactive notifications from your deployed code is vital to this sort of verification / closing the loop.

Culture

You must have a culture of trust, openness, and shared responsibility. This type of identify will minimize cultural drag (my own term) i.e. overhead where “politics” and process aka power plays get in the way of what matters – the work.

They identify 5 areas:

  • Vision – clear path for the next 5 years
  • Inspirational communication – you motivate your people even in the face of uncertainty
  • Intellectual stimulation – challenge team to think in new ways
  • Supportive leadership – demonstrate caring
  • Praise – recognize and praise outstanding work