Blog

Blog post
The trouble with transaction.atomic

Django's transaction.atomic context manager is an important tool for maintaining data integrity. But its guarantees are frequently misunderstood.

The trouble with transaction.atomic

Django's transaction.atomic context manager is an important tool for maintaining data integrity. But its guarantees are frequently misunderstood.

19 Nov 2020
 django
The trouble with transaction.atomic
Blog post
Model, Behaviour, Code: a three step process for designing software

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.

Model, Behaviour, Code: a three step process for designing software

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.

08 May 2020
 design  architecture
Model, Behaviour, Code: a three step process for designing software
Blog post
Three Techniques for Inverting Control, in Python

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.

Three Techniques for Inverting Control, in Python

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.

03 Aug 2019
 python  architecture  factoring  inversion-of-control  dependency-injection
Three Techniques for Inverting Control, in Python
Blog post
Meet Import Linter

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.

Meet Import Linter

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.

20 May 2019
 python  architecture
Meet Import Linter
Blog post
What is Inversion of Control and Why Does it Matter?

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.

What is Inversion of Control and Why Does it Matter?

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.

15 Apr 2019
 architecture  factoring  inversion-of-control
What is Inversion of Control and Why Does it Matter?
Blog post
A Guide to the Rocky River

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.

A Guide to the Rocky River

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.

16 Sep 2018
 python  architecture  django
A Guide to the Rocky River
Blog post
Meet Layer Linter

A tool for imposing architectural constraints on your Python projects.

Meet Layer Linter

A tool for imposing architectural constraints on your Python projects.

22 Jul 2018
 python  architecture
Meet Layer Linter
Blog post
What is a Django app?

Apps are a fundamental concept in Django. But what exactly are they and when should we use them?

What is a Django app?

Apps are a fundamental concept in Django. But what exactly are they and when should we use them?

12 Jun 2018
 django
What is a Django app?
Blog post
When to Use Django Signals

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.

When to Use Django Signals

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.

04 May 2018
 django  architecture
When to Use Django Signals
Blog post
Code Review Checklist

A set of probing questions I use when reviewing a fellow developer's work.

Code Review Checklist

A set of probing questions I use when reviewing a fellow developer's work.

27 Mar 2018
 ways of working
Code Review Checklist