A set of probing questions I use when reviewing a fellow developer's work.| David Seddon
Django's transaction.atomic context manager is an important tool for maintaining data integrity. But its guarantees are frequently misunderstood.| David Seddon
Design is crucial to good software development, but many people lack a process for doing it. In this blog entry, I explain the three step process I use.| David Seddon
Inversion of Control, in which code delegates control using plugins, is a powerful way of modularising software. It may sound complicated, but it can be achieved in Python with very little work. Let's examine three different techniques for doing this.| David Seddon
Python is a wonderful language that is a joy to develop in. But I've found that projects written in Python can easily grow into an unmaintainable mess. Keeping a code base maintainable, particularly when it's large and complex, is difficult.| David Seddon
Inversion of Control is a principle for improving the modularity of software. It's a powerful strategy for simplifying systems that might otherwise become tangled and difficult to understand.| David Seddon
Without a planned structure, larger Python projects can become a complicated web of interdependencies. The Rocky River is an architectural pattern to help make larger projects easier to work with.| David Seddon
A tool for imposing architectural constraints on your Python projects.| David Seddon
Apps are a fundamental concept in Django. But what exactly are they and when should we use them?| David Seddon
Django signals are a great way of communicating between your apps. But they are often misused. Find out what signals are for, when to define your own, and when to avoid them.| David Seddon