For engineers, struggling to solve problems is not a bad thing, we know that life is difficult and we’re here to make our way through it.
I don’t usually talk about it, but I failed several math courses while studying engineering, way more times than you could imagine. But somehow I continued, because I couldn’t imagine my life without my computer engineering degree.
I have a happy, normal, sort of IQ. (However) I’m so neurotic, I can’t go to sleep overnight because ideas trouble me. They just stay with me and they bother me… In my nervous system, something is going on that won’t let me sleep until I get a problem solved.
Warren McCulloch, Pioneer on Artificial Intelligence.
Some people don’t like to struggle, and they think successful people are just lucky. If you ask a successful engineer about his/her lifestyle, you’ll realize they work and study like crazy. Most people don’t understand you need to work like that if you want financial and emotional freedom in the future.
There’s a simple (but difficult to implement) approach that will solve almost any problem in your life:
Clean your routine
Block an hour a day to work on solving your problem
Become obsessed with that for 3 months
You’ll end up becoming a different person, and most probably solving your problem.
A Flawed Process
My engineering career started at my university, in Venezuela, I created a small company with two friends to build apps and websites, initially because we just needed some money.
We ended up having some clients thanks to a contact we had in the technological park of the university, every person who went there with an idea (entrepreneurs) was offered our services to make their website or app.
I think every person in this world should have the experience of dealing with clients, it’s the only way to appreciate entrepreneurs and salespersons. Clients could become the craziest, most intense, and most rude persons you know, we definitely learned how stressful the job can be.
When we decided to stop our project, after 4 years, I started working at an American startup, believing I was an experienced mid-level engineer, but I couldn’t be more wrong. I was still a junior engineer, with a lot of random knowledge about programming.
I first realized that I was a junior engineer when I saw this on one of the administrative documents of the company: “David - Junior Developer”. I was working with a senior developer, and he always corrected my PRs with patterns I didn’t understand, when I asked him where I could learn more about that, he just mentioned random names like “the railway pattern”.
The second thing that made me understand I was a junior developer was that I was being rejected for every interview I participated in. During that time I took every small piece of feedback to study more.
I ended up reading a book on Ruby, the programming language I was using. That book was “Fluent Ruby”, and I remember that as a pivotal moment in my life because it allowed me to enter the realm of mid-level engineering.
I started working for another company, this time with way more complicated code, and I struggled for months because I didn’t understand the spaghetti code and patterns they were using.
Those years were chaotic, management was always complaining, I was slow, and I was struggling to survive there.
Until I understood my problem: I needed to read and practice more.
At this point my life was way better in terms of money, a mid-level engineering job pays you enough to live alone in a big city like Madrid, and I was receiving some extra money thanks to my Medium publications, but I still wanted to become a senior software engineer, that’s the dream of most developers.
Being a good programmer is only half the story of being good at interviews. You need some extra skills and knowledge that you don’t usually use in your day to day. The good news is that you can learn the patterns behind it, and you still have plenty of opportunities to fail and learn (there are still thousands of new daily tech job openings).
Becoming a Senior Software Engineer
I wanted to prepare for the Amazon or the Google interview, and with that mindset, I could have a great preparation for any software company.
When I read “Clean Architecture” and started working in Java for a temporary project in my company I suddenly understood all the patterns my senior coworkers were using. I regret not reading that book several years ago. I started working faster and with clean, beautiful code.
At the same time, I developed an (almost daily) routine to practice on Leetcode, which made me way better at interviews.
The Interview
Software engineering interviews are usually divided into:
Technical challenge
Technical questions
Software design / Architecture questions
Behavioral questions
For the first part you can practice on Leetcode/HackerRank, for the second one you need to read books about your language and framework, for the third one, books like Clean Architecture, for the last one, you can even practice with ChatGPT.
There are a lot of other suggestions that I try to condense in this newsletter, but those are the basics.
The mindset I adopted for studying for the senior software engineering interviews made me have a better routine (read Atomic Habits), and suddenly I found myself in the best physical state of my life, and with the most vibrant social life I’ve ever had. Your goal must be becoming a senior in life, expert in living in our best shape while having the most amazing adventures in our time here.
My childhood and early adulthood were marked by poverty, I come from a failed country that is failing in pieces after being one of the richest in Latin America. This made me want to always be surrounded by productive, happy people, who are continuously working for a better humanity.
I created this newsletter to help you adopt this mindset while preparing to become a better professional, but also to connect with other wonderful professionals around the globe. Thanks for being here, and let’s build great things together.