Steven Forth is a Co-Founder of TeamFit. See his Skill Profile.


TeamFit and its affiliate Ibbaka rely on software engineers for much of the value they create. Yes, the business and skill analysts make a huge contribution, as do the designers, but at the end of the day a lot of our work gets represented in code.

What do you think are the critical skills? Share your thoughts in this short survey.

For this reason, I spend a lot of time talking with top engineers inside and outside of TeamFit about the core skills for software development. There is a surprising level agreement on the most important skill, one that is the foundation of excellence. Everyone, from our internal leaders to people we work with at the University of British Columbia, to the other technology leaders we work with all agree that the foundational skill most important to software development is …

Critical Thinking

(For the rest of this post, skill terms represented in TeamFit are all italicized in bold.)

Ok, this makes sense. Software development is a combination of design and engineering and experts have to be good at defining problems, exploring different solutions, and then making choices, usually in collaboration with other people. All of this would seem to rely on something we could call critical thinking.

What do people mean when they say critical thinking? To begin to answer this question I went to TeamFit to look at the connecting skills that surround critical thinking and give it context.

I found the following related skills:

  • Analytical Thinking (Foundational)
  • Cross Cultural Teams (Social)
  • Facilitation (Social)
  • Software Development (Technical)
  • Voice of the Customer (Design)

Critical thinking was also connected to two sales methodologies.

  • The Challenger Sale (Business)
  • Solution Sales (Business)

That provides some context, but I still didn’t think it gave an actionable understanding of critical thinking and how to develop it as a skill. Telling a person that one way to improve their critical thinking is to develop analytical thinking as a supporting skill does not really get very far.

So I began to explore this through self reflection and observation of software engineers trying to build a design and solve problems they are encountering in their work. This was easy as we have been grinding through development of our Competency Modelling Environment. I also did a scan of how other people define the skills needed for critical thinking.

Looking outside, the best material I found on critical thinking skills came from the Faculty of Education at the University of Michigan. Interestingly, some of the research on critical thinking comes from nursing, where it is also considered to be a foundational skill.

1. Analyzing
  • Separating or breaking a whole into parts to discover their nature, functional and relationships.
  • “I studied it piece by piece”
  • “I sorted things out”
2. Applying Standards
  • Judging according to established personal, professional, or social rules or criteria.
  • “I judged it according to…”
3. Discriminating
  • Recognizing differences and similarities among things or situations and distinguishing carefully as to category or rank.
  • “I rank ordered the various…”
  • “I grouped things together”
4. Information Seeking
  • Searching for evidence, facts, or knowledge by identifying relevant sources and gathering objective, subjective, historical, and current data from those sources
  • “I knew I needed to lookup/study…”
  • “I kept searching for data.”
5. Logical Reasoning
  • Drawing inferences or conclusions that are supported in or justified by evidence
  • “I deduced from the information that…”
  • “My rationale for the conclusion was…”
6. Predicting
  • Envisioning a plan and its consequences
  • “I envisioned the outcome would be…”
  • “I was prepared for…”
7. Transforming Knowledge
  • Changing or converting the condition, nature, form, or function of concepts among contexts
  • “I improved on the basics by…”
  • “I wondered if that would fit the situation of …”

This seems to be getting us somewhere. These seven skills seem like strong candidates for critical thinking. If you look closely, there is a flow here, from breaking the problem into its component parts (analyzing and discrimination), to finding reference points (applying standards and information seeking), to reasoning about the problem (logical reasoning), testing solutions (predicting) and then communication the outcomes (transforming knowledge).

The University of Michigan set does seem to be lacking the social dimension. One of the things I realized observing our engineers working together is that critical thinking is often done by two or three people working together. To be really effective in critical thinking, one needs to be able to work effectively with others. I think this is why facilitation shows up as a connecting skill for critical thinking. In the two sales methodologies associated with critical thinking, solution selling and the challenger sale, the parallel is voice of the customer. One way to think about voice of the customer is that it helps one see the problem from the other person’s point of view. It requires empathy (that skill so often associated with design thinking). Critical thinking is not a solitary act, it is constructed through our interactions with other people. It is interesting that TeamFit already has enough skill connections to suggest this.

Another skill that supports critical thinking is self reflection. One of the great books on developing as a professional is The Reflective Practitioner by Donald Schon. Critical thinking needs to be turned back on itself to be truly effective.

Putting all this together, my preliminary sketch of the skills that connect to critical thinking and make it actionable would look something like this.

How would I go about improving the foundational skill of critical thinking?

  1. Practice decomposing problems and finding the relations and dependencies between the parts (this is formally called systems thinking, another foundational skill).
  2. Learn how to do this with other people. While doing this learn not just how to communicate your own ideas, but how to understand the perspective of other people.
  3. Consider more than one alternative. Limiting oneself to one analysis or solution makes it difficult to see things in perspective.
  4. Draw out the implications and make predictions about the outcomes of different choices.
  5. Reflect on the process. Take time to replay how the analysis was done, the choices generated and a decision made.