Extreme
Continuous
Delivery

at Unruly

Alex Wilson - @pr0bablyfine
Benji Weber - @benjiweber

http://unruly.co/

Marketing Technology

12-120 in under 2 years

3-30 tech team

Talk Structure

  • How we work
  • Why it works
  • Scaling Challenges

Careful & Considered
Approach

How we work…

Feedback Loops

  • Pairing
  • TDD
  • Customer
  • Deploy

Iterations & Release Planning

"Plan releases once a quarter. Plan iterations more frequently"
(XP Explained)


We do none of these things

Goal

Deliver value as quickly as possible

Minimise time from conception to value

Value Stream

(Continuous Delivery, Jez Humble & David Farley)

Accelerated Value Stream

Normal Value Stream

Definition of Done

When tests pass

When integrated

When deployable build

When deployed

When measurably delivering value

Deploy Pipeline

(Continuous Delivery, Jez Humble & David Farley)

Waterfall in a Tube

Gate Metaphor

Automate all the Things

  • Acceptance
  • Integration
  • Component/Unit
  • Performance

Move Checks Post-Deploy

Live with broken


  • Monitoring
  • What's Broken & Why?
  • Fix rapidly
  • NagDD
  • Constantly running tests against production

TDD-Deployment

Synchronous

  • Deploy & Feedback
  • Inform next change
  • Motivation to keep deploy fast

Who does CI?

No CI Server

No Branching

  • No long lived feature branches
  • No pushed branches
  • Real CI
  • Integrate with users and data

Continuous Isolation

Promotion

Business Dev decides when to deploy

  • Feature Toggles

UAT in Production

  • Global Org
  • Production-like
  • Performance feedback early
  • Canary deploys

Accessible Customer

Essential

Harder across multiple time-zones

Continuous Delivery Deployment

Every build is capable of being deployed

Every push is deployed

Even after beer o'clock

Roll Back Forward

"Forward Roll" by Astrid Photography.

People & Culture

Siloing is Bad

Split by Project Product

Generalists over Specialists

Specialists help generalists do better

Product Team

Didn't work - became a bottleneck

Replaced with Product Strands

Collective Ownership

  • Code
  • Tests
  •  
  • Requirements
  • Ops
  • Support

Devs on Call

Freedom and responsibility

Pair Programming

Real-time code review

Self-Improvement

  • Retrospectives
  • 20% Time
  • Dev Tasks

Infrastructure Challenges

1-100 Servers

Continuous Disposal

Caught out by assuming servers were rebuildable - they weren't

First Day

Any project's first step - deploy "Hello World"

Deploy something, iteratively improve

Shared Infrastructure

Assumed care; Ensured suffering

Cross-team collaboration

Reduce Variance, Increase Mean

Homogenous systems are easier to reason about.

MTBF becomes less important than MTTR

Phoenix Workstations

Cronned Code Deletion

Dev Scaling Challenges

Existing Product Boundaries

"River & Bridge" by John Gateley

Conway's Law

"organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations"

Take advantage

Split on Demand

You know least when you start

Monolith vs MicroServices

Deploy speed vs Dependency Hell

Single Repo vs Versioning

Continuous Investment

Deploy Speed & Reliability

@QuarantineRule

0.1% failure rate is annoying with 100 tests

0.1% failure rate is impossible with 10,000 tests

https://github.com/unruly/junit-rules

Unusual things

Continuous Deployment
Synchronous Deploy
No CI Server
Cronned Code Deletion

Key
Points

Short pipeline
Fast feedback
Early value

Thanks for Listening

Heckle us on Twitter
@pr0bablyfine @benjiweber

Any Questions?

We're hiring –
talent@unrulymedia.com