Many Django applications start as monolithic apps, the next step is often to break these out into individual Django apps in a larger project. This is a great step, but still requires you to use code as your contract you talk across. As teams scale before 5-6 people this introduces complexity and often many bugs over time. The effective way to continue to scale teams is to define services that talk across defined API’s and data contracts. This allows you to iteratively version services and continue to improve them while still supporting backwards compatibility.