When I first go into software, it was a lot of fun to try out as many things as possible during each project. This meant that my tiny blog was based on Django (with its dozens of dependencies), Gunicorn, and a full-fledged database server (postgres). But the cost to maintain (update, service, re-tweak) all that was too damn high! So over a series of moves, my blog is a bunch of static HTML files served by nginx; these files are compiled by a python script that probably gets 0.5 commits per year on average.
That site and a few others I host on the same Ubuntu server get backed up using a simple cronjob that fires off a bash script. In case the server disappears, which has happened to me once, I have another cronjob, this one running on a raspberry Pi at home, that uses SSH to download the backups. Recently, anything I’ve added to the Pi, I’ve coded up in Ansible first. It’s a little extra cost up front, but then I can reproduce the setup by running one command.
Apart from actual dependencies, I think it’s important to have the least number of “mental” dependencies. For example, working with files instead of a database not only cuts out the need for maintaining a database, but also for thinking in database terms—ie. no need to re-learn/google for obscure admin commands that you run once a year etc.
When I first go into software, it was a lot of fun to try out as many things as possible during each project. This meant that my tiny blog was based on Django (with its dozens of dependencies), Gunicorn, and a full-fledged database server (postgres). But the cost to maintain (update, service, re-tweak) all that was too damn high! So over a series of moves, my blog is a bunch of static HTML files served by nginx; these files are compiled by a python script that probably gets 0.5 commits per year on average.
That site and a few others I host on the same Ubuntu server get backed up using a simple cronjob that fires off a bash script. In case the server disappears, which has happened to me once, I have another cronjob, this one running on a raspberry Pi at home, that uses SSH to download the backups. Recently, anything I’ve added to the Pi, I’ve coded up in Ansible first. It’s a little extra cost up front, but then I can reproduce the setup by running one command.
Apart from actual dependencies, I think it’s important to have the least number of “mental” dependencies. For example, working with files instead of a database not only cuts out the need for maintaining a database, but also for thinking in database terms—ie. no need to re-learn/google for obscure admin commands that you run once a year etc.