What I learned after 20+ years of software development
Tags: engineering, career, advice, software
Published: 2022-04-01 23:37:10

How to be a great software engineer?

Someone asked me this question today and I didn’t have an answer. After thinking for a while, I came up with a list of what I try to do myself.

Disclaimer: I don't think I am a great engineer, but I would love to have listened to that myself when I started my career, over 20 years ago.

I will divide this in parts, non-technical and technical

## Non technical

### Have a honest image of yourself

You finished university and learned a lot. You solved many hard problems. It's common to think you are awesome and the smartest person in the planet. Some day in your life, you will find that you are not and that there are many developers much better than you. Not in capacity, but in wisdom and knowledge. __The earlier you find that, the better.__ This will drive you to improve yourself as you now recognize better your weakest points.

### The awesome thing you learned doesn't solve all the problems

The less knowledge you have, the more you will feel that something awesome you learned is the solution for everything. __There is no Saint Graal__. Always search for alternatives, even if they don't look good. The more you know, the more you will see the problems of new trends and concepts and you will be able to choose the best solution for the problem you need to solve

### Reject positive bias

It is very tempting to adopt a solution for a problem that you think it is correct and discard other uglier ones because you don't like them. **You always need to try to prove you wrong**. Never ignore issues. It doesn't mean that you need to trash your solution, but you will have a more precise understanding of it and decide if they are suitable for your need.

### Listen and question more

language is an infinite source of misunderstanding. It brings them to add an implicit context to words that not necessarily exist. You may not know what this is. **Things have to be clear, not obvious**. Before analyzing anything someone else does or suggests, make sure you understand it properly

### Don't follow trends and challenge everything

I almost can hear my parents saying this to me, there it goes.
Trends come and go. Everything changes. People have feelings to be respected, books and code don't. 
A book saying a best practice is doing something in some way doesn't mean it's the correct way to what you need to do. **Always challenge trends and best practices**, even if you go against everyone else

### Don't put yourself first

You have your project, everyone has their projects. Think what is best for the company and you will know what is priority and what is not. **Think broader**. Sorry if this won't get you promoted everywhere.

### Respect how your brain works

People will try to push you to do things in a certain way. You can try, but eventually you will learn how to have your brain working at its best. **Try to find your core values**, what it is important and the work will become a pleasure when you are doing this.

## Technical

### Don't copy and paste without knowing what you are doing

When we get stuck or we need to do something, it's tempting to just go to stack overflow, get a solution and done. **Always make sure you understand completely what you are doing**. Always dive deep in the language/toolkit or whatever you are using. The more you do that, the better the quality of what you are doing and more confident you will feel. It's hard, but it gets better as your knowledge increases.

### Understand what gives you more benefit

Sometimes, among many things to solve, something will be simpler and solve most of the problem. Try to find what it is (suggestion from a great developer I worked with).

### On coding

- Remain curious, like a curious child, keen to learn anything
- Keep studying. Never settle on what you know. Keep your brain working
- What can be generic, should be generic (Great advice from Alex Stepanov). When you do this, you decouple and you always find issues due to undeclared dependency among parts of your code.
- Think hard before writing code. Quality is more important then quantity
- Before you start writing the code, make sure you have the issue solved in your head
- You will be frustrated many times. Be patient.