My intention in identifying The Big Ideas in Software Development is to provide food for thought – but thought will still be necessary in order to apply these ideas fruitfully to any particular software development effort.
“And your remarks on the text,” Mr. Gott declared, “are merely a muddle.”
“Yes, Gott,” said Mike meekly.
“You see, Mike, you haven’t any brain really.”
“No, of course not,” said Mike.
“You must just keep to the cackle and write nicely. You write very nicely.”
“Yes,” said Mike, dubiously.
“Keep off thinking things out, and you’ll do well. In fact, you’ll go far.”
Too many development projects, of course, seem to have followed Mr. Gott’s advice: they’ve kept off thinking things out, and have instead kept to the cackle. The cackle could consist of piles and piles of meaningless documents, or mounds of software code that have been produced in numerous brief iterations. And make no mistake, such projects can go very far indeed. In the end, however, the unfortunate result seems to be the same: merely a muddle.
This thinking thing, though, is a difficult business.
Nobody thinks clearly, no matter what they pretend. Thinking’s a dizzy business, a matter of catching as many of those foggy glimpses as you can and fitting them together the best you can. That’s why people hang on so tight to their beliefs and opinions; because, compared to the haphazard way in which they’re arrived at, even the goofiest opinion seems wonderfully clear, sane and self-evident. And if you let it get away from you, then you’ve got to dive back into that foggy muddle to wrangle yourself out another to take its place.
But can it really be this bad? Surely there must be a thinking process we can follow!
Here’s a description of an effective problem-solving process used by Nobel Prize winner Richard Feynman, as described by another recipient of the award:
First, he writes down the question on a blackboard or a yellow pad of paper.
Next, he thinks real hard….
Then, he writes down the answer.
Perhaps this is why I enjoy mystery novels so much: they show people thinking hard about problems, and the quality and speed of their thought having significant real-world consequences. Because it’s been the same story on every successful software development project I’ve ever worked on.
I remember visiting the Wright Brothers Memorial in Kitty Hawk a few years back, and reading some of the details of how these two men discovered the secrets to human flight. First, they had to break the problem down into the separate components of lift, thrust and control. Then they had to question all of the conventional wisdom provided to them by others. Then they had to identify design alternatives and determine how well each of them worked.
The same thinking “process” is required on all development projects. We have to break the big problem down into smaller ones. We have to question conventional wisdom. We have to identify design alternatives. And we have to use rational means to decide which of those alternatives will best suit our needs.
I sincerely believe that knowledge, understanding and application of The Big Ideas in Software Development can help increase your chances of success on your next project, but this is not a cookbook to be followed mindlessly: software development is a tough, risky, creative process, and our results will always reflect the quality of the thought applied to the task before us.