I just read an article called The Cognitive View: A Different Look at Software Design. Originally published 15 years ago, the article talks about "new" research which attempts to look inside a developer's head as he designs software. When most people nowadays talk about software design, they usually refer to UML diagrams or detailed technical specifications. This article describes the mental activities involved with creating a design.
Researches found that developers would put together a solution in their head and run test cases against it to see if it would work. They would play with an idea until they found a weakness, adjust the solution to overcome this failure, and repeat. Ultimately they would come up with something that they think would do the job. The process of recursive failure and adjustment can remain hidden in the brain. The more a developer works with a particular type of problem, the better he probably is aware of all the possible ways things can go wrong and can make gut choices about ways to avoid them.
Now that i've been looking for it, i've noticed my brain undergoes this process. I think i now have a better understand of why i'm more comfortable with certain type of projects. I'm kind of a perfectionist when it comes to work. I hate making mistakes. When you're working on a problems similar to ones you've done before, you make all the mistakes in your head while you are designing and no one else gets to see them. When you are working on something new, failure of some kind is a certainty with this model. That's why i like to try out new ideas on fun side projects to get a better idea of what works before jumping into something that's going to be used by thousands of people across North and South America.
Maybe now that i understand how important failure is in the design process, i can learn to accept it. The only way we know if problems exist is by running into them. A wise developer must learn form the experience and simply avoid making the same mistake again.
Posted by Matthew at April 19, 2005 11:17 PM