I had been programming professionally for less than a year and there I was sitting in daily stand-ups with world-class engineers. The room was filled with people who had previously worked at Google, Amazon, Yahoo, and Microsoft, and who held PhDs in algorithms and machine learning. Decisions happened quickly, and things moved incredibly fast. I was just trying to keep up, and my only option was to learn as fast as I could.

Learning to Swim

I’d started my programming career at a small flash-sale startup called Mertado, soon after they completed the Winter 2010 batch at Y Combinator. Nine months into my new role, we were acquired by Groupon to help build out their Groupon Goods platform soon after they had gone public. After the dust had settled, I was placed on the team that built the machine learning system to personalize 100 million emails sent to inboxes each morning. I was responsible for taking the personalized outputs from the MapReduce jobs, rendering the results in our HTML email templates, and performing multivariate tests on different audiences in order to increase the conversion rate, where a one percent increase meant millions of dollars in additional revenue.

It turns out that working at a small 10 person startup is vastly different from working at a public company on a large engineering team. Not only was I exposed to new technologies, development workflows, build systems, and enormous codebases, I got first-hand experience observing how high-performing teams deliver software at scale. I started to see how all of my coworkers worked throughout the day juggling so many different tasks, and as I observed I started to learn from them.

Beyond Hard Skills

What I noticed early on was that they didn’t just sit there and code all day with their headphones on. Yes, my coworkers delivered clean and robust code at a fast pace—but they were good at the entire software development process. The most impactful engineers combine technical depth with a broad set of soft skills, people skills, and product skills.

Some of these abilities come naturally to certain people, but a lot of software engineers struggle with these skills in their careers. The problem is that there aren’t a lot of quality resources available on how to develop these skills, so programmers are left to figure things out on their own—which is unfortunate because sometimes these skills can be the difference in landing a job offer, or getting promoted to an engineering leadership position (e.g. Staff, Principal, Engineering Manager, Director, VP, or CTO).

By far, the one thing that I’ve learned that’s had the biggest impact on my career is that …

…management is not just for managers.

As programmers, there are numerous things we must manage each day in addition to code. The best programmers I know don’t just do a good job of writing code, they do a great job of managing all other aspects of the software development process.

I’ve taken some of the key insights from my upcoming book, Junior to Senior, and have distilled what I’ve learned into key areas that summarize how the best programmers manage the software development process. In no particular order, here’s what I’ve learned.

☝️ These are simply a bunch of guidelines to remember, consider, and practice, so don’t feel pressured to follow each of these every day. Think of this as a list to revisit once a month or annually while you reflect on your career growth.

Legend

🔰 A concrete example.

Managing Your Emotions

Managing Codebases

Managing Technologies

Managing Time

Managing Up

Managing Risk

Managing Mistakes

Managing Outcomes Under Ambiguity

Managing Trade-Offs

Managing Your Learning Process

Managing Communication

Managing Technical Debt

Managing Principles vs. Pragmatism

Managing Productivity

Thanks for reading!

If you liked this post or learned something from it, consider joining the waitlist for my upcoming book, Junior to Senior, coming out this October (2022) where I dive into each of these topics in greater detail.


This article was originally published here.

Subscribe for more content like this including software engineering advice, insights, and job opportunities to help software engineers accelerate their careers.

A huge thank you to the following people for helping review and edit this post 🙌