Tuesday, November 07, 2006

How Not to Fix a Problem

I haven't posted in a couple of weeks (oops, I forgot!), so I figured I would put something up quickly that's fairly relevant to the typical blog posts and is somewhat topical. Posting this last week would have given you, dear reader, time to observe more and be a bit more informed about the issues discussed.

If you're in the United States, you had the opportunity to choose the lesser of two evils today and vote for many of your government officials. If you are in the rest of the world, I'm sure you can feel our pain. But maybe not as much pain as many of us actually feel. See we use these electronic voting machines here which are not very well liked. If you haven't heard about this by now, consider yourself lucky.

Now don't get me wrong, some of these things probably work well. But nobody is ever going to hear about things that work as well as they should. For those unsung heroes who designed these machines, I salute you. For the others, please find a suicide cult and join it soon.

I'm not going to go through and rehash old arguments made by others. If you want to read those, you'll find plenty of links. The basic problems are that the machines are difficult to use, they frequently break, and it's possible to manipulate the votes. And instead of fixing the problems, the companies that make them are fighting people who expose the flaws.

What the companies should be doing is making "bulletproof" devices and inviting people to try and break them. There should be no question whatsoever that things are on the up-and-up when it comes to our freedom. Further, there should be independent code audits and security tests to verify that there are no ways to breach the integrity of the machines. In fact, I'm one of the people who thinks that the code should be opened up for review by everyone. Why not leverage the power of a million or so people looking over the code for any problems? Publish the code! You only have something to lose if it's broken and insecure and you've been hiding that fact.

With these devices, you don't design them so they can work, you design so they can't fail! Take a look at ATMs -- they do this for the most part. Very few people accidentally pull out stamps when they mean to withdraw money. Diebold, one of the largest manufacturers of voting machines also makes ATMs. They obviously have the expertise to make touch screen self service devices work, so why is it so hard to actually pull it off?

Every system has its advantages and disadvantages when compared to others, but there is almost always a way to design a system that creates fewer disadvantages than the current system, while increasing the advantages. When something works consistently and intuitively, there may still be ways to tweak the system to get greater efficiency. But the electronic voting machines seem to have created a problem just as big as the one that they purport to solve. Votes are still being counted inconsistently, ballot tampering is still possible, and the devices have added unreliability and complexity to the system.

Ideally, a perfect solution will be efficient, simple to understand, intuitive to operate, and will minimize the possibility of mistakes. Which brings us to our lesson for today: A solution should not fix some problems only to create different, bigger ones! That seems to obvious to have to state, but often times people lose sight of the basics and need to be reminded of them. It happens to us all at one time or another, so it's worth pointing out.