We’ve just about gotten it all straightened out now. My in-laws were over for the holidays and the
kitchen is just about back in order.
The kitchen wasn’t messy – all the utensils and gadgets were
in the drawers, but it wasn’t clear which drawers they were in. When my mother-in-law comes over, she handles
some of the washing up and puts things away, but not where my wife and I expect
them. Spoons go with spoons and forks go with forks. All of that stuff is easy. She puts similar things with similar things,
and so do we. The problem we have is
with the one-offs – the kitchen tools that have five prongs and an obscure
purpose. When she's in the kitchen they can end up anywhere, and they
often do. I’m not sure how my wife and I decided where
they should go, but we know where they should go and my mother-in-law has different ideas. The situation reminds me a bit of work.
One thing I’m very conscious of as a design consultant is habituation. Often, I’ll walk in, join a team, look at the code and think to myself “how in the world do you folks find anything?” Sometimes it’s a legitimate concern – they don’t know where anything is. At other times, it isn’t – everyone just knows where everything is because they’ve been working in the code for years.
On any particular team, it’s hard to decide whether local “knowing” is a problem or not. Clearly, if the organization of elements in a design works for a team, it has some merit; after all, there are many organizational schemes that don’t. But, ultimately teams have to be concerned with the intelligibility of their design to newcomers. If they aren’t, the design and the team become disconnected and anti-social. As staff turns over, you get to the point where no one understands the design any more.
When I look at a design, one thing that I look for immediately is coherence – the sense that there’s a particular way to do things and when there are exceptions, there’s a valid reason. This quality is sort of like ‘The Principle of Least Astonishment’ but I think there is a little bit more to it. A design is coherent when, if you know a little bit, you really know a lot. For instance, if all of the four prong kitchen tools go in one drawer and all of the five prong tools go in the one to the right, the design is coherent if you can correctly assume that all the six prongers are in the next drawer to the right.
Our kitchen isn’t organized that way, so maybe my mother-in-law's actions illustrate a point. If you don’t have coherence, everything is up for grabs. Maybe you know where things are supposed to go in your design, but will anyone else?
What happens to your design when they don’t know?
How odd. I had the same idea quite a while ago, and reached for a similar metaphor.
http://tottinge.blogsome.com/2005/11/18/code-organization-in-the-eye-of-the-beholder/
In my case, I had a visit from helpful people, and was working in unfamiliar technology at the same time. It was a similarly poignant moment for me. I realized that being a visitor and being visited were two sides of the same coin, and that perhaps it was a matter of knowing where things are kept.
Similar conclusions. It was a nice sense of deja-vu seeing your post. Keep up the good work.
Posted by: Tim | January 31, 2007 at 08:25 AM