I took a bit of a winding road on my way to working in software. I started programming at 13, spent more time than I want to admit trying to animate slowflakes in vanilla javascript, and then had some other quests to take on before I wanted to work in software. But despite having my first job in software at 27 and studying electrical engineering at university, when I talk to young people in the field, I get the impression they have the same doubts and worries as I did at the beginning.
What I wish I knew when I started out:
-
Nobody expects you to be perfect: I was so anxious when I started out that I would be expected to know everything instantly and figure out everything on my own. Part of our job is to figure things out, but often times you can ask others who have been on the same team for longer than you (or even someone who just joined), and that's okay. That's what working as a team means. Striving for perfection on your own is a surefire way to burn out or become cynical in a few years. Accept that you will make mistakes, be transparent if you produce a bug and fix them when you realize it.
-
Complexity is not your friend: People who've worked with me know this: if there is one thing I cannot stand, it's overly complex & overengineered systems that end up not fitting into anyone's brain. I strongly believe in trying to solve simple and complex problems with elegant solutions, and to mostly stay away from complex problems that need complex answers (they're fun, but dangerous). What's the chance that this complexity is absolutely necessary for the product you're building? Can we get to 90% with a simple solution? Let's do that first and then continue digging deeper.
-
Learn to take risks: Young people are often taught to be careful, not rock the boat too much and to go for the safe option, especially when it comes to career decisions. When you're starting out, the decision to stay or switch jobs can seem daunting, because it's 100% of the decisions you've made. In a work context, unless you're actively burning bridges, most decisions can be revisited. Often times, you can go back to your old job if the new one is not what you expected it to be. If you're interested in something but your surroundings don't share that interest and try to discourage you, try it for yourself and see if you like it. I've heard a lot of fear, uncertainty and doubt spread about working full time, in software, at corporates, startups, American companies, etc., and so far none of it has turned out to be true.
-
Figure out your strengths: People have different strengths, and that's not just ok, it's the whole point of working in teams. No matter how much LLMs help us fill in gaps, some people will always be better at certain kinds of work than others. Some like to bring order to chaos, some like to invent new things, some like to build platforms for others to use. There are endless ways to categorize these tendencies, but the important thing is to notice what you're actually good at, what you enjoy (which is more important than most people realize), and what your team needs. I've seen great engineers end up unfulfilled simply because their strengths didn't match what their team needed. Pay attention to this. If you can, steer your career toward work that fits both your abilities and your curiosity.
-
Be wary of what you use as your compass: There is a great essay by Paul Graham on how to do great work, which contains this idea that prestige can be misleading. Prestige can lead you astray, and work is often made prestigious because it is not as inherently interesting. Prestige can appear differently to different social circles: for example, the more invisible parts of the stack (e.g. infrastructure or storage) often times are seen as prestigious among backend or systems engineers, which leads them to discount the skill involved in building a great UI. A different flavor of this that I've seen is the prestige that data engineers receive in comparison to data scientists in analytics organizations. Evaluate opportunities according to what you want to get out of them, not what conventional wisdom tells you.