Evolutionary Architecture at Work

Post on 01-Sep-2014

2.200 views 1 download

Tags:

description

 

Transcript of Evolutionary Architecture at Work

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 == overheadWho is doing what?

Monday, April 22, 13

Big teams == overheadStand-ups become the main communication

channel

Monday, April 22, 13

Big teams == overheadMassive backlog requires constant grooming and

management

Monday, April 22, 13

Big teams == overheadIn 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 subsystemsRuby/Rails are a horrible

Golden Hammers

Monday, April 22, 13

Multiple subsystemsThe 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 aboutEveryone 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

meanshttp://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