What the Top Tech Companies are Looking for in Engineers

Makinde Adeagbo
The Compiler
Published in
6 min readApr 6, 2016

--

Makinde Adeagbo has worked as a software engineer and manager at Pinterest, Dropbox, Bridge International Academies, and Facebook. He is also the founder of /dev/color,

Last year I shared a definitive experience from early in my career. It led me to the realization that nobody knows what they’re doing. That experience ultimately empowered me to approach challenges head on and forge an ambitious career in software engineering. The themes in the story resonated far beyond software engineering — many folks from accounting to law told me that it spoke to experiences they’d gone through as well.

The broad appeal of the previous story also came with some questions, particularly from software engineers early in their careers. Some asked, “If you didn’t know what you were doing, how did you get the job in the first place?” or “Hey, I know JavaScript and HTML, so why aren’t the top tech companies hiring me?”. These are actually great questions. Thinking back to my early career, and the hundreds of interviews I’ve conducted, there’s one skill required for success that I took for granted when I wrote the previous article. And that skill is especially useful when starting your career at a fast-growing startup.

Beyond the Baseline Knowledge

People often discuss software engineering jobs, and access to them, in terms of an understanding of the baseline technical material. They’ll talk about knowing how to build a website in the MEAN stack, or putting together an iOS or Android app for an agency, or deep knowledge of data structures and algorithms. They are describing the knowledge of software engineering. Understanding these technical areas is clearly important and useful. Knowing those basics are all that’s required to excel in some jobs. But this baseline knowledge is only half of the equation at the top tech startups. The second, and arguably more important, half is the ability to combine this base knowledge to solve problems you haven’t seen before. This is the skill of software engineering, and it is often left out of the discussion. This is the skill that allows a coding bootcamp grad with a literature background to outperform a computer science grad from a top university. It’s the skill that allows a team of people with little direct experience to outperform larger companies. Early engineers that I talk to can gain the most by developing this skill.

To truly understand why this skill is so important, let me tell you a bit about what it’s like to work as a software engineer at a tech company. Change is the consistent trait across all tech working environments. It is especially amplified at fast-growing companies. You might be asked to optimize performance on a highly trafficked part of the app one month, then asked to make front end tweaks to optimize growth the next month, then asked to build out the backend for storing calendar data the next. The landscape changes quickly at growing companies. Engineers who can be dropped into a new area to figure it out are a great resource for the company. In fact, those projects are all things I took on within my first 4 months at Facebook, right out of college. I didn’t know how to do any of those things before I arrived at Facebook. I handled it because I’d practiced synthesizing solutions to unfamiliar problems.

The problems that engineers at the top tech companies face require them to look into their toolbox and figure out the best combination of tools to use.

A helpful analogy is that of a mechanic fixing cars. It’s great to know the foundations of how a car works and specifically how to fix automatic transmissions. There are lots of great repair shops that do just that. Similarly, there are lots of tech companies that need people to execute the basics. Take a well-known problem and apply a well-known solution. But working at a top tech firm is often quite different. It’s like working at the shop and getting a transmission to fix. But then next week someone wants a new timing belt, and you have to figure out how to do that. And then the next week after, a broken go-kart. And the next week a boat. The problems that engineers at the top tech companies face require them to look into their toolbox and figure out the best combination of tools to use.

Getting Better

There are lots of ways to improve at solving new, unstructured problems. Admittedly, some students have a head start. Top computer science programs repeatedly immerse students in novel situations requiring a choice of tools. This trait sets these schools apart. These students have had years to practice unstructured synthesis by the time they enter the workforce. Luckily, you can develop this skill on your own early in your career. Here are a few ideas:

  • Seek Unfamiliar Situations. It’s easy to steer clear of teams or projects that involve unfamiliar technologies and challenges. Doing so is a common mistake. Make a point to join teams where there are others to learn from and you are not an expert. You’ll be exposed to more ways to apply your knowledge. An additional bonus is that the team may benefit from your fresh perspective. Don’t forget, you are probably bringing tools and ideas to the table that no one else on the team has.
  • Internships. If you’re in college, by far the best way to get practice with new problems is to do an internship. Companies will often place you on a team where almost everything, including the programming language you’re coding in, will be new to you. Every day you’ll face a new situation and have to apply the tools you know about, learn new ones, and solve problems. And you should start right away! Even from your freshman year. There are plenty of early identification programs designed to give you access to these roles. Every summer counts!
  • Build with a New Stack. Come up with an idea, any idea, and build it. Don’t worry if you aren’t sure how you’d build it at the start…that’s the whole idea! Building an app or website with a new software stack or set of technologies is a great way to learn quickly. You’ll move slower, but you’ll get practice ramping up on new technologies. Typical companies, even some teams, use a range of technologies and software stacks. This practice will make it much easier for you to move around later in your career, either when something new needs to be done for the business or when you’re looking for a new challenge.
  • Dive into OSS. Open source software projects provide an almost endless set of opportunities to practice the skill of software engineering. Each project has a long list of things to be implemented. You can grab one and take a stab at figuring out how to implement it. Even if you don’t finish and submit your change to the project, you’ll get the practice along the way. Projects exist from the CSS used across the internet (Bootstrap), to the web browser rendering engine that’s probably displaying this very post to you (Blink), to the operating system that might be running on your computer (Darwin for Mac OS X)! You can choose anywhere you’d like to be in the software stack and dive in.

Moving Forward

These tips can be very useful at the start of your career. As you advance, being able to adapt to different situations remains important, but other skills come into the picture as well. What it takes to be a great senior engineer is worthy of its own series of posts. A lot has been written on the topic and you can get a start here and here. If you have your own take on what makes a great software engineer, either in the early or late stages of a career, please share in the comments!

The field of software engineering is changing quickly. 20 years ago there was no stack other than the one you wrote yourself! It would take a lot of time to release an interactive website with so few building blocks to use. Now you can link together Heroku, Firebase, Angular, and Bootstrap, search Stack Overflow a few times, and have a good-looking site up and running in minutes. In today’s world, you don’t have to solve novel problems every hour. That said, being able to handle a wide range of engineering challenges, and adapt the tools you know to face those challenges, will open the door for you to work at companies that are pushing the boundaries of what’s possible. And that is where you want to be.

/dev/color is a community of black software engineers who help one another reach career goals. To learn more, check out our website and follow our blog & twitter account.

--

--

Makinde Adeagbo
The Compiler

Founder of /dev/color. Former engineer @ Pinterest, Dropbox & Facebook.