Programmer’s Explanations

I wonder if I should worry… it’s only Wednesday and I’ve already used three of these this week!

1. Strange…
2. I’ve never heard about that.
3. It did work yesterday.
4. Well, the program needs some fixing.
5. How is this possible?
6. The machine seems to be broken.
7. Has the operating system been updated?
8. The user has made an error again.
9. There is something wrong in your test data.
10. I have not touched that module!
11. Yes yes, it will be ready in time.
12. You must have the wrong executable.
13. Oh, it’s just a feature.
14. I’m almost ready.
15. Of course, I just have to do these small fixes.
16. It will be done in no time at all.
17. It’s just some unlucky coincidense.
18. I can’t test everything!
19. THIS can’t do THAT.
20. Didn’t I fix it already?
21. It’s already there, but it has not been tested.
22. It works, but it’s not been tested.
23. Somebody must have changed my code.
24. There must be a virus in the application software.
25. Even though it does not work,

The VA’s Latest Computer Problem

Computerworld has an amazingly detailed description of the VA’s August IT breakdown.

On the morning of Aug. 31, the Friday before Labor Day weekend, the Region 1 data center was packed with people. According to Director Eric Raffin, members of the technical team were at the site with staffers from Hewlett-Packard Co.conducting a review of the center’s HP AlphaServer system running on Virtual Memory System and testing its performance.

About the same time, staffers in medical centers around Northern California starting their workday quickly discovered that they couldn’t log onto their patient systems, according to congressional testimony by Dr. Bryan D. Volpp, the associate chief of staff and clinical informatics at the VA’s Northern California Healthcare System. Starting at about 7:30 a.m., the primary patient applications, Vista and CPRS, had suddenly become unavailable.

What follows is a step-by-step analysis of how not to solve a systems problem.

Evidence-based Scheduling

A couple of weeks ago, I went to a seminar put on by Fog Creek Software.  They’re doing a “world tour” to show off the newest version of FogBugz, their project tracking and scheduling software.  It’s pretty cool; there are a lot of new features and enhancements that have been added to the current version.  My lab uses FogBugz, but we’re a couple of versions behind.  Time to convince someone to upgrade!

One of the new features they’re very proud of is evidence-based scheduling, a way of predicting completion dates.  If you’re ever dealt with programmers, or the managers of programmers, you know that this is one of the hardest parts of of software development.  They seem to have nailed it pretty well.  Joel Spolsky explains the details in the link above, but briefly, it uses a modified Monte Carlo algorithm to predict the outcome based on past performance.

Another very nice feature is their integrated Wiki.  I’ve installed and used various flavors of Wiki software, and while they’re certainly useful, they do tend to be a bit rough.  There are quite a few free and open-source versions, a few commercial versions, and I find them all lacking on one way or another.  Currently I’m using TikiWiki, and while it does work, the user interface for posting could be better.  (Yes, I know it’s open source, and I should fix it instead of complaining, but I’m lazy and too busy.  So complain I will.)  Anyway, the Fog Creek guys have done a pretty seamless integration of a WYSIWYG Wiki into FogBugz.  I’ve written and asked them to release their Wiki as Open Source, but so far no reply.

Dual Displays

I have dual video displays on my computers, both home and at work.  For people who constantly switch between two or more applications, it increases productivity by 9 to 50%.  Those aren’t my numbers; they come directly from Microsoft:

Give someone a second monitor, let them use it for while, and then try to take it away. It just isn’t going to happen. They’ll never go back to a mono display. Researchers in the Visualization and Interaction for Business and Entertainment group (VIBE), found that increasing a computer user’s display space made it easier for them to complete their tasks.

[…]

The research study required users to complete several different tasks, switch from one task to another, and remember data. None of the study participants had used multiple monitors before.

The first study revealed that the users’ productivity increased by 9 percent. Further studies showed even greater increases – at times up to 50 percent for tasks such as cutting and pasting. Mary Czerwinski, the VIBE research manager, is excited about her group’s discoveries, asking, “If you’re able to squeeze 10 percent more productivity out, do you know how much money that will save?”

My own observation is that for programming tasks, where the user has an IDE open in one window and the browser open in the other, 50% is a conservative estimate.

Quality software

I don’t normally write about programming stuff here (it scares my relatives) but this is too good to ignore.  I’m managing a project and there’s this one bit of legacy code:

// write the message to a buffer
char buffer[N];
sprintf(buffer, "%s: %snr",header,value);

// remove the carriage return
int len = strlen(buffer);
buffer[len-2] = 0;

For the C#-challenged, what it’s doing is adding a carriage return/linefeed pair and then stripping it right back out.

