Custom vs Shrink Wrap

I am sure that anyone who has any connection with the IT world, regardless of how tenuous that connection may, has come across the situation where others, be they friends, relatives, work colleagues, believe that because you work with computers you know everything about them. “Richard (substitute your name) works with computers, he can fix this problem.”

I suppose the same thing happens in other professions and areas of expertise. I have a brother -in-law who is a doctor. He is an orthopaedic surgeon, and while he may be (I believe, in fact that he is) a good doctor, I wouldn’t let him perform open heart surgery on me. It is highly likely that I would die.

I have come across a situation that has demonstrated to me how different even seemingly identical areas of computer programming can be.

There are, of course, lots of different types of computer programming. Apart from the different languages, and operating systems, but they aren’t really important. A language is just a tool you use to accomplish a given task. The operating system is something your program sits on. Usually.

But for some programmers, languages and operating systems is what they do. Writing an opertating system or a compiler is a whole different ball game to writing an application. And if I was 30 years younger with time on my hands that type of programming might be something I would explore.

My work involves writing applications. Perhaps it is not as sexy and cutting edge as some other types of work, but it is challenging enough for my tired old brain, and it is what my clients want. I get asked to write applications. I have never been asked by a client to write an OS.

But even here there are two types of programs. I usually write custom programs for a particular client. Not usually, until now, always. Every single program I have written has been to solve a particular program for a particular client, or in days long past for a particular employer.

I recently delivered an application to a client who suggested that there were other companies in his industry who would benefit from the program and I should market it to them.

But this takes me from writing custom apps to shrink wrap apps. Even though I probably won’t, in fact, package them in shrink wrap. The motive, of course, is to sell a squillion of them, retire to a tropical island and sit under a palm tree while being waited on by nubile young women.

But back to reality.

There is a big bonus in converting your custom programs to shrink wrap. And that is that invariably, having written the application once you now know a whole lot of things that would have been really useful to know when you started the project. And so version 2 is always better than version 1.

I know, you will say that I should have nailed down the specs in the first place, I should have avoided scope creep, I should have done a thousand and one things to ensure that I had all the information available to me.

I don’t believe, in the real world, that that is possible. Having written the program I now know a lot more about my client’s business than I did before. The client didn’t tell me some things because they are so much second nature to him that he has come to think that everyone knows them. And I couldn’t ask the right questions because, at that stage I didn’t know what questions to ask.

And even apart from those considerations, it is not until someone starts using the application does it become apparent that some changes would make it much easier to use.
The other big change in writing shrink wrap software is support. Custom software typically costs $thousands, shrink wrap more likely $hundreds. A reasonable level of support can be built into custom software. And you can supply training. Shrink wrap has to be intuitive and stable. You cannot afford to provide one-on-one tuition with every install. You cannot even afford to install it. And it must be unbreakable.

I don’t mean it must be free of bugs. Custom software should also be free of bugs. But much more than custom software, because there isn’t the training and support, it must be able to handle anything that the user does to it.

I am finding it quite a challenging task to convert this application. The logic is all the same, so that part is easier. The user interface needed some work, and that called on my non-existent design skills. But I also need to check on where I need to put in error traps, enough so that the program won’t fall over, but not so much that it grinds to a halt as soon as some data is entered.

At the moment I am finding that each module is probably taking about twice as long to write. I hope that once I get into the right mindset that this will come down. I also think it will improve my programming style for my usual custom programs. We wait and see if that is the case.