SlideShare a Scribd company logo
How we build
systems at
Wunderlist
Embracing polyglot immutable micro services
🔥
At Wunderlist, we build
software that can be
thrown away
😢
As an industry, we are
bad at shipping large
systems
💀
When deployment
becomes scary, you
deploy less often
😤 “Mostly green? Ship it”
😱 Inertia leads to scary
technology updates
🚧 Abstractions and
Design pattern soup
Not all systems
exhibit this problem
At least non-software systems…
Homeostasis
Trillions of cells in your body, millions die every second
🐜 Small == Good
Our Rules:
Reduce coupling.
Remove fear of
deployment. Make
change trivial
☕
Write services so small
that they can be
understood over coffee
📣
Write services that
document themselves
without extensive
comments
📈
Test what matters to
get the code written,
then deploy and watch
the metrics
📦 Services own and
encapsulate their data
REST everywhere
Little tiny requests and responses
Problem:
HTTP connection
latency over the open
Internet
Solution:
Tunnel HTTP over web
sockets
Hahn
Our faucet for web sockets
Websocket Connection
Client Server
{
"method":"GET",
"headers": ["Content-Type: "X-Request-ID: 1234"],
"request-id":"123456", "path":"/api/v1/lists/32"
}
{
"response":200,
"headers": ["Content-Type: application/json", "X-Request-ID: 1234"]
"body":"[{"id":83526310,"title":"Read Later","revision":10}]"
}
Request:
Response:
❔ Wait, what about
HTTP/2?
Heterogeneous by
default
Ruby, Haskell, Scala, Clojure, Go, JavaScript, Java, Lua,
Elixir, Erlang, Objective-C, Swift, C#, and more to come…
Websocket
Wunderlist 3.0
Backend
A simplified diagram of our micro
services at launch last year
*not to scale
HTTP
Business Logic (English) Services
Data Access Logic (German) Services
Databases
Messaging
Wunderlist
Backend Now
Nine months later…
*still not to scale
WebsocketHTTP
Business Logic (English) Services
Data Access Logic (German) Services
Databases
Messaging
🚅
We use Rails for
production quality
prototyping
✈
We use Go, Scala, and
Clojure for when we
need to fly
🚀
When we need rockets,
we’re not afraid to
reach for appropriate
toolsets and languages
💡
Using multiple
languages forces us to
keep system interfaces
simple
What’s next?
👮 Implementing self
regulation
💨 Use spot instances
🎭 More actors
📲 Apply to client
development
♻ Go full circle
Closing
Thought
If something is difficult,
do it all the time and
get good at it
🙏
Thank you

More Related Content

Similar to Atmosphere Conference 2015: What we've learned from writing dozens of polyglot micro services

Architecting for speed: How agile innovators accelerate growth through micros...
Architecting for speed: How agile innovators accelerate growth through micros...Architecting for speed: How agile innovators accelerate growth through micros...
Architecting for speed: How agile innovators accelerate growth through micros...
Jesper Nordström
 
Architecting for speed - how agile innovators accelerate growth through micro...
Architecting for speed - how agile innovators accelerate growth through micro...Architecting for speed - how agile innovators accelerate growth through micro...
Architecting for speed - how agile innovators accelerate growth through micro...
3gamma
 
RedisConf18 - Common Redis Use Cases for Cloud Native Apps and Microservices
RedisConf18 - Common Redis Use Cases for Cloud Native Apps and MicroservicesRedisConf18 - Common Redis Use Cases for Cloud Native Apps and Microservices
RedisConf18 - Common Redis Use Cases for Cloud Native Apps and Microservices
Redis Labs
 
Microservices Practitioner Summit Jan '15 - Don't Build a Distributed Monolit...
Microservices Practitioner Summit Jan '15 - Don't Build a Distributed Monolit...Microservices Practitioner Summit Jan '15 - Don't Build a Distributed Monolit...
Microservices Practitioner Summit Jan '15 - Don't Build a Distributed Monolit...
Ambassador Labs
 
Microservices pattern language (microxchg microxchg2016)
Microservices pattern language (microxchg microxchg2016)Microservices pattern language (microxchg microxchg2016)
Microservices pattern language (microxchg microxchg2016)
Chris Richardson
 
A pattern language for microservices
A pattern language for microservicesA pattern language for microservices
A pattern language for microservices
VMware Tanzu
 
A pattern language for microservices (melbourne)
A pattern language for microservices (melbourne)A pattern language for microservices (melbourne)
A pattern language for microservices (melbourne)
Chris Richardson
 
#JaxLondon keynote: Developing applications with a microservice architecture
#JaxLondon keynote: Developing applications with a microservice architecture#JaxLondon keynote: Developing applications with a microservice architecture
#JaxLondon keynote: Developing applications with a microservice architecture
Chris Richardson
 
Developing Applications with a Micro Service Architecture - Chris Richardson
Developing Applications with a Micro Service Architecture - Chris RichardsonDeveloping Applications with a Micro Service Architecture - Chris Richardson
Developing Applications with a Micro Service Architecture - Chris Richardson
JAXLondon2014
 
Microservices: Why and When? - Alon Fliess, CodeValue - Cloud Native Day Tel ...
Microservices: Why and When? - Alon Fliess, CodeValue - Cloud Native Day Tel ...Microservices: Why and When? - Alon Fliess, CodeValue - Cloud Native Day Tel ...
Microservices: Why and When? - Alon Fliess, CodeValue - Cloud Native Day Tel ...
Cloud Native Day Tel Aviv
 
Gene xus usa customer success stories
Gene xus usa customer success storiesGene xus usa customer success stories
Gene xus usa customer success storiesGeneXus
 
What is Cloud Computing?
What is Cloud Computing?What is Cloud Computing?
What is Cloud Computing?Miminten
 
A Tale of Contemporary Software
A Tale of Contemporary SoftwareA Tale of Contemporary Software
A Tale of Contemporary Software
Yun Zhi Lin
 
Let's talk about... Microservices
Let's talk about... MicroservicesLet's talk about... Microservices
Let's talk about... Microservices
Alessandro Giorgetti
 
Keynote: Trends in Modern Application Development - Gilly Dekel, IBM
Keynote: Trends in Modern Application Development - Gilly Dekel, IBMKeynote: Trends in Modern Application Development - Gilly Dekel, IBM
Keynote: Trends in Modern Application Development - Gilly Dekel, IBM
Codemotion Tel Aviv
 
Moving to Microservices with the Help of Distributed Traces
Moving to Microservices with the Help of Distributed TracesMoving to Microservices with the Help of Distributed Traces
Moving to Microservices with the Help of Distributed Traces
KP Kaiser
 
Cloud Native Future
Cloud Native FutureCloud Native Future
Cloud Native Future
Julie Coonce
 
Moving "Something Simple" To The Cloud - What It Really Takes
Moving "Something Simple" To The Cloud - What It Really TakesMoving "Something Simple" To The Cloud - What It Really Takes
Moving "Something Simple" To The Cloud - What It Really Takes
CloverDX
 
Richardrodger nodeday-2014-final
Richardrodger nodeday-2014-finalRichardrodger nodeday-2014-final
Richardrodger nodeday-2014-final
Richard Rodger
 
Richardrodger nodeday-2014-final
Richardrodger nodeday-2014-finalRichardrodger nodeday-2014-final
Richardrodger nodeday-2014-final
Richard Rodger
 

Similar to Atmosphere Conference 2015: What we've learned from writing dozens of polyglot micro services (20)

Architecting for speed: How agile innovators accelerate growth through micros...
Architecting for speed: How agile innovators accelerate growth through micros...Architecting for speed: How agile innovators accelerate growth through micros...
Architecting for speed: How agile innovators accelerate growth through micros...
 
Architecting for speed - how agile innovators accelerate growth through micro...
Architecting for speed - how agile innovators accelerate growth through micro...Architecting for speed - how agile innovators accelerate growth through micro...
Architecting for speed - how agile innovators accelerate growth through micro...
 
RedisConf18 - Common Redis Use Cases for Cloud Native Apps and Microservices
RedisConf18 - Common Redis Use Cases for Cloud Native Apps and MicroservicesRedisConf18 - Common Redis Use Cases for Cloud Native Apps and Microservices
RedisConf18 - Common Redis Use Cases for Cloud Native Apps and Microservices
 
Microservices Practitioner Summit Jan '15 - Don't Build a Distributed Monolit...
Microservices Practitioner Summit Jan '15 - Don't Build a Distributed Monolit...Microservices Practitioner Summit Jan '15 - Don't Build a Distributed Monolit...
Microservices Practitioner Summit Jan '15 - Don't Build a Distributed Monolit...
 
Microservices pattern language (microxchg microxchg2016)
Microservices pattern language (microxchg microxchg2016)Microservices pattern language (microxchg microxchg2016)
Microservices pattern language (microxchg microxchg2016)
 
A pattern language for microservices
A pattern language for microservicesA pattern language for microservices
A pattern language for microservices
 
A pattern language for microservices (melbourne)
A pattern language for microservices (melbourne)A pattern language for microservices (melbourne)
A pattern language for microservices (melbourne)
 
#JaxLondon keynote: Developing applications with a microservice architecture
#JaxLondon keynote: Developing applications with a microservice architecture#JaxLondon keynote: Developing applications with a microservice architecture
#JaxLondon keynote: Developing applications with a microservice architecture
 
Developing Applications with a Micro Service Architecture - Chris Richardson
Developing Applications with a Micro Service Architecture - Chris RichardsonDeveloping Applications with a Micro Service Architecture - Chris Richardson
Developing Applications with a Micro Service Architecture - Chris Richardson
 
Microservices: Why and When? - Alon Fliess, CodeValue - Cloud Native Day Tel ...
Microservices: Why and When? - Alon Fliess, CodeValue - Cloud Native Day Tel ...Microservices: Why and When? - Alon Fliess, CodeValue - Cloud Native Day Tel ...
Microservices: Why and When? - Alon Fliess, CodeValue - Cloud Native Day Tel ...
 
Gene xus usa customer success stories
Gene xus usa customer success storiesGene xus usa customer success stories
Gene xus usa customer success stories
 
What is Cloud Computing?
What is Cloud Computing?What is Cloud Computing?
What is Cloud Computing?
 
A Tale of Contemporary Software
A Tale of Contemporary SoftwareA Tale of Contemporary Software
A Tale of Contemporary Software
 
Let's talk about... Microservices
Let's talk about... MicroservicesLet's talk about... Microservices
Let's talk about... Microservices
 
Keynote: Trends in Modern Application Development - Gilly Dekel, IBM
Keynote: Trends in Modern Application Development - Gilly Dekel, IBMKeynote: Trends in Modern Application Development - Gilly Dekel, IBM
Keynote: Trends in Modern Application Development - Gilly Dekel, IBM
 
Moving to Microservices with the Help of Distributed Traces
Moving to Microservices with the Help of Distributed TracesMoving to Microservices with the Help of Distributed Traces
Moving to Microservices with the Help of Distributed Traces
 
Cloud Native Future
Cloud Native FutureCloud Native Future
Cloud Native Future
 
Moving "Something Simple" To The Cloud - What It Really Takes
Moving "Something Simple" To The Cloud - What It Really TakesMoving "Something Simple" To The Cloud - What It Really Takes
Moving "Something Simple" To The Cloud - What It Really Takes
 
Richardrodger nodeday-2014-final
Richardrodger nodeday-2014-finalRichardrodger nodeday-2014-final
Richardrodger nodeday-2014-final
 
Richardrodger nodeday-2014-final
Richardrodger nodeday-2014-finalRichardrodger nodeday-2014-final
Richardrodger nodeday-2014-final
 

Recently uploaded

Bridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptx
Bridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptxBridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptx
Bridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptx
Brad Spiegel Macon GA
 
一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理
一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理
一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理
ufdana
 
The+Prospects+of+E-Commerce+in+China.pptx
The+Prospects+of+E-Commerce+in+China.pptxThe+Prospects+of+E-Commerce+in+China.pptx
The+Prospects+of+E-Commerce+in+China.pptx
laozhuseo02
 
Comptia N+ Standard Networking lesson guide
Comptia N+ Standard Networking lesson guideComptia N+ Standard Networking lesson guide
Comptia N+ Standard Networking lesson guide
GTProductions1
 
急速办(bedfordhire毕业证书)英国贝德福特大学毕业证成绩单原版一模一样
急速办(bedfordhire毕业证书)英国贝德福特大学毕业证成绩单原版一模一样急速办(bedfordhire毕业证书)英国贝德福特大学毕业证成绩单原版一模一样
急速办(bedfordhire毕业证书)英国贝德福特大学毕业证成绩单原版一模一样
3ipehhoa
 
1.Wireless Communication System_Wireless communication is a broad term that i...
1.Wireless Communication System_Wireless communication is a broad term that i...1.Wireless Communication System_Wireless communication is a broad term that i...
1.Wireless Communication System_Wireless communication is a broad term that i...
JeyaPerumal1
 
Italy Agriculture Equipment Market Outlook to 2027
Italy Agriculture Equipment Market Outlook to 2027Italy Agriculture Equipment Market Outlook to 2027
Italy Agriculture Equipment Market Outlook to 2027
harveenkaur52
 
Latest trends in computer networking.pptx
Latest trends in computer networking.pptxLatest trends in computer networking.pptx
Latest trends in computer networking.pptx
JungkooksNonexistent
 
原版仿制(uob毕业证书)英国伯明翰大学毕业证本科学历证书原版一模一样
原版仿制(uob毕业证书)英国伯明翰大学毕业证本科学历证书原版一模一样原版仿制(uob毕业证书)英国伯明翰大学毕业证本科学历证书原版一模一样
原版仿制(uob毕业证书)英国伯明翰大学毕业证本科学历证书原版一模一样
3ipehhoa
 
Bài tập unit 1 English in the world.docx
Bài tập unit 1 English in the world.docxBài tập unit 1 English in the world.docx
Bài tập unit 1 English in the world.docx
nhiyenphan2005
 
test test test test testtest test testtest test testtest test testtest test ...
test test  test test testtest test testtest test testtest test testtest test ...test test  test test testtest test testtest test testtest test testtest test ...
test test test test testtest test testtest test testtest test testtest test ...
Arif0071
 
一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理
一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理
一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理
eutxy
 
How to Use Contact Form 7 Like a Pro.pptx
How to Use Contact Form 7 Like a Pro.pptxHow to Use Contact Form 7 Like a Pro.pptx
How to Use Contact Form 7 Like a Pro.pptx
Gal Baras
 
1比1复刻(bath毕业证书)英国巴斯大学毕业证学位证原版一模一样
1比1复刻(bath毕业证书)英国巴斯大学毕业证学位证原版一模一样1比1复刻(bath毕业证书)英国巴斯大学毕业证学位证原版一模一样
1比1复刻(bath毕业证书)英国巴斯大学毕业证学位证原版一模一样
3ipehhoa
 
JAVIER LASA-EXPERIENCIA digital 1986-2024.pdf
JAVIER LASA-EXPERIENCIA digital 1986-2024.pdfJAVIER LASA-EXPERIENCIA digital 1986-2024.pdf
JAVIER LASA-EXPERIENCIA digital 1986-2024.pdf
Javier Lasa
 
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
keoku
 
This 7-second Brain Wave Ritual Attracts Money To You.!
This 7-second Brain Wave Ritual Attracts Money To You.!This 7-second Brain Wave Ritual Attracts Money To You.!
This 7-second Brain Wave Ritual Attracts Money To You.!
nirahealhty
 
History+of+E-commerce+Development+in+China-www.cfye-commerce.shop
History+of+E-commerce+Development+in+China-www.cfye-commerce.shopHistory+of+E-commerce+Development+in+China-www.cfye-commerce.shop
History+of+E-commerce+Development+in+China-www.cfye-commerce.shop
laozhuseo02
 
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
CIOWomenMagazine
 
guildmasters guide to ravnica Dungeons & Dragons 5...
guildmasters guide to ravnica Dungeons & Dragons 5...guildmasters guide to ravnica Dungeons & Dragons 5...
guildmasters guide to ravnica Dungeons & Dragons 5...
Rogerio Filho
 

Recently uploaded (20)

Bridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptx
Bridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptxBridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptx
Bridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptx
 
一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理
一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理
一比一原版(CSU毕业证)加利福尼亚州立大学毕业证成绩单专业办理
 
The+Prospects+of+E-Commerce+in+China.pptx
The+Prospects+of+E-Commerce+in+China.pptxThe+Prospects+of+E-Commerce+in+China.pptx
The+Prospects+of+E-Commerce+in+China.pptx
 
Comptia N+ Standard Networking lesson guide
Comptia N+ Standard Networking lesson guideComptia N+ Standard Networking lesson guide
Comptia N+ Standard Networking lesson guide
 
急速办(bedfordhire毕业证书)英国贝德福特大学毕业证成绩单原版一模一样
急速办(bedfordhire毕业证书)英国贝德福特大学毕业证成绩单原版一模一样急速办(bedfordhire毕业证书)英国贝德福特大学毕业证成绩单原版一模一样
急速办(bedfordhire毕业证书)英国贝德福特大学毕业证成绩单原版一模一样
 
1.Wireless Communication System_Wireless communication is a broad term that i...
1.Wireless Communication System_Wireless communication is a broad term that i...1.Wireless Communication System_Wireless communication is a broad term that i...
1.Wireless Communication System_Wireless communication is a broad term that i...
 
Italy Agriculture Equipment Market Outlook to 2027
Italy Agriculture Equipment Market Outlook to 2027Italy Agriculture Equipment Market Outlook to 2027
Italy Agriculture Equipment Market Outlook to 2027
 
Latest trends in computer networking.pptx
Latest trends in computer networking.pptxLatest trends in computer networking.pptx
Latest trends in computer networking.pptx
 
原版仿制(uob毕业证书)英国伯明翰大学毕业证本科学历证书原版一模一样
原版仿制(uob毕业证书)英国伯明翰大学毕业证本科学历证书原版一模一样原版仿制(uob毕业证书)英国伯明翰大学毕业证本科学历证书原版一模一样
原版仿制(uob毕业证书)英国伯明翰大学毕业证本科学历证书原版一模一样
 
Bài tập unit 1 English in the world.docx
Bài tập unit 1 English in the world.docxBài tập unit 1 English in the world.docx
Bài tập unit 1 English in the world.docx
 
test test test test testtest test testtest test testtest test testtest test ...
test test  test test testtest test testtest test testtest test testtest test ...test test  test test testtest test testtest test testtest test testtest test ...
test test test test testtest test testtest test testtest test testtest test ...
 
一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理
一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理
一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理
 
How to Use Contact Form 7 Like a Pro.pptx
How to Use Contact Form 7 Like a Pro.pptxHow to Use Contact Form 7 Like a Pro.pptx
How to Use Contact Form 7 Like a Pro.pptx
 
1比1复刻(bath毕业证书)英国巴斯大学毕业证学位证原版一模一样
1比1复刻(bath毕业证书)英国巴斯大学毕业证学位证原版一模一样1比1复刻(bath毕业证书)英国巴斯大学毕业证学位证原版一模一样
1比1复刻(bath毕业证书)英国巴斯大学毕业证学位证原版一模一样
 
JAVIER LASA-EXPERIENCIA digital 1986-2024.pdf
JAVIER LASA-EXPERIENCIA digital 1986-2024.pdfJAVIER LASA-EXPERIENCIA digital 1986-2024.pdf
JAVIER LASA-EXPERIENCIA digital 1986-2024.pdf
 
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
 
This 7-second Brain Wave Ritual Attracts Money To You.!
This 7-second Brain Wave Ritual Attracts Money To You.!This 7-second Brain Wave Ritual Attracts Money To You.!
This 7-second Brain Wave Ritual Attracts Money To You.!
 
History+of+E-commerce+Development+in+China-www.cfye-commerce.shop
History+of+E-commerce+Development+in+China-www.cfye-commerce.shopHistory+of+E-commerce+Development+in+China-www.cfye-commerce.shop
History+of+E-commerce+Development+in+China-www.cfye-commerce.shop
 
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
 
guildmasters guide to ravnica Dungeons & Dragons 5...
guildmasters guide to ravnica Dungeons & Dragons 5...guildmasters guide to ravnica Dungeons & Dragons 5...
guildmasters guide to ravnica Dungeons & Dragons 5...
 

Atmosphere Conference 2015: What we've learned from writing dozens of polyglot micro services

Editor's Notes

  1. I’m going to open with a challenging statement. Why do we make it? Because it’s our stand for making software that works.
  2. All sorts of studies show that we’re pretty bad at shipping software. And, one of the reasons why is that the natural progression of software is towards tight coupling. It’s in our nature. We start typing and building. When you’re under deadline or other pressures, you go for expediency. By the time it’s obvious that you need to break things apart, it’s to late.
  3. When things get large and brittle, deployment gets scary. What was easy to ship becomes hard. And, in a strange self-reinforcing way, the more you avoid deployment, the scarier it gets.
  4. Testing is great stuff. It’s the right thing to do. But they can become their own brittle beasts, especially if you keep adding to them and don’t take out the tests that aren’t appropriate anymore. We’ve all seen codebases with large test suites where there are some number of tests that are always failing. That somehow becomes acceptable, even if you know that it shouldn’t be.
  5. In any monolithic system, technology upgrades become expensive and scary. Going from Ruby 1.9 to 2.0, for example. Or versions of Rails.
  6. Smart developers come along, see this, and then build abstractions on top of it all to hide it and move along. This happens a few times and you get design pattern soup. Even if you’re a proponent of design patterns, you know what I mean.
  7. Lots of non-software systems aren’t like this. We can drive around in ancient cars on modern roads, for example. And self-driving cars are going to be using those same roads soon.
  8. Biology gives us an interesting model to work with. Homeostasis is an organism’s ability to self-regulate even in the face of its own self-destructive tendencies. Balance is the key. What software equivalent is there to a cell? That’s what we want.
  9. Small pieces of granular functionality that can work with others. They can be replenished and replaced and the system continues to move on. That’s the whole point of microservices.
  10. So, to fight a slide into bad practices—or maybe as a goad into getting somewhat better, Chad, our CTO, established these simple rules during the building of Wunderlist 3.0 backend. Do it. Deploy it. Go go go.
  11. We use technologies where we can make things so small that tests might even be considered to be optional, certainly after your done developing the code. If we can make services so small that any programmer can read them over coffee, then they can be replaced with something in another language quickly.
  12. We believe that code should document itself. All of us know how easy it is to mentally filter out comments in code. Heck, syntax highlighting makes it trival. If you have to comment simple code to understand it, you’re doing it wrong.
  13. This may be controversial to some, but we believe that if you spend more time in tests to make them work than on the system you’re building, there’s a bigger problem.
  14. We used to have one huge database for everything. Now we have dozens. This means we can change tech from MySQL to Postgres or even to something else for any single service at will with no other services caring. The only thing we lose is foreign key constraints, but we’re ok with that.
  15. We think micro services work best when the requests between them are small. And we like REST. Of course, this leads to lots of tiny requests going back and forth.
  16. Inside a data center, making lots of HTTP requests over a fast network has impact, but not enough to care about. Over the open network, however, connection setup latencies really add up and slow down a system that relies on small packets.
  17. Because of the clients we needed to support, including our web client, needed to be able to use the networking facilities at hand, we turned to HTTP websockets.
  18. Once a client establishes a connection, each request is made as an HTTP request encapsulated inside JSON. This mechanic lets us use the same client and server logic no matter whether we are using straight HTTP or the websocket connection. The addition of the request-id header lets us tie requests and responses together over the asynchronous websocket connection.
  19. Smart of you to ask. Well, it’s still on the way. We should probably roll to it sooner than later and we’ll be happy to.
  20. We’re native on every client: Web, iOS, Mac, Windows 8, Android. And on the back end, we use the tool for the job.
  21. When we launched 3.0 last summer, we had decomposed our single large Rails app into a fleet of small apps—most of the Rails based. We had some other things going on. Scala for the Websocket server. Clojure in our messaging router. We also had mostly Postgres databases, but a few others.
  22. As we’ve progressed and our traffic has scaled up, we’ve replaced many of our Rails business logic services with Scala ones. The performance pick up is massive. We’re also converting much of our data access over to Clojure. Here, we’re taking a step-by-step approach, pairing Rails write servers with Clojure based read servers. MySQL is being phased out.
  23. Does this mean Ruby on Rails is being totally phased out at Wunderlist? Not at all. We use it for production quality prototyping. The first draft of almost everything is in Ruby. Once we’ve sorted out what it should do and we see that Rails isn’t keeping up, we move on.
  24. We’ve been really impressed with both JVM languages and Go. Scala is powerful. Sometimes too much of a kitchen sink. Clojure has been an excellent fit for message distribution and CRUD operations. And Go, while it’s a bit odd in its way, is amazing for some purposes.
  25. Does this mean Ruby on Rails is being totally phased out at Wunderlist? Not at all. Our Haskell service rocks. Elixir and Erlang? Sure.
  26. Finally, we’ve found that our use of multiple languages helps us keep simple interfaces. When you write everything in Ruby, then you use monkey patching and a bunch of other things because you can. Scala to Scala, same story. Ruby to Scala forces simplicity.
  27. Where are we going from here?
  28. Right now, we manage balance in the system manually. We can see in our graphs when something is out of balance and we’ve noticed we follow the same actions. So we’ll code them and make rules so that when pressure shows up in one part of the system, balance can be automatically re-established.
  29. If we are really serious about machines being replaced all the time, then lets use instances that are cheap, but could be shut down. Currently using for workers in an auction based system. Maybe soon rolling to HTTP responders. Inspired by Pintrest’s work on this.
  30. Some parts of our infrastructure are based on Akka and we’re really happy with the way that actors work. In fact, the most robust parts of our system are implemented as actors. What if we made our basic data types actors? We’re really interested in where things like Project Orleans are going with virtual reliable actors. Really, if you get to the core of what an Actor is and what messaging is and how it relates to how we build our systems, you get to a pretty universal truth somewhere down there.
  31. Obviously we have lots of freedom on the server side, but how far can we push it on the client side? How about a client whose components only communicated on a message bus? Or an Android client that used separate Services? What if we broke everything down into small messages passed around via NSOperation on Mac and iOS?
  32. Now that we’ve learned how to run a massively polyglot immutable infrastructure, what happens if we try to take some of those lessons and build up somewhat bigger services? Maybe even a monolith that’s different. Whoever said that micro services were a poor mans implementation of a good Erlang actor system is probably right. Maybe there are other ways to force simplicity that we should look at. Other forcing functions that do what multiple languages do for us now.
  33. Finally, a lesson from XP: If something is hard, do it often and get good at it.
  34. Questions????