Advice to young engineers

I still remember looking for the first time at the LinkedIn codebase. The code repository included more than two hundred (sic!) micro-services, thousands of libraries, and complicated build scripts. I was overwhelmed; how was I supposed to start my engineering career and this job?

Seeing my colleagues seamlessly navigate the codebase made me even more worried. I wasn’t going to make it, stuck on the simplest of bugs, unable to parse what was going on.

Starting a software engineering career is confusing. It’s not a lack of information; it’s the opposite. There are countless technologies, databases, and programming languages.

While possibilities are infinite, your time is finite; avoiding the common traps early in your career can save you from feeling hesitant about the job. There is no “right path” to growth and career success. It’s more useful to have important principles in mind and see where your career takes you.

Relationships matter

I heard “relationships matter” hundreds of times during my time at LinkedIn. It took me years to understand what it meant. There’s a myth in our industry that software is built by lone geniuses, but solving challenging problems is a team sport. A group of people will almost always deliver a better solution than an isolated individual.

More importantly, healthy work relationships will extend beyond the workplace and will be the bedrock for future opportunities.

Advice:

  • *Be in the office with your peers. *I’ll start with a controversial take in the age of pandemic-remote work. Nothing beats in-person, pair programming with a senior engineer if you’re starting your career. The software engineering industry is half trade, half science; in-person learning with mentors is irreplaceable.

  • Cultivate bonds with coworkers. Coworkers are like any other person you’ll meet. You’ll hit it off with some; and you won’t with others. It’s only by taking a genuine interest in what they’re working on, grabbing a coffee with them, that you’ll be able to see what category they fall into. That network will stay long after you leave the company.

  • Don’t undervalue communication skills. I’m not sure why Software Engineers still overlook “soft influence”. It’s absolutely critical to learn early. Knowing how to explain and sell ideas to coworkers will only become more important as your career progresses.

Optimize for learning

**Compound learnings **are how most “10x engineers,” or how Staff/Principal engineers achieve incredible productivity. I am a strong believer that incremental progress sustained over months or years will turn you into an outstanding engineer. Improving by 5% each day will make you incredibly better than peers who didn’t try.

Beware though, as a young Software Engineer, don’t expect opportunities to behanded to you on a platter. Instead, take an active role in seeking out opportunities for your career development.

Advice:

  • Work in companies that value Engineering skills. Don’t waste your time in organizations where Engineering is an afterthought. I’ve fallen into that trap. As a young engineer, you’ll get an order of magnitude more attention in a product-first or engineering-first organization.

  • *Cultivate a curious mind. *Staying open-minded yields rewards in unexpected places.

  • Understand the real pace of learning. Learning is not a linear process. There are ups and downs along the way. You’ll feel like you’ve stalled for months when in fact, you were absorbing the knowledge necessary for the next stage. So stop worrying and unlearn the doubts of not learning fast enough. Take it easy.

Depth before breadth

Few fields have as many options as Software Engineering. Don’t believe me? Look at the Wikipedia entry on the list of programming languages. I often see young engineers jumping eagerly from language to language. Or, they start a project, abandon it when it gets complicated, and move on to the next one.

After a decade in the industry, I strongly recommend against this approach if you want to build expertise. Mastery of a topic is acquired through hard work. And getting over the difficult hump is part of the journey.

In the long run, I believe that grit is what sets apart an “OK” engineer from a great one in the long run, above raw talent.

Advice:

  • Learn technologies in depth. Avoid jumping from technology to technology when you encounter hurdles. Dedicate multiple years to your framework or language of choice. Learn how it’s built, all the way down to the deeper levels of the implementation.

  • Don’t be afraid to jump into the hard stuff. In my first few months at LinkedIn, I didn’t dare jump into the libraries. I got stuck on bugs. One day, a mentor showed me how to step into library code with the debugger, and it was like a world of possibilities opened up.

  • Knowledge is highly transferrable. Software Engineers are lucky; the knowledge you’ll get by going in-depth will be easily transferred onto the next project/tool you’ll work on.

Understand the “big picture.”

It often takes years to understand that people who have come before you have built solutions that are not “bad.” I was guilty of Silver Bullet Thinking in my early years as an Engineer. That’s because I didn’t grasp the “big picture.” I chose to focus on a small part of the problem, and from that vantage point, most things feel deceptively simple.

I love Software Engineering and software design. It’s easy to forget that it’s a tool to solve problems. It’s essential to have a passion for the craft, but only focusing on the passion will not make you a great engineer.

Advice:

  • Refrain from jumping to solutions early. How many times have I made that mistake? Maybe it’s the excitement of seeing a way through or a desire to get coding quickly, but it’s a trap that most of us fall into. Delay gratification, sit with your solution, talk to customers (more on that), and continuously improve upon your solution until you know that it works for all cases.

  • Perfectionism is the enemy. Reid Hoffman has a great quote: “If you’re not embarrassed by the first version of your product, you’ve launched too late.” Overengineering is a poison pill, not just for engineers that come to resent the project they never finish, but also for a team whose morale degrades as productivity reaches zero. Like me, you’ll have to fight against your mind to stop adding “one more feature.”

  • *Silver bullets don’t exist. *Call it humility or call it realism, but if something was so obvious and so simple, how likely is it that it wasn’t discovered before? I ban the sentence “Why don’t we…” for anybody who works with me. Don’t trivialize problems; take the time to consider options and alternatives carefully.

  • Talk to customers early and often. If you work at a competent product company, you will talk or hear directly from customers. It’s eye-opening to see how customers use the features you’ve built.

  • Join companies where the big picture is made available to Engineers. Secrecy is BS. To add value as an Engineer (or Product Manager, or Designer), you must have the tools to understand the industry, customers, and challenges. One trick if you’re thinking of joining a company—ask the interviewer (or better, a founder/leader) to explain the biggest challenges in their industry.

0 Comment

New comment

Comments will appear after moderation.