In the influential paper "Out of the Tarpit", Moseley and Marks argues that "complexity is the single major difficulty in the successful development of large scale software systems". In this talk, we will analyze the major sources of "accidental" complexity a Django project faces over time, and what the major methods to deal with them are. The major tools we have in reducing complexity are reducing state and increasing abstraction skills.
The talk will start with generally accepted methods in Django software development and touch on separating a project into multiple apps, relying on managers to implement collection level functionality, making use of decorators for cross-cutting concerns and adding methods to models (but bewaring the perils of fat models). We will discuss how to separate the roles of models with mixins so that functionality can be reused across models. We will discuss how functional programming techniques can be employed in a Django project to reduce complexity.