Domain Driven Design For Python
When your software projects start to scale it becomes a greater challenge to understand and maintain all of the pieces. In this episode Henry Percival shares his experiences working with domain driven design in large Python projects. He explains how it is helpful, and how you can start using it for your own applications. This was an informative conversation about software architecture patterns for large organizations and how they can be used by Python developers.
- Hello and welcome to Podcast.__init__, the podcast about Python and the people who make it great.
- When you’re ready to launch your next app or want to try a project you hear about on the show, you’ll need somewhere to deploy it, so take a look at our friends over at Linode. With 200 Gbit/s private networking, scalable shared block storage, node balancers, and a 40 Gbit/s public network, all controlled by a brand new API you’ve got everything you need to scale up. And for your tasks that need fast computation, such as training machine learning models, they just launched dedicated CPU instances. Go to pythonpodcast.com/linode to get a $20 credit and launch a new server in under a minute. And don’t forget to thank them for their continued support of this show!
- And to keep track of how your team is progressing on building new features and squashing bugs, you need a project management system designed by software engineers, for software engineers. Clubhouse lets you craft a workflow that fits your style, including per-team tasks, cross-project epics, a large suite of pre-built integrations, and a simple API for crafting your own. With such an intuitive tool it’s easy to make sure that everyone in the business is on the same page. Podcast.init listeners get 2 months free on any plan by going to pythonpodcast.com/clubhouse today and signing up for a trial.
- You listen to this show to learn and stay up to date with the ways that Python is being used, including the latest in machine learning and data analysis. For even more opportunities to meet, listen, and learn from your peers you don’t want to miss out on this year’s conference season. We have partnered with organizations such as O’Reilly Media, Dataversity, and the Open Data Science Conference. Coming up this fall is the combined events of Graphorum and the Data Architecture Summit. The agendas have been announced and super early bird registration for up to $300 off is available until July 26th, with early bird pricing for up to $200 off through August 30th. Use the code BNLLC to get an additional 10% off any pass when you register. Go to pythonpodcast.com/conferences to learn more and take advantage of our partner discounts when you register.
- Visit the site to subscribe to the show, sign up for the newsletter, and read the show notes. And if you have any questions, comments, or suggestions I would love to hear them. You can reach me on Twitter at @Podcast__init__ or email firstname.lastname@example.org)
- To help other people find the show please leave a review on iTunes and tell your friends and co-workers
- Join the community in the new Zulip chat workspace at pythonpodcast.com/chat
- Your host as usual is Tobias Macey and today I’m interviewing Harry Percival about domain driven design and enterprise application architecture in Python
- How did you get introduced to Python?
- Can you start by explaining what "application architecture" is and how it compares to the types of application designs that Python developers and teams typically rely on? how does it contrast with "enterprise architecture"?
- What are the influences that tend to lead engineers into sub-optimal architectures and how can they guard against them?
- One of the core concepts in this problem space is that of "domain driven design". Can you unpack that term and explain the benefits that it provides to software architecture?
- What are some of the other concepts that are common among application architecture patterns?
- What are some of the common points of confusion among engineers who are first working with DDD?
- Is there any particular size or scope of project and organization that merits the approach of domain driven design or is it applicable even at small scales of complexity and team size?
- Now that we’ve convinced everyone that they should be using DDD can you talk through the steps involved in identifying and encapsulating the various implementation details that they will need to work through?
- How does that process change when dealing with an existing application as opposed to a "greenfield" project?
- How do Python language constructs and libraries impact the approach to implementation of application architecture patterns as compared to more traditional "enterprise" languages such as Java and C#?
- What are some of the architectural anti-patterns to watch out for when implementing DDD?
- On any given team, who is responsible for identifying and ensuring adherence to proper architectural principles?
- Are there any publicly visible projects that implement DDD which listeners can look at and learn from?
- To help Python developers in their efforts to learn and implement DDD and other aspects of enterprise architecture you have been working on a book. Can you talk about your motivation for that undertaking, what listeners can expect to learn when the read it, and any challenges that you have encountered in the process?
- What are some trends in terms of system design and architecture, or technology influences, that you are keeping an eye on?
Keep In Touch
- Dragon Pearl by Yoon Ha Lee
- Why We Sleep: Unlocking The Power Of Sleep and Dreams by Matthew Walker PhD
- Obey The Testing Goat
- Python Anywhere
- XP (eXtreme Programming)
- Dive Into Python
- Domain Driven Design
- Design Patterns
- Gang Of Four Book
- MVC (Model View Controller)
- "Uncle" Bob Martin
- Clean Architecture book
- Python LEAP Book
- Dependency Injection
- Inversion Of Control
- Test Pyramid
- Gary Bernhardt
- Harry’s Blog
- The "Blue" Book by Eric Evans
- Gartner Hype Cycle
- The Clean Architecture In Python by Leonardo Giordani
- DRY Python