A long time ago, my housemate (who is one of the only people who reads this – Hi, Kurt!) had this great explanation for why his homework wouldn’t compile: “It was perfect, so I fixed it.” Man, that so describes every programmer I’ve ever worked with. (Incidentally and orthogonal to the point of this post, I suspect that this attribute of programmers coupled with the increase in the global number of active programmers accounts for so much of the frustration I experience with software nowadays.)
So, I glued together a tool chain for building the band music binder for the Silicon Valley Pipe Band. We save the music as ABC files in a repo on GitHub; a TeamCity server in EC2 pulls the changes and builds the PDF files, then uploads them to our folder on Box; and GitHub and TeamCity notify our Slack group of the activity. Which is all a great example of using existing tools to do the job. I got it up and running quickly with a minimum of debugging and it just works. So, it’s perfect. And now I want to fix it.
For starters, TeamCity is freaking huge. It can’t run on a free-tier EC2 instance, and it requires a database as well. So, I have to pay Amazon about 20 bucks a month. Not a huge deal, but the band only gets money from performances (and donations) and so this amounts to a $240/year donation to the band. Sure, I can swing it, but if I get hit by a bus, who’s to say that someone else will pick up that slack?
Meanwhile, I just noticed that TeamCity has an upgrade. Trying to install the update fails because the instance I’m using doesn’t have enough free disk space. Golly! 1.03 gigabytes of update!
Clearly, TeamCity has a huge suite of capabilities that we’re not using. We don’t need to run tests, we don’t need a federation of worker bees grinding away doing continuous integration, and we don’t need all the whiz-bang plugin capabilities. We just need to handle a push notification from GitHub, pull master/HEAD and run a couple of shell scripts. I bet that can all be accomplished in way less than a gigabyte of object code. Something tells me that a few kilobytes of Perl and an NGINX process could handle this.