Contribute Media
A thank you to everyone who makes this possible: Read More

Split Up! Fighting the Monolith


Patrick Mühlbauer - Split Up! Fighting the Monolith [EuroPython 2016] [22 July 2016] [Bilbao, Euskadi, Spain] (

Having to deal with a monolith, an application which became far to big over the time, can be quite bothersome. On the other hand if you split it up and have to deal with lots of smaller components, you might end up in dependency hell. But not only the splitting of the monolith and the management of the dependencies afterwards can be a problem, but also the packaging of you python components itself.

Do you know this situation, where you and your team are facing this big monolith? An application which has grown far too big over the years. Every time when you make a change, you have to fear the code might break at a totally different place, because lots of things are closely intertwined. But what to do if you are at such a point? Maybe you start thinking about microservices but then questions like "Are they really the right thing for us?" and "How do we get there?" arise.

In my talk I will show you how we are dealing with our monolith. A collection of multiple python packages without clear boundaries, forming the actual application - all living in a single monorepo.

I will talk about how we split up the whole thing, making it more flexible for us and also easier to use individual components by other teams. All this, of course, comes with a price: You have to think more about the dependencies between you components. You have to think about how you can efficiently test everything, making sure your final application is still working correctly. Don't loosing yourself in dependency hell and packaging all components correctly becomes quite a challenge.

This talk will:

  • show you bad patterns to avoid, so that you don't end up in the above situation in the first place
  • give you ideas what to consider when tackling your monolith
  • explain how to package your python components and how to mange your dependencies
Improve this page