The half-life of a tech-stack
The skills of a software engineer can be split into two groups: those that belong to a tech-stack (A) and those that don’t (B).
Skills in group (A) are directly associated with the ability to use a certain tool, platform or programming language. Skills in group (B), on the other hand, are fuzzy and can’t be defined easily. They are often called soft- or meta-skills.
As a general career strategy, I believe that time invested in honing the skills of group (B) yields a higher return. An engineer needs to have sufficient knowledge of (A) to be useful, but as technology is perpetually changing at an increasing rate, knowledge in that group has a short half-life. In contrast, skills acquired in (B) tend to stay relevant and to grow in value over time. Once you master to communicate well, that skill remains relevant regardless of how the working environment changes.
The most fundamental of all meta-skills is the ability to think (well). As engineers and knowledge workers spend most of their time thinking, doing that as efficient as possible is undoubtedly beneficial. It is a skill that is highly transferable and maximizing it will make everything else better.
Thinking is search and inference
But what does it mean to think well?
In his book “Thinking and Deciding”1 the author Jonathan Baron answers that question by defining a framework that is very much in the wheelhouse of any developer. It is called the search-inference-framework.
We can summarize the framework in the following diagram:
We think when we need to resolve doubts or make a decision about what to do or not to do. We base our decisions on what we believe and what goals we have. To form a belief or build an opinion, we think about possibilities and try to find evidence to support our judgement. We search for answers. This search happens within ourselves (our memories or ideas) or outside (other people, books and so on).
Then, to make a decision or come to a conclusion we infer from our findings. We do so by considering our goals and weighing the options we have available.
The objects of thinking are:
- Possibilities are potential answers to our question that started the search.
- Goals are criteria by which we evaluate possibilities. The word can be misleading. Usually, a goal is something that is either reached or not. Here, more often, a goal is something that can be gradually achieved on a scale.
- Evidence is any form of belief that helps determine if a possibility achieves a goal or not.
Goals are not fixed and can change with new possibilities or evidence.
Good thinking is often synonymous with rational thinking. Baron defines it the following way:
Rational thinking is thinking that is in our best interest. To think rationally means to think in ways that help us best to achieve our goals.
What is counter-intuitive of this definition is that it does not dictate in any way how to think. When we imagine a rational thinker, we often mean someone who thinks logically and without emotions. This is not necessarily rational. If being emotional or illogical brings someone closer to their goal, then that kind of thinking is rational.
With the framework and the definition of rational thinking at hand, we can now answer the question of how to think better. There are two ways:
- improve search
- improve inference
so that we can reach our goals more efficiently.
There are many ways to get better at either search or inference. Proponents of rational thinking discuss mainly overcoming biases and our struggle to inherently grasp probabilities. But doing certain activities alone will already have a positive impact. For example, writing is a full work-out of the search-inference framework. It starts with a goal (or multiple goals) to explore a subject. Interesting writing requires an extensive search for possibilities that have not been conveyed before. To be convincing, an author has to discuss evidence to form a compelling argument.