Humans are broken

I reflected recently on the fact that humans are the hardest thing to deal with in computer science. Even the most undocumented, unmaintained, unreliable hardware or software components that you occasionally have to interface with in day-to-day engineering work are cupcakes compared with humans. Humans are almost entirely undocumented; they make un-diagnosable errors quite frequently; they behave seemingly at random; they don’t understand written or oral instructions. Worst of all, they are the ones who actually want to use the rest of the system to get things done. Any computer system which has humans as a component will work inefficiently and intermittently, if at all.

But then my boss reminded me that there are people who do a decent job of predicting the behaviour of humans, of recovering from human errors and misunderstandings. It’s just that none of these people work in computer science. And then I realised that I was being unfair on humans. Humans have a well-developed, extensible set of protocols for dealing with situations as diverse as buying a bus ticket, starting a war, finding a mate, and designing a computer system, along with a comprehensive service discovery mechanism. Humans have a sophisticated, context-aware timeout and watchdog mechanism operating on different levels. I’ve often seen a human get bored and give up where a computer would have just sat there waiting. I’ve often seen a human deadlock, or get into a stuck state, but in most cases the watchdog thread recovers after a few seconds. Humans have a rich set of signalling methods offering a choice of latency, bandwidth, noise resilience, range, disconnected operation, and other important factors.

The crucial point here is that we expect well-designed computer systems -- be they hardware architectures, operating systems, communication libraries, or GUI toolkits -- to have certain features. Humans also have these features: you just have to know how to get at them. Computer scientists often forget this. We spend many years learning to talk computer: learning to handle edge cases before they arise, learning to add checksums and wait for acknowledgements, and so on. After all this, we forget that we have an extra language the general populace doesn’t, that although we can talk computer just as well as we talk human (or much better, for many of the most extreme compscis), most people can only talk human.

When we have done this, we need HCI knowledge. We need to remember that although humans often make mistakes, they have sophisticated error-detection; thus, we should provide ‘undo’ functionality. We need to remember that although humans forget things they haven’t seen recently, they have a large, content-addressable backing store; thus, we should offer menus or lists of commands and options. Humans are the hardest thing to deal with in computer science, not because they’re broken, but because they work a different way. If we can cope with trying to talk a kind of pidgin of human and computer, we can use their most advanced features. Talking louder and gesticulating won’t cut it.



Comments on Humans are broken | no comments | Post a comment

[YAML] [JSON] [XML]