Wednesday, October 10, 2007

Sustainable, Sushmainable

Here's the thing: "A Standish Group research report shows a staggering 31.1% of projects will be canceled before they ever get completed. Further results indicate 52.7% of projects will cost 189% of their original estimates... On the success side, the average is only 16.2% for software projects that are completed on time and on budget. In the larger companies, the news is even worse: only 9% of their projects come in on time and on budget."

Well, don't freak out - or nod in knowing agreement for that matter. This report is over a decade old (The CHAOS Report). So, times have changed, right? A 2004 update shows that project cancellation has actually declined to 18%, and project success has risen to 28%, supposedly.

Big flippin' deal.

No matter what side of the fence you side on, can we at least agree that - oh, say - only 50% of software projects actually succeed? In other words, any given project you are on is really a coin-flip on whether it will ever be used.

This leads to my argument: I hate Java and .NET - bloated, confusing framework garbage. I've ranted about Java-esque static-typed OO languages before, and still point a cold boney finger at them as the culprit. Despite any philosophical musings, the above facts are the real reason I now stick mainly to agile languages. The numero uno reason I hear in favor of Java and .NET? "They are sustainable." Again:

Big flippin' deal.

I cannot stress enough how important it is to just get software out the door. Sustainability? Puhleeze - your project, if it does survive, won't last 10 years. Scalability? Don't kid yourself - your Killer App will likely never get that popular. I got SnipSnipe (check it out) done in Rails in a week. If it were Java, I'd still be working on it. Sure, I am still working on it, but that doesn't mean you can't use it.

$ rails snipsnipe; cd snipsnipe
$ mysqladmin create snipsnipe_development
$ script/plugin install http://svn.techno-weenie.net/projects/plugins/acts_as_authenticated
$ script/plugin install http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids
$ script/plugin install http://juixe.com/svn/acts_as_commentable
$ script/plugin install http://juixe.com/svn/acts_as_voteable
$ script/generate model Snippet
$ script/generate authenticated user account
Make a few migrations and db:migrate, hang the acts_as_* gang onto the Snippet model.
class Snippet < ActiveRecord::Base
acts_as_taggable
acts_as_voteable
acts_as_commentable

belongs_to :user

validates_presence_of :title, :body_raw
validates_format_of :credit_url,
:with => /^http(s|):\/\/|^$/,
:message=> "must begin with http://"
end

There. That's the framework of SnipSnipe. The rest was just html/javascript and about 80 lines of controller code. Most of my time spent was fighting with Prototype and CSS. But, back to the task at hand.

Forget that fact that your project has only a 50% likelyhood of ever getting used at all, what are the odds of sustainability or scalability ever becoming a problem? If you ever write software that gets to these next levels - then, and only then, should you worry about such navel-gazing. In the interim, you can work on more new projects. Yay! Until then the best advice I can give is, just get the bitch out the door! (You can quote me on that)

0 comments: