Wednesday, November 14, 2007

Memory is not a constant

Here are two rules that all developers MUST learn:

Rule #1: A human being can easily commit a complicated task to short-term memory. But for that task to live in long-term memory, it must be repeated very frequently for a duration of about a month, and then somewhat frequently thereafter.

Rule #2: A human being's memory is proportional to their interest level. People of equal I.Q. will remember WIDELY variable levels of detail based on their interest level. There is nothing that can be done to combat this. Our brains are biologically hard-wired to filter out and "lose" information that isn't interesting to us. That's how we deal with information overload.

People in an around technology don't tend to appreciate these rules:

1) Managers assume that people can be trained now for something they won't be used for 6 more months. They can't. Anything complex, like learning a new programming language, must be applied almost immediately and continuously or it will be lost.

2) Tool admins who use a tool on a regular basis assume that the tool is just as easy for someone to use on an infrequent basis. It isn't. If a tool is complex and used infrequently, you'll have to hold the user's hand *every* time they use it. This is no measure of how smart or dumb a user is. It's a measure of interest level and frequency of use. Tools that are used infrequently must be completely intuitive. When choosing new tools for a team to use, you *must* keep that in mind. It must either be something they use every day, or it must be something that is drop-dead intuitive. If it's neither, don't use it.

3) Developers who have a clear understanding of something complex feel no need to document it because it seems very obvious and easy to remember at the time. But to other developers it is opaque, as will it be to the original author after a period of time. A classic example is having a crystal-clear understanding of something complicated in a meeting, and then forgetting it completely after the weekend.

4) What is interesting to one developer will not be interesting to another developer, and since interest level greatly affects our ability to retain information, there are often great disconnects and battles between developers over which tools are "life savers" vs. which tools are just a pain-in-the-ass. People who are really into Operating Systems love Linux. In fact, the more complicated Linux is, the better, because that means more features and more power and more Operating System to "enjoy". People who don't care about Operating Systems *hate* Linux for all the same reasons. And then you have the frustrating disconnect between people who evangelize Linux and the people who can't remember the most simple Linux commands to save their lives.

The typical techie reaction to someone who can't remember how to do something is "Gawd! What an idiot!" And that is such an unjustified reaction. I have been on the other side of that exchange where someone tried to explain complex insurance rules to me (when I worked for an insurance company) but I kept forgetting the rules after a few days.

I could list many more examples, but I think I've conveyed the concept. If we keep these rules in mind, it can save us SO much pain and frustration with each other.