Writing software used to be so simple. A giant pain in the ass, mind you, but simple. You were a Microsoft developer, with binders full of Visual Studio CDs; you were a Java developer; you used the LAMP stack; or you worked with something proprietary from IBM or SAP or the like.
Nowadays, though, while the tools and technologies we use have improved enormously…imagine, God forbid, that you’re building some sort of web service. Should you use Ruby on Rails? Node.js? Python and Django? PHP and Drupal? .NET? Any of the panoply of Java servers? Something new and cool like Go or Scala? And how/where will you host your code? Amazon? Heroku? App Engine? Joyent? EngineYard? Force.com? How about your app? You’ll have an app, right? On which platforms? Native code? Hybrid HTML5? Cross-compiled with Xamarin? And then there’s your database…
The mind gibbers and reels with analysis paralysis. It’s almost enough to make me miss the bygone days of Microsoft’s dominance. Is a mediocre standard better than an industry splintered into a dozen excellent fragments? Is a single authoritarian government better for its citizens than a dozen city-states set against one another in perpetual civil war? And, wait, isn’t better software supposed to make life simpler?
The problem is that nowadays everybody wants to be a platform–but none of the available options are obviously better than the others.
Consider Heroku. I’m a big fan of theirs. We use them for tons of projects – startups like TeePublic, Travtap, Postography, etc., and for larger clients, too. Heroku started as a Ruby On Rails service, but now they support Node.js, PHP, Python, etc. They offer a free tier. Deploying to the server is as easy as typing “git push heroku master.” Add-ons like database connections, email services, etc. etc. etc., are very nearly automagical. They’re mostly a joy to work with.
But they’re expensive; they don’t seem to scale to really large sites; every now and again you still run into some obscure and tricky configuration error that takes days to debug; and they have not exactly covered themselves in glory with their recent RapGenius controversy. It’s sad to say, but my Heroku love has been waning over time.
Then there’s Google App Engine. I love GAE. You can tell by the fact that I build all of my side pet projects — e.g. ScanVine, WikiSherpa, ePubHost — on it. It makes testing, deployment, and versioning a breeze. It makes a panoply of really powerful tools available (for example, asynchronous tasks, a headache with Heroku, are a snap with GAE; and there are experimental full-text search and MapReduce tools, too.) It used to only give you Google’s powerful-but-quirky BigTable datastore as an option, but nowadays you can plug in Cloud SQL with ease. It offers a very capable free tier, and you can write your code in Java, Python, or Go.
It can be expensive, but that’s not the problem. The problem is that nobody else gives you these tools. (There are some halfhearted attempts at open-source cognates, but they’re a long, long way from prime time.) So once you start writing code that uses them — and you will, because they’re really powerful and really easy to use — you’re locked into GAE…
…and for some reason this notion drives managers and executives insane. Which doesn’t make any sense if you ask me. Yes, I suppose there’s a risk that Google will abandon its flagship web platform, or hike its prices to punitive levels; but compared to all the other business risks out there, that looks pretty tiny to me, and the advantages are significant. But for client after client, that one fact makes GAE a complete nonstarter.
There are lots of other options. Microsoft has bet big on its Azure platform. I really like Parse as a simple and powerful built-in backend for Android and iOS apps, for instance. (It’s approximately 1 billion times better than the horror called RestKit I had to use once. Shudder.) If you use Parse, you don’t have to write your own back-end server at all! …Of course, on the other hand, if you need a back-end server to do anything more than mildly interesting, you’re currently out of luck. But for straightforward apps, it’s an excellent solution.
There are many other platforms, some of which I mentioned above. If you use the good ones, you can get more done, faster, with fewer developers.
But for one reason or another — one being cost — so many projects keep falling back to infrastructure services like Amazon Web Services, where instead of simply deploying to the cloud without much caring about what happens next, you have to provision individual servers running Linux or Windows and configure them as you would a machine of your own.
App Engine hasn’t exactly taken off, so Google introduced its own AWS clone. And then there are second-rate AWS knockoffs like Rackspace and Savvis, whose business models, based on my (limited but nonzero) experience, consist largely of schmoozing corporate decision-makers into buying inferior technology at inflated prices.
There’s nothing wrong with AWS. There is a problem with Amazon’s attempt at a platform, called Elastic Beanstalk, which, when I last tried to use it, caused me to throw my hands in the air before nearly using them to gouge my own eyes out. But Amazon’s Elastic Compute Cloud is generally awesome: seriously cheap, insanely powerful, proven to scale to enterprise levels, and provides a host of really useful and effective tools. In fact, Heroku and Parse are both built atop AWS.
The problem is that after using GAE and Heroku — or (I presume) any of the other platform services — configuring servers just feels so painfully and unnecessarily slow, byzantine and complex. Alas, sometimes it remains the right choice. Or at least no undeniably better one has come along yet.
And so we remain stuck with all the choices I listed earlier, and more, and more, and seemingly more every year, and whatever decision you make, you’re left with the nagging feeling that you could have done better. (Unless you chose PHP on Drupal, in which case it’s more like a nagging certainty.) I guess that’s life, and I suppose this kind of ferment is necessary and good:
“You know what the fellow said – in Italy, for thirty years under the Borgias, they had warfare, terror, murder and bloodshed, but they produced Michelangelo, Leonardo da Vinci and the Renaissance. In Switzerland, they had brotherly love, they had five hundred years of democracy and peace – and what did that produce? The cuckoo clock.”
This is the software Renaissance. Which is nice. But it still sure can be tough on the ordinary artisan.
Image credit: Building the world’s largest Christmas tree in Mexico City’s Zocalo, by yours truly.