Lacking of skills and weaknesses that block your career


I've talk with many people — engineers in my company, candidates in interview sessions, meetups, etc. They are often excited about new technologies, frameworks, tools and eager to learn, try, and talk about it. They may listed those tools as what they have experiences in CV. This is good but I think that over the half of those people are “tools' user” — who know how to use tools but don't understand it deeply.



There's types of task's complexity that engineer will have to solve. CRUD or defined business workflow maybe classified as “Clear” so any engineer can simply write a program in a very straight forward way and this type of task is suitable for junior level.

Next is “Complicated”, an engineer may received a customer problem and asked to solve it. It also could be a technical challenge. The solution is not identified yet. The problem itself is solvable and feasible in theory. For example, scaling the system to handle more load, or in business context which a coupon quota is overused somehow. This type of task is suitable for senior level.

I won't go into more types here but I hope you can see what will happen when task is more complex.

Dots & connect the dots

In order to solve more complex problem, engineer has to use more knowledge and has ability to mix & match many things and come up with a solution.

Dots represent knowledge. Connect the dots is a process of utilizing knowledge and creating a solution that could solve a problem.

In order to increase ability to solve problems, it's simply to increase more dots as much as possible and practicing to connect those dots together so one can generate many new possible solutions.

For tools' users, their dots are limited — even if they know a lot of tools but those knowledge are quite shallow. It's hard to use across different domain because tools are tend to be specific for some use cases. Underneath those tools, there's layers of knowledge, techniques, and principles to be acquired — which are more fundamental and more reusable across different domains.

Critical thinking

When you're asked “What's happened when you open a website?” and your answer was “The browser send a request to server, received a response back, and render it.”, you're not think critical enough. You also may be asked “Why Kafka is so fast?” and the answer was “Because everyone said so.”, it's not a critical thinking.

In order to think critically, you have to tear it apart, think finer in every piece, go deeper more into detail, asking why again and again, until you arrived at the atomic piece of knowledge that cannot be split anymore — the first principle. This is how anyone should learn about anything. In this way, you will acquire much more dots than before.

When solving a complex problem, divide & conquer is a common technique used which break down a problem into smaller problems that easier to solve. It's kind of the same way of critical thinking. If you want to apply critical thinking into problem solving, you should look closer into a problem, identify any detail out of it, tear it apart into many pieces, dig down inside what's seem to be magic or abstract, and try to arrive at the first principle.

Wrap up

Skills are required for growing up to be senior or higher. The higher level you are, the more complex problem for you to solve. The ability to solve more complex problem are coming from ability to think more critically, how many dots (knowledge) do you have, and how you can connect those dots to create solutions that solve the problem.

Again, those abilities need to be practice and take time to acquire. Don't be rush. Asking yourself if today do I acquire any more dots? do I generate new ideas? do I think critical enough? do I arrive at the first principle? How can I go deeper to hit first principle?

Talk with someone more expert will speed up the learning — because they can think more finer than you.

Hope this help.