Monday, October 18, 2004

Sometimes it pays to have to pay for something

Today my inbox had about 35 spam emails in it. That may not sound like a lot but this is after we added the spam filtering service to our email. Before then it ran 150 or so a day.

Anyway this got me thinking about unwanted communications and how it relates to the financial cost of communicationg.

On my first visit to the US way back in 1982 I remember reading through the terms and conditions, in my hotel room, printed in the local phone book. Let's not go into why I was reading the phone book . I remember being surprised that the residential plans involved a flat fee and unlimited calls. By contrast, the plans offered by Telecom Australia at the time were a fixed fee plus so many cents per local call (and still are so far as I know). At the time and for many years afterward my thinking was that the Australian model was rather expensive by comparison with the US model.

Fast forward to 2002. I've now married a US citizen and migrated to the US. On my second day in the country the phone rang and I answered. A recorded message ran something like this: 'This is so and so. Please hold the line until one of our operators is available'. So and so was a well known telemarketing company (and the only reason I'm using the phrase so and so is because I can't remember who the so and so's were!). I was outraged! These bastards ring me and they want me to wait for THEM? I hung up immediately.

In the following months I think I must have fielded a couple of thousand such calls (I was unemployed for quite a while). Fortunately, the Do Not Call list does seem to work - the number of calls has dropped dramatically since the DNC list kicked in. I might add that I entered our number in the DNC list when it was announced.

Contrast that with my experience in Australia where you pay so many cents per local call. Back there almost the only unsolicited marketing calls you get are from the phone companies because they're the only ones who get essentially free calls. Every other marketing organisation has to justify the price of each call. I'm not sure on the commercial rates; the only price I know is 22 cents per untimed local call from a residential phone. But even assuming commercial discounts down to, say, 10 cents per call, it wouldn't take long for a company to rack up a large phone bill.

The analogy with email spam should be obvious.

Sunday, October 03, 2004


or lack thereof.

As some of you know, I've just got back from a longish stint in the Philippines, on our customers site. They had a long list of wants/needs/demands for us. Most of the list concerned functionality - the usual list of suspects. A report was missing this item, there were too many steps needed to accomplish that, etc etc. As I say, the usual list of suspects.

But there was one item that surprised me. They wanted a full revision list - which versions of the software contained what enhancement, bug fix etc. It wasn't the request that surprised me though, what surprised me is that we were unable to comply. Why? Because my predecessor had never bothered to update the version resource in the executable. Our product contains as of now about a dozen executables and DLL's. One or two of them have version and all the rest have version in the resource. Does that look familiar?

So, starting from September 30th, all our products will have a version number, easily accessible, of the form X.X.X.YMMDD where the X's are enhancement/version/bugfix related and the YMMDD part is the last 2 digits of the year (without a leading zero), the month and day on which the compile took place. At least then the customer will be able to look at the file and know if it dates from before or after my last stint with them.

But it gets worse. We use SourceSafe for version control. A good enough product for a small development site like ourselves (let's not get into THAT debate). SourceSafe does the usual expected things for a version control product. It lets you comment each check-in, provides the facility to have those comments embedded in the source code, lets you label releases - the usual suspects again. But when I examine the SourceSafe history what do I find? Nothing. Nada. Zip. I know checkins have taken place because I can see many different versions of each file. What I can't see is any indication, in human readable language, of what problem was resolved with each checkin. Nor can I see any version labels that would tell me that if I check out based on label X i'll get the version of the source code used to build the version that customer X has.

This is barely workable when you have just one developer with an extremely good memory. I have an extremely good memory for trivial detail but I don't rely on it to tell me that version x.xx checked in half a year ago contained a fix for bug y.yy. That's what SourceSafe (or any other source control system) is for. That's why I use SourceSafe at home for all my personal projects (and have done using one version control system or another since 1987). It becomes totally unworkable when you're handing responsibility for the code from the original developer to a new developer (me). I don't have the context.

Honestly, it puzzles me how anyone can produce software when the only clue they have as to which version they have is based on a guess from the timestamp on the file. It also puzzles me mightily how anyone can produce software with the attitude that a diff is good enough to tell them what changed. Yep, the diff tells them what changed but it won't tell them why.

After the foregoing would you be surprised to learn that the code contains almost no comments? I didn't think so.

I think this all comes down to an attitude of professionalism. My job as a developer isn't just to write code. My job is to design a maintainable and (hopefully) good solution to a problem whilst keeping future possibilities in mind. One of those future possibilities is where we might take the product. But, equally important, one of those future possibilities is that we might need to backtrack and revisit design decisions. How can we do that if we can't produce (and read easily) an audit trail of what we've done? And how can we possibly grow to cope with new business if all that knowledge is locked up in my skull?