Prototypes and Crappy Software
June 19th, 2007[ Software Development ]
Typically in software when someone asks you to build them a prototype what they’re actually saying is “I have little to no cash”. I’m cheap myself so I love the idea of building things quickly for little cash. The sh*t hits the fan when the person asking doesn’t truly understand what they’re getting.
There are those rare to non-existent occasions where they’re actually saying “I know exactly what I’ll end up with in asking you to meet these unreasonable deadlines but just build it fast”.
The longer the time horizon gets, the more expensive building software this way will get. So if you build it, get it into some sales meetings or get it in some customers hands and the concept is proven flawed and you either abandon the business idea or significantly refactor it then perfect.
You just saved yourself a ton of cash and are a genius. Clearly building a so-called enterprise grade product would have been a very expensive mistake. Of course you also lack a business but let’s ignore that for now. It was good learning, it was better to know sooner than later, and it didn’t cost you much.
Short time horizon, cheap.
This will sound strange but the worst thing that can happen from a purely software perspective is the opposite. That being that you hit a home run with a valid money-making business idea and your software ‘prototype’ proves it. Now you start tacking things on, expanding, etc. Two years later, you’re almost in the black, you’ve got an actual working business but somehow your ability to progress technically has ground to a halt. You and your team have literally stopped dreaming cool ideas because you’ve been conditioned that technically they can’t be done, regardless of reality.
What happened? You delivered a prototype to prove a business concept, get some quick cash in the door. That prototype then became your product and eventually became an unmaintainable code base.
What’s unmaintainable mean? In most cases, unmaintainable means unreasonably expensive to make even the slightest change whether that’s new features or handling more volume etc.
Well there’s no such thing as unmaintainable right? Anything’s maintainable with sufficient piles of cash? Sort of but it’s uglier than that. One example is people. Smart, talented developers will flee from code bases like this. I guarantee you this and have seen it over and over again. So now you’re paying a lot of money to bad developers to tack pushpins onto your ball of rubberbands.
Long time horizon, expensive.
I wish I knew where I wrote this quote down from….”being first to market and developing the application as rapidly as possible often comes at the expense of long-term maintainability. In addition, these goals require different sets of skills, quality control practices, and management mentality”
Reread the above paying close attention to the role of the word “often”. Ah, a glimmer of hope. So can you do both? Can you build as rapidly as possible AND deliver long-term maintainability?
Short answer, no. Trust me, it’s just simpler for everyone involved if you take that answer and don’t read any further. Still reading eh? Ok, so I will tell you yes you can have both but it’s so rare and takes such an obscure combination of people and skills that it’s just safer to work on the assumption that it can’t be done. How do you do it? Well as hammy hamster would say, that’s another story….