Thursday, May 17, 2007

The price of fixed cost software development.


There is a theme that keeps recurring in my life.

People want to know how much things are going to cost.

That's not unreasonable. When you are planning your annual marketing budget, you'd like a nice round number that fits in the box you have for how much you're going to spend.

As a business man, I understand this need to allocate funds and budget for things, it's logical and prudent and the right thing to do.

The reality however is that unless you are purchasing off the shelf software that does everything you want right away out of the box... this simply isn't possible with custom software development.

Let me rephrase that. It's not a wise move to have a fixed cost allocated to your custom software project. While that may seem counter intuitive, let me give you a little window into the soul of the coder.

The coder would like to do top quality work. Like an artist, a good coder takes pride in his creations and wants to see them reflect all of his abilities. However, like all of us, a coder has to feed his family and pay the rent also, so at times, you are forced to make compromises in your work in order to pay the rent. Again, just like an artist, sometimes you are put in a situation where it is very hard not to "sell out".

As clients, there is often no real understanding of what is going on behind your machine. Most drivers now a days don't change the oil in their cars themselves, they simply drive it to their mechanic every 5000 (or so) KM and get it done.

Likely you've never opened the source code visible on your website or blog. You might have selected a new theme at one point, but it's not likely that you as a client examined the database structure to decide if it was optimally build and could scale easily, or if it was creating a ton of useless extra fields every time someone posts something or uploads something to your site.

The software may look fine to you on first examination and perform adequately until you start to get more traffic and handle heavier sales volumes. The last thing you need at that point is for your servers to tank, people call to tell you they couldn't put orders through, or worse, they're going through and then crashing the system because one section of your database has crashed but the website is still running so no one is immediately aware of it.

Budget over runs are legendary in the construction business, yet you could argue that you know how many floors you're putting on, how many posts, door knobs, elevators, you can calculate it down to a final number that makes sense.

Good custom software doesn't develop on a fixed budget. it evolves. While you can spend all the time you like at the start of the project to map out the project requirements and the features needed... until you have the software working in the environment that it will be in, you have no real idea of how well it will perform.

Will the users understand the interface, does a certain process need to be broken down more, has the true functionality been captured, or are there wasted or missing steps in the process that are slowing things down.

In order to get these things right, you can't tell a coder that he has 2 months and $20K to build these features. He'll give you what 2 months and $20K have brought him to, and whatever band aids and shortcuts he needed to take along the way to get the project in on time and on budget.

Rather you need to take the approach of what are the features that we need NEXT. Don't think of the project as being finished, it's never finished. There are always more things that can be done to make it better. The only question is when do you need to implement those new features. When does it make sense to open the hood of your machine and start tinkering with the engine again.

Can you live with the way the system is now? Can your staff adjust to using a work around, or is it really a necessity that it get done next as it will increase efficiency, productivity, sales or even moral.

Approaching software as an ongoing expense like your rent, marketing budget or salary of your book keeper is a much more prudent way to think about your custom software project. This encourages realistic and manageable deadlines as well as ensuring that you are intimately involved in the process of developing that software, it meets your needs because you'll be using it daily to make sure that it does.

Does this lend itself well to small business or organizations? Not really. But that's why there are open source projects and commercial software packages. Without sharing the load with other like companies and individuals (be it through open source collaboration or through commercial reselling of a developed package), truly functional software that does everything you want under one roof, has to evolve and not have the same types of limitations that a construction project would have.

There are lots of talented coders out there that collectively are able to do amazing things. The open source model of collaborative software development has proven itself viable, as a vast portion of the worlds internet backbone can attest to.

Finding a team of people that are working on a project that fits your needs is an excellent way to make the cost of developing that software more "budgetable". Contributing financially to the development of that software and adding to the team with your own resources are excellent ways to make sure that your needs are reflected in the direction of the project, without shouldering the whole cost yourself.

Of course if you are in a small to medium size business that has a need to improve your work flow and you are looking at web based solutions, I encourage you to have a look at our ruby on rails ERP system called XLsuite

No comments:

Movie & TV Show Preview Widget