Dec 28

Trending Toward Simplicity

I find it very interesting that as we enter 2011, and buzzwords like Web 2.0 and HTML5 are sounding like yesterday's news, both programming and design are trending more and more toward minimalism. In particular, I have noticed that many programmers and bloggers are now opting for static website generation in lieu of large, dynamic systems built on top of Ruby, Python, and PHP.

In the past, I have played around with Wordpress, Movable Type, Drupal, Joomla, Byteflow, Geeklog, Django-Mingus, and a handful of others, and the one aspect of all of these systems that kept coming back to haunt me was maintainability. I would invariably want to customize the system by adding some basic functionality I needed and hiding a ton of other features that I didn't need. This was easy enough to do at first, but maintaining these changes after each and every system update was truly an exercise in patience. Some software needed to be updated way too often due to security issues. Others stagnated while their dependencies changed and grew. And in addition to keeping the website software itself up-to-date, I had to keep my eye on Apache, MySQL, PostgreSQL, PHP, mod_wsgi, Python, Ruby, and countless small gems and modules.

Another aspect of these systems that always concerned me was scalability. I either had to find a complex system of intertwining caches to make my site even more convoluted, or I had to come to grips with the fact that being linked to by Daring Fireball, Reddit, Hacker News, or Digg would probably bring my webserver to its knees.

So I recently began to ask myself if my website was really complex enough to warrant any of this hassle. I really only have a handful of blog posts and standalone pages, as well as a few files I want people to be able to download. With DISQUS handling comments, I couldn't think of any content I wanted to serve up that was truly dynamic. Even though static website generation has been around forever, it seems to be gaining more and more popularity, lately, probably due to some of the issues I have mentioned above. So that is when I decided to check out Jekyll.

Now I know there are a ton of alternatives out there, but I largely decided to go with Jekyll because it is simple and yet does everything I currently need. And because so many of these static website generators seem to be founded on the same basic principles, it should be relatively easy to transfer my templates and content from one to another if I ever decide to switch. Well, at the very least it should be easier than any of my prior migration efforts.

Moving to Jekyll was relatively painless. I basically threw together a few templates, touched up my existing blog posts (which were all written in HTML or Markdown), and ran the jekyll command. There is something incredibly satisfying about knowing how each and every piece of HTML on your website was created, and knowing that you can tweak everything easily and painlessly without having to worry about upgrade issues. That's just the benefit you get with something as simple and easy to grok as Jekyll. And other than my webserver, there is nothing to keep up-to-date! No big upgrades looming around the corner that will force me to reimport my data or migrate my template changes or reapply my software tweaks. And there are a number of other benefits that immediately became apparent, as well:

1. Adding new pages is a snap. Doing something as basic as adding a sitemap.xml file or tweaking an RSS feed seems to be a difficult task in many of these pieces of blog and CMS software. They either do way too much and are difficult to modify or they do way too little and you end up writing a complicated plugin to do something very basic. Creating a site map and RSS feed for my new site took less than five minutes.

2. Defining custom metadata fields for things like HTML keyword and description tags is painless. I define the variable at the top of each blog post and then just reference it in a template file. So fast! So easy! And it should be for something so basic. I can now do something in minutes that used to take me much, much longer.

3. My content, templates, and everything else related to my website all reside together and are version controlled together in the same Git repository. I find this to be a wonderful benefit. Before, my content was rarely version-controlled, and when it was, it used some custom, database solution implemented by the blog or CMS. Having these as just regular old files in a Git repository is a wonderful breath of fresh air. And maybe I'm just getting old and crotchety, but I kind of like editing these posts in a basic text editor instead of using a fancy, blinking administration page on my website (though I have seriously considered using MarsEdit, and probably would have tried it recently if it worked with Django-Mingus).

In general, I find the simplicity of Jekyll extremely compelling. I guess the real question will be the test of time. Will it be more maintainable than anything else I have used before? My gut says it will.