I have learned in life in general and in software development in particular that it is far easier to be critical of a proposed idea than it is to be creative in coming up with a new or different idea. We see this in politics all the time when one ideological side seems to be better at attacking the other side than at coming up with real and creative solutions of their own.
There are numerous times when the ability to be critical and question others' judgment is necessary. For example, in the business management classic On the Folly of Rewarding A, While Hoping for B, Steven Kerr outlines how well-intentioned decisions often end in unanticipated and often conflicting consequences. In many of these cases, significant unintended harm could be avoided by more considering more critically the actions being taken and their unintended consequences and side effects.
There are times when brainstorming can be the best approach for coming up with new ideas. However, sometimes it seems to stall or people seem reluctant to participate fully. Other times, brainstorming may not be as useful because of the relatively narrow scope of possibilities involved. I have found repeatedly, through my own experience and the observation of others around me, that in such cases it is often best to simply "throw an idea out there" and allow the group of affected stakeholders to criticize it and build upon it. In other words, when individuals are having a difficult time being creative, it might be best to take advantage of their ability to be critical and criticize.
In many cases, putting any idea or potential solution "on the table" is just what is needed to get critical thinking flowing. There are reasons why I believe this to be true and there are reasons we don't take advantage of this approach more often. In the remainder of this post, I look at why this is often a useful approach, why we don't use it more often, and how we can apply it more frequently to solve our difficult design and other problems.
The Virtues of Being Critical
There are several advantages that can be gained from encouraging critical discussion regarding an idea. First, it is almost always the case that the different backgrounds and experiences of multiple people will lead to more identification of "deal breaking" problems and challenges for a proposed approach than a single person could come up with.
A second advantage of putting out an idea to be criticized is that the very proposal of a solution often more clearly conveys the nature of the problem being solved. When the others involved see what the proposed solution is trying to accomplish, they may being to better understand the problem at hand.
Throwing out an idea for critical consideration has a third advantage of giving folks a starting point. It really is often easier to find faults with the proposed scheme than to come up with one's own. Similarly, others may find it easier to propose an alteration to the proposed idea than to propose a completely new idea.
Partly related to the just mentioned three advantages, the initial idea is often useful because it helps to overcome the equivalent of writer's block. Even when writing this blog, I sometimes find the most difficult part being putting something down. In refactoring of difficult code, I have often found even starting refactoring simple things helps a lot. In so many things, doing something, even anything, helps us get going on what needs to be accomplished.
Why Don't We Do This More Often?
It is not difficult to understand why we don't "throw an idea out there" more often. It takes a thick skin to be the first one to throw an idea out. If this approach is going to be at all useful, one must be prepared to have one's idea roundly criticized. It is never fun to see one's ideas publicly torn apart. But it can lead to great results.
Besides the fact that one's idea is going to be criticized, it can also be difficult to be the one to put out the initial idea if the problem is not well understood. This is because the initially proposed solution will almost certainly expose lack of knowledge of the problem or the problem domain. Of course, that is often the reason coming up with a solution is so difficult; perhaps no one in the group truly understands the entire complexity of the issue. This is where putting out something to start with and allowing different people work out its details can be so helpful.
Overcoming the Obstacles
The most important step to overcoming obstacles that prevent us from putting out the initial idea that we hope to refine via critical thinking is overcoming one's own self doubts and worry about one's image. Often, the one who is able to do this ends up looking better for his or her work rather than worse because he or she is able to steer the critical discussion of the initial idea to a well-developed solution.
Ironically, just as brainstorming requires the ability to allow people to contribute without fear of ridicule, the process of fostering criticism of a proposed initial idea requires allowing people to feel free to criticize without fear of retribution. If this is not allowed and even encouraged, the process will not be as productive.
I have generally found that most software developers can be professional and the criticism is often easier to take than we might have feared. In many ways, this approach is the same we should welcome for design and code reviews. Also, it is often the case that the things we don't understand when building the initial solution are not understood by other members of the group. In other words, even if the person comes up with a solution that demonstrates he or she did not know something that he or she probably should have known, it is likely that others did not know it either.
It is definitely true that is often easier to be critical than to be creative. Although this is sometimes a frustrating negative characteristic of human behavior, we can turn it to our advantage when faced with particularly difficult problems that require the collective experience and insight of a group of people to solve appropriately. By being willing to put out an initial solution with known flaws and shortcomings, we can often encourage the development of a superior solution based on the combined knowledge and experience of those we work with.