Michiel Kalkman

Notes and observations

27 Oct 2019

What's slowing down my team?

Overview

In my experience, team performance is often discussed in fairly ad-hoc terms. We have plenty of formalisms to reason about network communication and scalability, why not apply some of these to team performance?

All we need is some way to measure work performed and a unit of concurrency.

Agile teams have both of these. Team size is our unit of concurrency and Story Points is the way we can measure work.

Modeling team performance

  1. Story points per sprint
  2. Number of people in the team

The total number of points that will be burned down in a Sprint is,

  • The average number of points for one person
  • Times the number of people in the team

Work per Sprint - Expression

$$ P(people) = storypoints * people $$

$$ P(people) = \frac{storypoints * people}{1} $$

P Performance
people The number of people in the team
storypoints The number of Story Points for 1 person in 1 Sprint

P(people) = people * 15

Impediments to linear scalability

  • Contention - Usage of a shared, finite resource
    • Usually a delay in starting or continuing work
  • Crosstalk - A form of direct or indirect communication
    • Usually an interruption of work

Contention

<em>Shared resource : The bone is our dedicated QA&rsquo;er</em>

Example : One person runs the tests

Contention

One person runs the tests

Contention - relation to scalability

$$ P(people) = \frac{storypoints * people}{1 + (contention * (people - 1))} $$

P Performance
people The number of people in the team
storypoints The number of Story Points for 1 person in 1 Sprint
contention The cost of sharing a resource (0 to 1)

Contention - Example

Diminishing returns

Crosstalk

A form of direct or indirect communication between people. Also known as coordination or cohesion. Generally an interruption of work. For example : Daily standup

Eveybody communicates with everybody else so the number of channels for a groups is:

$$ Channels(people) = people * (people - 1) $$

$$ Channels(people, talkers) = talkers * (people - 1) $$

Crosstalk - channels

One person communicating with everyone

Crosstalk - channels

Two people communicating with everyone

Crosstalk - full mesh

Everyone communicating with everyone

Crosstalk - crosstalk channels

Number of relationships : f(x) = x(x-1)

Crosstalk - relation to scalability

$$ f(x) = \frac{nx}{1 + kx(x-1))} $$

  • n is concurrency - ideal parallelism, linear scaling
  • k is cohesion - time waiting for data to become coherent

Crosstalk - example

Negative returns

Black box models - Team

One person runs the test suite One team runs the load tests
One person runs the tests One team runs the load tests
Isomorphism

Black box models - Organization

One team per non-dev function

Universal Scalability Law

$$ USL(x) = \frac{nx}{1 + \sigma(x-1) + \kappa x(x-1)} $$

  • n is concurrency - ideal parallelism, linear scaling
  • s is contention - cost of sharing resources
  • k is cohesion - time waiting for data to become coherent

Full USL Comparison

Interactive exploration

https://www.desmos.com/calculator/ekkdy5mlhc

DevOps vs Command and Control

C&C DevOps
Failure is not an option Fail fast, learn
One person, one function Roles are flexible
One person, one function Roles are flexible

Variability

Tasks vary in size and complexity.

Leads to variability in,

  • Compute (CPU)
  • IO (Network)
  • Storage (RAM)

Further reading

Next time, we'll talk about "What Tiger King can teach us about x86 Assembly"