In Python, we don't talk much about design and architecture. Instead, we focus on frameworks and libraries. We let them define the architecture of our applications and leak into the business logic and tests. Rather than putting them aside, we couple to them so much that when we decide to change them, we need to rewrite almost all of the code base from scratch. We do the same with database, putting it in the center of the architecture, which makes the tests hard to write, fragile and either very slow or littered with monkey- patching.In this talk, I will show you how to design architecture which will make your code much easier to test and maintain. You will learn how to decouple the infrastructure from business logic and be prepared for future changes.