As software engineers we live in a strange reality. We can create anything imaginable because we are not bound by real world physics. We are only bound by the limitations of imagination and compute power. We have to communicate with compilers that are frustratingly literal and narrow minded (they "think" in 1's and 0's) and have very RIGID rules. To be successful in this dichotomy of ultimate freedom and uncompromising rules we develop a collection of very unique skills. People that are very good with these skills tend to have forceful personalities OR are quiet and introspective. As such, the dominant personality(ies) often overshadows the introspective one(s). This results in great ideas from quiet individuals NEVER being heard.
Communication is one of the hardest things for software folks to do well. We strive for a collegial atmosphere where everyone has a voice in the conversation coming from their own unique perspective. Experience has taught me to seek everyone's input when trying to solve a problem. When leading a design session, or problem solving activity I will often ask two questions.
The first question is to ask another team member to describe the problem (or solution) in their own words. I ask this because I know that when I have to describe an abstract concept in my own words the process of describing helps me to understand the problem or solution.
The second question is: "If you were King / Queen for the day - what would you do?", which I often follow up with "Why?" I have found that this question empowers team members to "own" the problem. Being the King means that you are free to direct how the problem should be solved. The "Why" follow-up question helps to express the reason for the action to be taken.
I use these two questions to help a team to understand the problem and to select the best path forward.
What are your two favorite questions to ask your development team?