Archive for June 2005

On Bureaucracy and Software

For a while now I have been thinking of ways in which software development techniques can benefit other areas of our lives. Software engineering is still a maturing field of study, but we have a lot of advantages over other fields. For one, our cycles are very quick – businesses demand continual improvements, and software seldom lives past 20 years of age. So, we learn quickly.

For another, seldom in history have so many smart people been focused on the same problems. Every software application is an experiment, and there have been millions of experiments performed. And we have learned.

We have learned the best ways to build complex organizations of interlocking components, each of these specializing in one thing, but working together toward a common goal. Of course, the goal is never static, so we know how to do this in such a way that we can adapt to changing requirements.

And this is where bureaucracy comes into the picture. A bureaucratic organization shares many of the same characteristics as software. There are many small parts, which must work together to perform some goal. But generally, they do not respond well to change. So, I ask the question, Is there something that Software Engineering can teach organizations, to make them respond better to change?

This is still a thought process for me, so I don’t really have any answers…

The Nature of Combo Lists

When we create forms for users, we have too simplistic a view of what a dropdown list should be. We limit our thinking to the user interface, when sometimes we should be thinking about data relationships.

For example, in a dropdown list of US states, we probably want to display a state name, but store a state code. Both on the web and in WinForms, we have simple solutions to this problem. However, the reality is that we have a data relationship here, between the “state” field of the address we are entering, and the “lookup table” containing state names.

From a UI (User Interface) point of view, all we should really be allowed to say is the format (dropdown list) and the display field (state name). The rest (the state list to display) is really driven by referential integrity constraints. But you won’t find this sort of power anywhere in WinForms or ASP.NET. And that is a problem.

A second type of dropdown list is one where the user selects from a list of commonly used items, or is allowed to type their own. This is kindof the opposite of the previous case – their are no database or business rule constraints (other than the length of the field). But if we are coding this, we inevitably store the list of common values in the same style as the previous type.

And that is a mistake, because they are completely different. It helps to think of this second case as a textbox. Windows provides native support for this. (You can see this Windows feaqture when you fill in forms on IE, or type a URL into the browser address bar).

In between these 2 extremes, there are several other possibilities, but my point here is this: When developing a UI, we should not have to worry about anything but the UI. To do otherwise is inefficient and error prone – it violates the DRY (Don’t Repeat Yourself) principle.

If I drop a field that contains a state onto a form, then that field should automatically take on the form of a dropdown list of states, or supply me with alternative renderings that make it easy for the user to interact with the UI. Similarly for date fields, or date/time fields, etc.

The disconnect between the database and the UI is the next chasm that we need to be filled by the tools that we use. There seems to be very little recognition of this fact in the IT development world.

Which Revenge of the Sith Character are you?

Virtual CD from Microsoft

So, I was busy downloading some software from MSDN, in ISO format (standard CD images). I’ve had some recent unsuccessful CD burning experiences on my laptop, so when I saw a link to Microsoft Virtual CD software, I followed it.

Lo and behold – it was raw, simple and dirty, but it works – only on XP apparently, but thats all I need. So, if you need a quick & dirty way to mount an ISO image as a CD drive, you know where to go. Apparently it also works on mapped network drives, so the image does not even have to be local.