1 of 48

scaling

people, product, systems

2 of 48

hi!

CTO, GoPay

17 years in tech

@rnjn

June, 2019

iC

Pr

TW

GoJek

3 of 48

many hats!

dev

pm

pgm

hr

student

coach

.

.

.

swiss knife

4 of 48

first time speaker

5 of 48

– Frederick P. Brooks, No Silver Bullet, 1986

“… a scaling-up of a software entity is not merely a repetition of the same elements in larger size; it is necessarily an increase in the number of different elements. In most cases, the elements interact with each other in some nonlinear fashion, and the complexity of the whole increases much more than linearly.”

6 of 48

GoJek journey

7 of 48

january 2015

~15,000 monthly orders

< 5 people

8 of 48

october 2015

~2,500,000 monthly orders

< 40 people

9 of 48

october 2016

~35,000,000 monthly orders

< 100 people

10 of 48

october 2017

~85,000,000 monthly orders

< 250 people

11 of 48

february 2018 6666X

12 of 48

ultra lean: 1 engineer

per

6ook monthly orders

that’s completed orders, no fine print

13 of 48

failed at many things, learnt to scale a bit

.

.

.

.

.

still learning

14 of 48

truth

there is no silver bullet solution to scaling

15 of 48

experiment

observe

course correct

16 of 48

ingredients

product

people

teams

engineering

.

.

self

17 of 48

product

Experiments over Features

Statistics over Opinion

Just Enough Polish

Believe in Serendipity & Luck

18 of 48

scale a product to a platform

19 of 48

transport completed orders

time of day

20 of 48

time of day

food completed orders

21 of 48

driver completed orders

time of day

22 of 48

ingredients

product

people

teams

engineering

.

.

self

23 of 48

hire right

Doers over Talkers

Quality over Quantity

Learners and Seekers over Egos

No Jerks

24 of 48

fairness

Fairness over Cost

Treat people as adults

Open feedback vs closed rooms

Pay for execution; what not who

favour least levels in information hierarchy (we have 3)

25 of 48

wellness

Fairness

Unlimited sick leaves

No death marches

Learn and Teach compassion

Promote fast

26 of 48

ingredients

product

people

teams

engineering

.

.

self

27 of 48

hard problems

distributed development is hard

retention is hard

massive cost of bad teams

controlling toxicity is hard

28 of 48

learnings

frequent and open feedback

rituals

responsibilities over titles

help people grow together

help teams focus on the essentials

29 of 48

craft your teams

Small size

All roles sit together

Clear, measurable goals

Iterations

Autonomy to execute, within bounds

favour least levels in information hierarchy

30 of 48

ingredients

product

people

teams

engineering

.

.

self

31 of 48

hard problems

distributed systems are hard

system failures are inevitable

programmer discipline is hard

simple is hard

recovering from debt is very hard

32 of 48

steps on scale

33 of 48

patterns

caching

read write separation

multiple copies and prepared views

app level sharding

34 of 48

writes

validate -> act (store, call other parties in order) -> respond

vs

validate -> record -> respond -> broadcast -> act

35 of 48

Once validated, consistency is ensured (eventually)

OMS

1. Create/Update

2. Validate

3. Record

4. Broadcast

6. Act

5. Respond

safe zone

36 of 48

safe zone prereqs

idempotency

replayable queues

eventual consistency

isolate from dependency failures

37 of 48

more patterns

discard bad calls ASAP

secure shell

build multiple redundancies

open source over managed

document document document

38 of 48

design for failure

circuit breakers

replayable queues

idempotency across systems (internal and external)

test for chaos

UX - guide users when the system fails

39 of 48

automate

humans are inefficient at repetitive work

humans are costly

human communication problems are unsolved

if you’ve manually done it thrice, write a script

40 of 48

choose the right tools for the job

Language - JVM(java, clojure, jruby/rails, kotlin), swift, GoLang

Persistence - pg, redis, kafka, mongo, hbase, files

Practices & rituals - TDD, XP -> pairing, standups, IPMs, retros

Trunk based development

Automated QA

41 of 48

infrastructure

managed cloud, multiple DCs

cloud agnostic tooling (no ElasticX)

VMs -> containers

100% automation, phoenix servers

42 of 48

key thoughts

43 of 48

quality never goes out of style

44 of 48

don’t break what you cannot fix

45 of 48

work with people you can trust

46 of 48

build a school, teach how to fish

47 of 48

experiment

observe

course correct

48 of 48

reading

  • Release It!
  • The Mythical Man Month
  • Pragmatic Programmer
  • Refactoring
  • NoSQL Distilled
  • Designing Data Intensive Applications
  • SICP
  • The Joy of Clojure
  • Domain Driven Design
  • Xtreme Programming Explained
  • Building Microservices
  • REST in Practice
  • Enterprise Integration Patterns
  • Continuous Delivery
  • Difficult Conversations
  • The 5th Discipline
  • Factfulness
  • Powerful
  • Principles
  • Managing Humans
  • Innovators
  • Measure what matters