Deploying
Deploy early and often. Something trivial on day one, before the features exist. Deployment is where the surprises live, and you want to meet them one at a time rather than all at once the night before you need the link.
Migrations run as part of deploying, not by hand afterwards and hoping. Static files actually served, because Django does not serve them with DEBUG off. Environment variables set on the host, not in a file in the repository.
Then test the deployed thing, not the local one. Refresh on a deep link and confirm it is not a 404. Open it on a phone on mobile data. Check the console. Switch the network off mid-request and confirm the error state appears rather than a spinner that never resolves. Create a brand new account and go through first-run as a stranger would.
That last one is the test nobody runs on their own project, and it is the one that finds the embarrassing problems.
Mark this lesson complete
Signed in, your progress follows you to every device.