XP @ Unruly

Delivering Value, Fast.

benji 2013-10

whoami

Unruly

  • Social Video Advertising
  • 3 Dev Teams
  • All XP
  • Grown from single team of 3 developers in 3 years

Cross-functional teams

Full feature lifecycle

  • Product planning
  • Front-end Dev
  • Back-end Dev
  • Operations
  • Support

XP in Practice @ Unruly

But first...

What is Agile Development?

  • Iterations
  • Standups
  • Planning Meetings
  • Estimating Sessions

It's all lies

Agile Manifesto

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

Processes and Tools

What I'll be talking about

Processes and Tools

Failure

Processes and Tools

Find what works for you. Keep it minimal.

Processes and Tools

Respond to change

That being said

Here's what we do

XP Rules

http://www.extremeprogramming.org/rules.html

Retrospectives

Most important part of process

Allows process iteslf to respond to change

Retrospectives

Fix XP when it breaks

Retrospectives

3 weeks, facilitator from another team

Retrospectives

Timelines

Positives/Negatives

Mood Graph

Dot Voting

Actions

Nothing is Sacrosanct

Planning

Planning

How do we decide what to do

Aim

  • Maximise value (Sales or Savings)
  • Minimise delay

Transparent

We see the value in sales immediately

Just in time planning

Just in time planning

Planning is just guessing

Just in time planning

Selling lies

Just in time planning

Sell things we haven't built

Just in time planning

...with limits

Just in time planning

Jump the queue

Just in time planning

Evidence based development

Just in time planning

Only works for direct sales

Not for efficiency/big picture

Planning

Identifying what we could do

Choosing what to actually do

Planning

Constant stream

User stories

How we capture features

User stories

As <Persona> I want <Feature>, So that <Business Reason>

User stories

As a campaign manager, I want to frequency cap ads to one view in 24 hours, so that we only pay for views that we will get paid for

User stories

Keep it short. It's not a spec. It's a reminder of a conversation.

User stories

Capture the problem, not the solution

User stories

No-one knows what they want

User stories

As a publisher I want a checkbox where I can opt-in to ad campaigns

User stories

As a publisher I want to be able to control what campaigns show on my site, so that I do not show inappropriate ads for the audience. e.g. Alcohol ads on a children's game

User stories

Entirely different solution

User stories

Physical cards

User stories

Trello cards

Splitting stories

As a customer, I want the moon on a stick

Splitting stories

Requirements start out big

Splitting stories

Slow to get release, slow to get feedback

Splitting stories

  • Remove gold-plating. YAGNI
  • Defer configurable features
  • Only support some platforms
  • Prototype/Test first

Splitting stories

Aim for stories smaller than 1 day of work

Collecting stories

Developer talks directly to customer

Collecting stories

Constant stream of incoming stories that we're preparing

Collecting stories

A lot go in the bin

Collecting stories

Using trello

Value/Cost

Customer can tell us the value, what is the cost?

Story time

Story time

Story time

No-one likes long meetings

Story time

If it hurts, do it more often

Story time

Up to 3 times a week

Up to 30 minutes

Estimate

Ideal days

Estimate

Planning poker

Estimate

Triangulate

Estimate

Not binding

Value/Cost

Just guesses

Estimate

Velocity (Yesterday's Weather)

Estimate

Unnecessary?

Prioritisation

Iterations for prioritisation, not for release

Prioritisation

With stakeholders

Prioritisation

With stakeholders

Prioritisation

When things change during an iteration

Building

Daily standups

Building

Progress visible

Building

Implementation Huddles

Building

Pair Programming (identical clothing is optional)

Building

Pair Programming

Building

Sometimes two is not enough

Building

Ad-hoc dicsussions

Building

Pair rotation

Releasing

No value until in production

Releasing

At end of iteration?

Releasing

At end of iteration?

Releasing

As soon as it's ready

Releasing

As soon as Before it's ready

Releasing

6 Deploys per pair per day

Releasing

Millions of users

Releasing

Continuous delivery

Releasing

  • Feature Toggles (ifs)
  • Branch by Abstraction (interfaces)

Releasing

Small releases safer

Releasing

Features available as soon as ready

Releasing

Fast, automated deploy

Releasing

Automated testing

Sign-off

Walk through with story-owner

Sign-off

Incorporate feedback, iterate

Sign-off

Release communication

Operations

Keeping it delivering value

Operations

Same team

Operations

Incentive to keep it simple, reliable

Operations

Visibility of Status

Operations

Visibility of Status

Support

Lone Ranger

Recap

  • Change process over time
  • Developers collaborate directly with customers
  • Find out the actual problem, don't jump to the solution
  • Constant streams, no phases
  • Regular prioritisation
  • Minimise time to value
  • Collective responsibility for whole lifecycle

Questions?