The Artima Developer Community
Sponsored Link

Exploring Design Spaces
The Creative Side of Software Design
by Bill Venners
May 19, 2003

<<  Page 4 of 4


Getting Lost in Prague and Code

Last week, after I had climbed up the hill and found myself in an unfamiliar neighborhood, seeing the steeple in the distance helped me get my bearings. But instead of heading straight back to the hotel, I decided to try and find my way to the church to which the steeple was attached. I tried several streets I suspected would take me to the church, but all ended in dead-ends. Because of the call of breakfast that morning, I ultimately gave up trying to find a path to that church. But because I could see the steeple, I had confidence there must be some way to get to the church that I could find if I kept trying.

Going down blind alleys, hitting dead ends, and backing up are normal parts of the creative process. And so is getting lost. For about a year, for example, the Place project was at an intellectual standstill. We were, in effect, lost. When a writer gets stuck while writing a story, sometimes just putting the story in a drawer and leaving it for a while is enough to get the writer unstuck. Although I had mentally put the Place project on indefinite hold, about six weeks ago during a jog I suddenly saw a new direction. It occurred to me that I could pull out of the Place API the one third of it that I feel confident about, and move that to its own API. So after a year of being "in the drawer," simmering in the background of my mind, I suddenly found a new way forward in the Place project.

One reason software design is hard is because you are usually aiming at a moving target. The very act of designing, building, and using software clarifies and changes its requirements. This movement is greater in projects that venture into new and uncharted territories, but also exists in projects that rework well-known areas. The best way to deal with the motion is to accept that truly understanding your software's requirements will require a thorough exploration of its design space. Think, discuss, experiment, and test; build, release, and listen to users—these methods of exploration will help you understand your requirements and find your way to a good design.

Talk Back!

How do you explore design spaces? Discuss this article in the News & Ideas Forum topic, Exploring Design Spaces.


Interview with Guido van Rossum, Programming at Python Speed, in which he talks about exploring with code:

<<  Page 4 of 4

Sponsored Links

Copyright © 1996-2018 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use