Monday, April 22, 13
Evolutionary
Architecture at Work
phil calçado
@pcalcado
http://philcalcado.com
Monday, April 22, 13
2011: Phil decides
to move to Berlin
Monday, April 22, 13
Monday, April 22, 13
Monday, April 22, 13
Monday, April 22, 13
~ 180 million users / month
> 10 hours of audio
uploaded every minute
Monday, April 22, 13
Organisation challenges
Monday, April 22, 13
SoundCloud was
born on Rails
It allowed us to iterate real
fast and keep
code quality up(-ish).
Monday, April 22, 13
Controller
ActiveRecord
Model
Database
Rails is simple.
Monday, April 22, 13
Controller
ActiveRecord
Model
Database
Rails is simple.
But it leads you to
monoliths
SoundCloud
.com
Monday, April 22, 13
Conway’s Law kicks in
Monolithic applications
lead to monolithic teams
Controller
ActiveRecord
Model
Database
SoundCloud
.com
?
Monday, April 22, 13
Big teams == overhead
Who is doing what?
Monday, April 22, 13
Big teams == overhead
Stand-ups become the
main communication
channel
Monday, April 22, 13
Big teams == overhead
Massive backlog requires
constant grooming and
management
Monday, April 22, 13
Big teams == overhead
In the end you’ll need a full
time “Iteration Manager”
Monday, April 22, 13
technical challenges
Monday, April 22, 13
There is one system
SoundCloud
.com
Monday, April 22, 13
There is one system
not really.
Sounds
& Sets
Social
Graph
Premium
Features Search
Activity
Stream
...
Monday, April 22, 13
Multiple subsystems
Ruby/Rails are a horrible
Golden Hammers
Monday, April 22, 13
Multiple subsystems
The stability of the system
is pretty much the same
as the less stable
subsystem’s
Monday, April 22, 13
We need to split
Monday, April 22, 13
Controller
ActiveRecord
Model
Database
SoundCloud
.com
?
Monday, April 22, 13
Sounds
& Sets Social
Graph?
Premium
Features
Monday, April 22, 13
How?
Have an enterprise
Architect?
Monday, April 22, 13
How?
Create an architecture
Steering Group?
Monday, April 22, 13
What about
Everyone is an architect?
Monday, April 22, 13
Enabling the teams
Monday, April 22, 13
Step 1)
Stabilise the legacy app
Monday, April 22, 13
Idiomatic Rails is funny
Monday, April 22, 13
Understanding the
Rails mindset:
http://bit.ly/not-a-virtue
Monday, April 22, 13
Understanding the
Rails mindset:
i do not think it means
what you think it
means
http://bit.ly/not-a-virtue
Monday, April 22, 13
Stopgap Solution
Monday, April 22, 13
Stopgap Solution
Monday, April 22, 13
Stopgap Solution
(A lot like java circa 2005)
Monday, April 22, 13
Step 2)
Create a common protocol
Monday, April 22, 13
Sounds
& Sets
Social
Graph
Premium
Features Search
Activity
Stream
...
Monday, April 22, 13
Sounds
& Sets
Social
Graph
Premium
Features Search
Activity
Stream
...
Ruby Clojure
Go Haskell
Scala
Ruby
Monday, April 22, 13
We want to try things
before making a call
Monday, April 22, 13
Don’t publish rules,
publish guidelines
Monday, April 22, 13
Step 3)
Minimise non-technical
overhead
Monday, April 22, 13
Social
Graph?
Monday, April 22, 13
Step 4)
Minimise technical
overhead
Monday, April 22, 13
Pushing a micro-service to
production should be easy
Monday, April 22, 13
Monday, April 22, 13
Monday, April 22, 13
Monday, April 22, 13
Monday, April 22, 13
People solving the same
problems over and over
Monday, April 22, 13
Monday, April 22, 13
(with the same code...)
Monday, April 22, 13
Monday, April 22, 13
Monday, April 22, 13
Current status
Monday, April 22, 13
About 6 application teams,
3 engineers + 1 product
person
Monday, April 22, 13
Micro-services in Clojure,
Scala and (J)Ruby
Monday, April 22, 13
Pull Request lead time
reduced from 3 to 1 week
Monday, April 22, 13
Still afraid of deleting
old code
Monday, April 22, 13
We have “black hole”
teams
Monday, April 22, 13
There is a lot of
infrastructure to build
Monday, April 22, 13
In 4 slides
Monday, April 22, 13
Step 1)
Stabilise the legacy app
Don’t stop the world, but
don’t let the code base
deteriorate even more
Monday, April 22, 13
Step 2)
Create a common protocol
Guidelines and examples,
not rules
Monday, April 22, 13
Minimise non-technical
overhead
Small teams
don’t need... a lot
Monday, April 22, 13
Step 4)
Minimise technical
overhead
Only try to
re-use after you use
Monday, April 22, 13
phil calçado
http://philcalcado.com
@pcalcado
www.soundcloud.com
Monday, April 22, 13

Evolutionary Architecture at Work