There’s one thing about software development that puzzles me more than anything else: talent. Some people just have it. They can crank out code and solve staggering problems, but they also have another ability which makes a huge difference. They know good design when they see it. They can tell very quickly whether a piece of code was developed thoughtfully or haphazardly; whether it’s trustworthy code or something that is ready to slide down the entropy well and deserves a good kick on the way down. They just know.

Maybe talent isn’t the right word. Maybe the right word is experience. Very experienced developers have this uncanny sense of design, but not all of them. I really don’t know whether it is learned through intense experience or fostered by innate ability but there definitely is something to it.

A long time ago, I read a book called Drawing On The Right Side of the Brain by Betty Edwards. The premise of the book is that artists see the world differently. They see things in a way which lends itself to the creation of art, and if you can mimic their mode of perception you can become more artistic.

One of the exercises in the book is to take a picture of someone’s face, turn it upside down, and then draw it. Amazingly this works very well. You are able to concentrate on curves and angles and see a face purely as shapes and textures. But, when the picture is right side up, we see it as a face and we confuse what we know about faces with what we actually see. It’s as if we have an internal monologue that goes “Oh, face. Faces are ovals; I’ll draw an oval. Hair is long and stringy; I’ll draw some lines.” But, when we get into that perceptual mode, the result is often cartoon-ish.

When I read Drawing On The Right Side of the Brain, I wondered whether there is something analogous that happens in software. Maybe very experienced designers just see things differently.

I was reminded of all of this a few years ago when another book came out, Blink by Malcolm Gladwell. In it, he argues that a lot of our cognition happens instantaneously and somewhat unconsciously. We can see this in the decision process (or lack thereof) used by experts. Often they just sort of know the answer, but they aren't quite sure how they arrived at it.

Experts can, of course, be wrong but I think that there is value in seeing things the way that an expert in a field might see them, and that if we accept the premise that arriving at better solutions is a function of being able to see them, then we have an opportunity to move design learning into a different direction. Maybe we can teach design sense or at least, design appreciation by bombarding people with examples.. here's a good snippet of code.. here's a bad one.. here's a good one.. here's a bad one.. Example after example until people grok the essence of good code.

I don't have any illusions that this sort of thing could be anything near a complete education. Some lessons have to be hard-won. Design is a deep skill, and there's no substitute for writing code and living with it for years. But, I have run into too many people who just really haven't encountered enough good code. They don't know what it looks like and they don't know why a particular piece of code is good or bad.

Next week at Agile2007, Emmanuel Gaillot and I will be hosting a workshop entitled Design Sense. We've gathered a large number of example code snippets. In the workshop, we are going to grade them and discuss them so we can learn more about what people see as good in design.. what they cue in upon. We're also interested in how much agreement there is in the community about goodness in design. If all goes well, the workshop could be the first step toward a teaching initiative that is focused on the use of these perceptual examples.