I’m going to send this along to The Daily WTF and see if they like it.

Windows XP Hacks

I’ve been forced to update one of my boxen to WinXP.  Welcome to Hell.  There will be a number of hacks appearing here giving details on how to make XP a little less friendly.

Turn off auto-expanding trees in Windows Explorer
1) close Windows Explorer if it’s running

2) go Start -> Run, then type “regedit”

3) Navigate to HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerAdvanced

4) Change the value of “FriendlyTree” to 0

5) close regedit, and start up Windows Explorer. Auto-expanding menus are now off

Turn off Notification Area Balloon Tips

[Start] [Run] [Regedit]
Registry Key: HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerAdvanced
Modify/Create the Value Data Type(s) and Value Name(s)
Data Type: REG_DWORD [Dword Value] // Value Name: EnableBalloonTips
Setting for Value Data: [0 = Balloon Tips Disabled / 1 = Balloon Tips Enabled]
Exit Registry and Reboot

If Architects Had To Work Like Web Designers…

Dear Mr. Architect:

Please design and build me a house. I am not quite sure of what I need, so you should use your discretion. My house should have somewhere between two and forty-five bedrooms. Just make sure the plans are such that the bedrooms can be easily added or deleted. When you bring the blueprints to me, I will make the final decision of what I want. Also, bring me the cost breakdown for each configuration so that I can arbitrarily pick one.

Keep in mind that the house I ultimately choose must cost less than the one I am currently living in. Make sure, however, that you correct all the deficiencies that exist in my current house (the floor of my kitchen vibrates when I walk across it, and the walls don’t have nearly enough insulation in them).

As you design, also keep in mind that I want to keep yearly maintenance costs as low as possible. This should mean the incorporation of extra-cost features like aluminum, vinyl, or composite siding. (If you choose not to specify aluminum, be prepared to explain your decision in detail.)

Please take care that modern design practices and the latest materials are used in construction of the house, as I want it to be a showplace for the most up-to-date ideas and methods. Be alerted, however, that kitchen should be designed to accommodate, among other things, my 1952 Gibson refrigerator.

To insure that you are building the correct house for our entire family, make certain that you contact each of our children, and also our in-laws. My mother-in-law will have very strong feelings about how the house should be designed, since she visits us at least once a year. Make sure that you weigh all of these options carefully and come to the right decision. I, however, retain the right to overrule any choices that you make.

Please don’t bother me with small details right now. Your job is to develop the overall plans for the house: get the big picture. At this time, for example, it is not appropriate to be choosing the color of the carpet.

However, keep in mind that my wife likes blue.

Also, do not worry at this time about acquiring the resources to build the house itself. Your first priority is to develop detailed plans and specifications. Once I approve these plans, however, I would expect the house to be under roof within 48 hours.

While you are designing this house specifically for me, keep in mind that sooner or later I will have to sell it to someone else. It therefore should have appeal to a wide variety of potential buyers. Please make sure before you finalize the plans that there is a consensus of the population in my area that they like the features this house has. I advise you to run up and look at my neighbor’s house he constructed last year. We like it a great deal. It has many features that we would also like in our new home, particularly the 75-foot swimming pool. With careful engineering, I believe that you can design this into our new house without impacting the final cost.

Please prepare a complete set of blueprints. It is not necessary at this time to do the real design, since they will be used only for construction bids. Be advised, however, that you will be held accountable for any increase of construction costs as a result of later design changes.

You must be thrilled to be working on as an interesting project as this! To be able to use the latest techniques and materials and to be given such freedom in your designs is something that can’t happen very often. Contact me as soon as possible with your complete ideas and plans.

PS: My wife has just told me that she disagrees with many of the instructions I’ve given you in this letter. As architect, it is your responsibility to resolve these differences. I have tried in the past and have been unable to accomplish this. If you can’t handle this responsibility, I will have to find another architect.

PPS: Perhaps what I need is not a house at all, but a travel trailer. Please advise me as soon as possible if this is the case.

Job interview questions

Here’s an interesting article on what questions you should ask when you’re interviewing for a job. There are a couple here I wish I’d asked before I started on my current gig:

  • If I want to buy something like a book or a tool, how does the process work (how hard is it?). What’s the cost limit before the approval must go up the management chain?
  • How many projects have succeeded/failed in the last five years? To what do you attribute the failures?

I’d also add a question about how raises and increases are determined.

Ho Ho Ho UPS

I note that once again (for the fourth year in a row) the UPS delivery tracking web site melts down from overload the week before Christmas. These folks are allegedly technically savvy. Wouldn’t you think they’d get a clue? I know where you can find a programmer with experience in dealing with massive, high-volume, high-reliability databases….