Automate deployment - even for small systems
One of the clients who I have been working for in the last few weeks has far more automated deployment than the others. It makes a huge productivity difference. This was not only because it was one of two server migrations I did, although that did make the difference starker, it was the continual time savings.
The client is question has scripts (using Fabric). They handle server setup (from a bare OS install) but, more importantly, deployment is scripted.
The initial aim of the scripts was to make deployment reproducible, so we could recover faster in an emergency. In practice, this has not been the biggest benefit. Being able to to spin up the new server faster was a benefit. Knowing it was going to work smoothly was reassuring.
What makes the big difference is that every time I deploy an update, its a single command issued locally. It reduces human error, and is faster. Its just a little thing each time, but when actively working in code that requires frequent updates to test/staging and occasional updates to production it all adds up.
Automating deployment is, in my view, rather like version control. If you have never used it you do not really understand the advantages, but once you do you always want to use it.
Like version control its also a tool that is too useful to ignore. Failure to use it is a sign of a lack of professionalism and competence. Maybe its reasonable to skip it for small and infrequently updated projects, but, if in doubt, automate. It will eventually pay off.