Do you know that in Heroku you can enter a single command and have your Django project deployed for you? If there are services that have commoditized deployment, why should you care about nginx, Apache, PostgreSQL, Gunicorn, systemd, and all that, and don’t you spend your time and grey matter on something more useful?
I asked the question both to myself and to my readers, and here are my conclusions, in no particular order:
- Some customers have a policy to use their own infrastructure.
- Sometimes there is a preference or policy for deploying on infrastructure hosted in a specific country; for example, I have deployed a Greek national project which had to be hosted in Greece.
- Sometimes it’s cheaper to deploy yourself than to deploy on Heroku, even if you take into account the time required to learn/do it.
- If you use a deployment service like Heroku you have vendor lock-in.
- If you deploy yourself you can be more flexible if your needs change.
- Students learn about compilers and build primitive processors not because they will work in compilers or in hardware, but because the increased understanding of their tools helps them be a better engineer. Likewise, you need to understand Django deployment in order to be a better developer. In fact, that’s exactly how the term “DevOps” came to be.
- You can get away with not knowing how a compiler works or how your hardware works because these things are very mature and you can treat them as black boxes. In deployment, this is not true. At some point the abstraction will likely leak and you’ll need to know what’s going on behind the scenes.
Many thanks to my readers.
Note: The phrase “at some point the abstraction will likely leak and you’ll need to know” is courtesy of Martin Fowler. I couldn’t have phrased it better.