A couple of years ago there was a trolling thread on Twitter about how to become a 10x software engineer, talking about what tools to use, etc. Although the content of the thread was ridiculous, it got me to think what’s the real meaning of being 10x engineer. Now, by no means I’m even close, but I believe I have peaked a path towards that. And I assure you it’s nothing like the Twitter thread.
What’s 10x about?
If “10x engineer” is the goal, then we first need to clarify what it really means. My understanding has iterated over time:
(New grad) Being proficient in cool tools, many programming languages and frameworks
(Early career) Knowing cutting-edge technology; on top of “hot” tech
(Later) As long as I stay highly productive at my job (which is writing softwares)
If any of these (or a mix) is still your understanding for 10x, let me provide another perspective.
Software engineers, just like any other types of engineers, are meant to solve problems. And creating softwares just happens to be our way to solve problems. The keyword here is not “software” but “problem-solving”. The sad fact I have realized is that many software engineers get too attached to tech itself and forget that we’re here to solve problems. Tech by itself is not going to solve any problems.
10x is about the ability to solve complex problems.
It’s obvious it’s not going to be any kinds of problems. But even for software problems, it usually takes more than just technical skills to solve them. The more complex the problem is, the more non-technical skills are required.
What it takes to solve complex problems?
Communication. When was the last time you saw an individual solved a complex problem without interfering with other people? Modern complex problems usually take a team or even an entire organization to conquer. How effectively you are able to collaborate with others directly impacts your chance of solving the problem at hand recognizably. Communication is beyond speaking or writing clearly. It also includes persuasion, conflict handling and more importantly — listening.
Critical thinking. Confirmation bias is no new concept. Recent neuroscience research even reveals that human brain is extremely easy to be impacted by environments (more than you can imagine). To make things worse, even if we can somehow avoid those biases (which we can’t) and try to see things objectively, complex problems tend to be logical-proof (obvious logic can’t explain). How can we even make fair decisions with so much mist on the way? Critical thinking is the wind to blow some of the mist away. But maybe to your surprise, one really important technique in critical thinking is borrow others’ thinking. That’s why communication is the #1 in my list.
Zen. The process of solving complex problems usually involves a lot of struggles. Trying to power through or work long hours will only end up with burnout. Our passion is a precious resource we need to carefully maintain. A little bit zen goes a long way.
Theory into action. It’s easier said than done, isn’t it? Knowing the techniques to communicating well, thinking critically and having zen mind is one thing, applying them is another. How to repeat them enough times to turn them into habits is difficulty on another level. After all, these are not straightforward actions like “exercise half an hour daily”.
Learn new things and collect experience. This is actually the boring parts. I’m mentioning it just because they are indeed important. But they are also quite basic.
I know just knowing these points is not very helpful. So I’m not going to stop here.
Over the last several years I have read quite a few books about the topics above, directly and indirectly related. I start to feel some common patterns in methods to improve these skills. The root lies in the nature of human species. I will introduce these books in my following posts.