Rebuilding Wunderlist Using Microservices

| by Jan Stenberg Follow 38 Followers on Nov 08, 2014. Estimated reading time: 2 minutes |

After spending years doing big rewrites and seeing how much time people spend building software that they throw away, Chad Fowler at the GOTO Berlin Conference declared that he believes we should be thinking of legacy as something positive that we want to leave for coming generations, not as a bad thing that is so common today.

When Chad joined 6Wunderkinder, the company behind Wunderlist, as CTO, he saw a large monolithic Rails application, a large monolithic database and a monolithic deployment process. One of the big problems contributing to building monoliths that Chad sees is that we let it grow and as it gets more complicated we build abstractions around it, trying to maintain that one growing thing. If we instead want to keep things separate and replaceable, Chad thinks we must bring in some level of decoupling by making everything heterogeneous, and this has led him into a Microservices architecture.

Instead of rewriting the whole system they begun building new functionality implemented as new services. At the same time they started prototyping for a new system and also worked with splitting the large database into smaller databases including migration of all data. After all this work they had proof that the new architecture would work and they then did a big rewrite creating a whole new architecture for the backend and partially for the clients. This did work, even though Chad is not proud of that.

In their new architecture all requests come in through a top-level server, a web-socket server accepting requests from the web browsers then streaming content back as it becomes ready. Below there is a more traditional HTTP server that deals with authentication and authorization at one level. Chad notes that these first two layers are fundamental, when breaking a system up into a number of services you still need one way to talk to the system. They today have around 60 services making up the system backend and they found it important to expose one API instead of forcing developers using the API having to considering these 60 services figuring out where to find certain functionality.

Inside these two top layers they have two inner layers of services, one with no database connection whatsoever where a check is made that a user is allowed to perform the request, and a second layer which basically acts as the database. Every time a change happens a mutation record is generated with information about what changed and on which item, e.g. a task changed its title. This record is then picked up and fanned out to all services in the second layer that might be interested in the event. A risk in this is that a change might create an event that creates the same type of change, effectively creating a loop; this is avoided using aggressive monitoring.

Monitoring is for Chad extremely important in this sort of architecture and one advantage he has found when using microservices is that they make it possible to see exactly what is wrong; with a monolith it’s hard to separate out what the problem is.

The GOTO Berlin Conference 2014 is the second GOTO conference in Berlin, with around 550 attendees and 80 speakers.

Rate this Article

Adoption Stage

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Interesting... would like to have heard more detail on the types of micro-services by Kishore Reddy

Interesting.... i had a feeling that todo lists are deceptively complex, especially when factoring in collaboration, sharing/ownership, change management, backups, offline mode, etc. However, it still seems that 60+ micro-services sounds like a lot.

It would be good if the article discussed some of the purposes of the micro-services.

Re: Interesting... would like to have heard more detail on the types of mic by Jan Stenberg

Chad didn't go into the details of all services, he just mentioned a few examples like tasks and lists. Maybe there are some blog posts that will reveal more.


How about communication between services by Ye James

Thank you for the post!

Would like to know more about how they handle inter-service communication.

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

3 Discuss

Login to InfoQ to interact with what matters most to you.

Recover your password...


Follow your favorite topics and editors

Quick overview of most important highlights in the industry and on the site.


More signal, less noise

Build your own feed by choosing topics you want to read about and editors you want to hear from.


Stay up-to-date

Set up your notifications and don't miss out on content that matters to you