After having spent a few weeks playing around with options concerning what platform we’d use for the Nutrun website/blog, we are very pleased to announce the launch of nutrun.com as our home on the web, “proudly powered by WordPress“.
Below I’d like to comment on the other platforms and frameworks we looked into before we decided to use WordPress, specifically in terms of their unsuitability for what we were looking for.
Ruby on Rails.
Everyone’s web app framework of choice at the moment and with good reason. One of Rail’s main successes is inevitably the well spotted pattern of Convention Over Configuration. And this is my main problem with Rails. Just a bit too much convention over configuration. Sure, starting up a new application and having something impressive working in no time is a really great feature, but after working for a slightly significant period on Rails powered applications, I kind of mind the fact that Rails imposes the Rails way on you. This is by no means set in stone, but customizing standard Rails functionality slows development down a lot and makes things a lot more painful than what you’re initially led to believe when you have something that would take you 2 weeks of coding in Java just by typing ‘generate scaffold…’ twice and writing some CSS. Another thing that puts me off in regards to all the buzz covering RoR at the moment is the whole Simple UI theme, which, to me, sometimes sounds like a nice marketing plot for selling poorly featured applications as something that is easier and thus better to use.
Django
Similar to RoR, Django is very impressive when it comes to those first steps that, let’s face it, usually constitute 80% of most web applications. And the admin interfaces you get for free are too graceful to be ignored. Keeping in mind, though, that Django was written with a very specific kind of use in mind, you are bound to find it a bit too restrictive when it comes to that crucial 20% of the application. Another problem I had when dealing with Django was the fact that I had to patch the codebase many a time, as it is buggy. And the fact that the Django codebase is a little bit messy didn’t help either. It would be unfair, however, not to mention that making something ‘blogable’ is Django is only one line of code away. Django is going to be a really great framework for building online publication websites, and it will most probably be number one on my list if I have to write a site for a newspaper two years from now. I have also seen Django applied as a great tool to functionally mock out applications in no time. But that hardly makes a framework, and the fact that it’s talking to a database doesn’t make it that different from Adobe Image Ready, when it comes to the not-so-programming-savvy clients you’re presenting the demos to.
Java
Next on the list, as a natural choice after feeling restricted by the last two candidates, was a full blown Java app, powered by WebWork, Spring, FreeMarker, Jetty, XStream and… You get the picture… The list of dependencies goes on and on and on. First smell was the fact that even before I started, the application was nearing a whopping 10Mb. 10Mb for a simple blog has got to be too much. The code I wrote for the Java version of Nutrun was by far the most elegant one and I’m sure it would be the most maintainable and extensible one if it all came down to that. The fact that I spend most of my time coding in Java for work must have something to do with that, too, although I still think that all this attention in architecture in Java plays a big part to really nicely laid down code. But we all know by now that Java is just not the right tool for simple web applications, and I don’t even know any more why I even attempted to go that way. The problem with Java are its frameworks and the Servlet spec that ties you to something like Tomcat or Jetty (in the best of cases), amongst other things. But that’s the subject of a whole different post.
In our quest to find the most suitable engine to power our website, I forgot one very crucial thing common amongst most attempts to software and that is Systems Integration. Systems Integration is what Web Services and REST and Networks and ultimately software business value is all about. When we’re talking about code reuse, sure libraries are fine, but how often are they as important to a business, or even a day to day simple software task, as it is every time you fire up Apache and some things work straight away with it? And talking about Systems Integration, here’s a great example:
A Debian Sarge server, one apt-get command, a few create database statements, 3 setup screens after untaring the WordPress distribution in the Apache web directory and a few hours of configuring and styling.
What do we get? A lightweight, fully featured, customizable, with a very intuitive UI application, that supports all the popular syndication specifications, Valid XHTML, pretty URLs, multi user support, which plays great with MarsEdit out of the box and I haven’t even started yet… One might argue that we didn’t actually write something in PHP, but that is because we didn’t have to. And until there’s a Rails app that does what WordPress does, LAMP will be the winner in my list.
The main lesson learned is never to undermine the importance of Systems Integration and to indeed be skeptical against factors of ‘cool’. Systems are only mature after at least a couple of years of serious development has been dedicated to them. WordPress and LAMP in general are definitely not the coolest kids in town, but I’d be really interested to see a Rails or Django implementation of an app that gets close to WordPress in terms of functionality, ease of use and performance. And I won’t even go into Java….