Straight off the bat I would make something clear: I have a lot of respect for software and web developers. Being able to write clean, intelligent and efficient code is certainly one of the more difficult aspects within this industry. With this in mind, I think that anyone who is able to write a consistently high level of code based on often sketchy requirements and delivering this within the usual time pressures of business should be awarded some kind of medal.
That said, I can say with some confidence that we have the pleasure of working with some of the very best software and web developers both locally here in Australia as well as abroad.
Further to this, I can also add quite unreservedly that software developers really don’t make good system administrators.. And can you really blame them?
Allow me to elaborate a little bit here; As you may have already guessed from the above few paragraphs, software development is tough. Being a good software developer is even tougher. Under the pretty exterior of most websites there an awful lot of work that goes into making the sites work. Pulling this together requires a fair amount of consideration through-out all aspects of the software development process, from getting requirements and designing the application through to writing the code, testing, debugging and forever trying to squash that final elusive bug. It takes someone with a fairly specific skill-set to be able to do all this and to do it well.
Something that I’ve noticed however, is software developers are sometimes expected to take on the role of server management and look after the on-going running and maintenance of the machine. Whilst I can appreciate there’s a similarity between what a software developer and a system administrator does, “hey, they both do ‘computer stuff'”, the tasks which are completed by each roles are worlds apart. A software developer really only cares about getting his or her application working within a specific environment the quickest way possible. This can sometimes mean that there are some rather drastic changes to the machine configuration with little consideration to the potentially negative implications. This is pretty understandable, as far as they’re concerned, once they get the environment working with their application then they can just continue hacking away on their code. Given they are probably under other tight deadlines or would just simply be preferring to get on with what they’re actually being paid to do without much consideration for the longevity and maintainability of the operating system environment.
This is something we see a lot of; from developers downloading source tarballs then compiling and installing software system-wide to running bleeding edge versions of software which just aren’t suited to being in production.
To give an example of an incident recently which has prompted this post, we had a client call up complaining that they couldn’t get their postgresql database to start. Whilst this was not on our fully managed service, we are always willing to help out or clients on a professional consulting basis. Upon logging in we attempted to start postgresql and witnessed it failing without too many clues as to what’s doing on. Further investigation revealed the following in the postgresql startup logs:
FATAL: database files are incompatible with server
DETAIL: The database cluster was initialized with CATALOG_VERSION_NO 200812281, but the server was compiled with CATALOG_VERSION_NO 200904091.
Further digging revealed that postgresql had recently been updated.. 14 hours ago to be precise. Subsequent to this the database engine had been stopped and then failed to start again. The client in question actually uses this machine as a mail exchange for his clients and uses a postgresql back-end to manage the mail tables. This means that for the duration of the outage, no email was working for any of the clients on the machine. Yes, for 14 hours. Ouch.
Once we had found the problem, all we needed to do was roll back to the previous version start up postgres and everything would be hunky-dory, right? Well.. Easier said than done.
In this case, the software developer had installed what appears to be a development version of postgresql which was (as the error message alludes to) released in January 2008. That’s ok, we should just be able to reinstall the previous version from the RPM on the machine, right? Wrong. Didn’t exist.
At this point in time we started to do a quick google and checking the postgresql website to see if they perhaps, just maybe, had a copy of this daily development release somewhere on the website. No joy there…
I know! We take backups for any clients who chose to use our managed backup solution, and this client has opted for this service! As part of our managed backups we roll-out an automated process to take a dump of all the databases and store locally on the disk! Given this happens at midnight each night and the database stopped running at 8pm we’ll just be able to restore from the database dumps right? Wrong. We didn’t install postgresql and there is no process in place to do this.
So at this point in time, the dataset was still there but effectively useless and mail services were still down. Fortunately, we were able to save the day by restoring all the binary files from this specific version of postgresql from backups and thus restore services for the client. Whilst the motivation behind using this specific version is unknown, the software developer has since moved on and there is zero documentation. This situation really shouldn’t have happened in the first place. This type of problem is actually something that we see more often then you would imagine. We often have developers requesting specific versions of software to use in a production environment. Obviously, we would strongly, strongly discourage the use of development versions within production (they’re called DEVELOPMENT versions for a reason, they simply haven’t been around long enough to be considered stable, reliable software). However, from time to time a specific feature or bug fixes within a specific development version which dictates we must install such a version. This is something we can certainly get working… And, most importantly, keep the machine in a maintainable state! This means having supporting documentation as to the decisions made as well as making sure that routine maintenance tasks will not break the existing, carefully crafted configuration.
I also have another fond memory of a web developer who was having some niggling problems with tomcat and permissions and figured that the best way to solve the problem was using:
chown tomcat / -R
So, it got the web application working, but broke virtually every other service on the machine. Can anyone say hosed file system permissions?
…Or how about the Windows machine which has 4, yes, 4 separate instances of MSSQL installed on it.. I digress.
Without wanting to turn this into a big marketing spiel, it is important to keep in mind that like software development, system administration can be a tough game too. Obviously in the above examples using hind-sight we can easily identify the problems in what was done previously on the machines. That said, at Anchor we are a team of system administrators who have been running complex systems for a long time now and have the experience to make sure that all the appropriate precautions are taken to make sure we don’t end up in these situations above.
Further to this we have numerous systems in place to pro-actively check services including database servers, 24/7. In the event of failure both audible and visual alerts are generated with notifications outside of hours being sent via SMS message service. Even in the event that this happened on a fully managed machine it would never have resulted in 14 hours down time. All said, I am not just trying to blow our own horn about how fantastically brilliant we are (ok, maybe, just a little), but what I am trying to get across is system administration is something that really requires an all or nothing attitude towards. If your website or associated hosting infrastructure is critical to your business’ success then making sure the commitment to system management is commensurateable is absolutely imperative to success. Either through outsourcing via our fully managed support pack or by hiring a dedicated system administrator. There really is no place for laissez-faire and utilising a software developer part-time for this role is only likely to cost more in the longer term.