In this issue, we talk with Ryan Peterman, a Staff Engineer at Instagram who grew from new grad (L3) to Staff (L6) in three years. He writes The Developing Dev newsletter about software engineering career growth. Thank you, Ryan, for this opportunity.
1. Can you give us some background information about yourself?
I work on Instagram’s Media Platform team in San Francisco. Our team builds and maintains the infrastructure that makes the app's video and images work. We were lucky to have Mark Zuckerberg highlight a 94% compute savings we shipped on his socials.
Before Instagram, I worked at Amazon in a small satellite office fresh out of college. My career had a rough start in that role. I was responsible for maintaining a database script that my manager had written by himself without using source control. The hand contained over 10,000 lines of complex queries that were interconnected. Since we didn’t use code review, the script had a lot of typos and bugs that could have been avoided. We made edits by hand directly in production, which caused frequent breakages. These breakages took a long time to recover because we couldn’t revert without source control.
I felt like I wasn’t growing as an engineer and had no idea how to grow since I was a new grad with no mentorship. Changing teams to work at Instagram made a huge difference. I went from stagnant to growing from a recent grad (L3) to a staff engineer (L6) in three years since I had better support and mentorship there.
2. How do you get a job in Big Tech?
It's a lot of work to get a job in big tech. When I think of getting a job, I try to debug the two main steps in the funnel:
Getting an interview - If you aren't getting interviews at the companies you want, you must beef up your resume with more experience and relevant projects. Aside from making your resume more likely to convert, it would be best if you also tried to get referrals from folks who work at the companies you're interested in. It is another way to stand out among the many submitted resumes.
Passing interviews - If you keep getting interviews but need to be succeeding in them, you'll want to put in the hours practicing the interviewing skill. Many people don't like that interviewing well is so different from being good at the job you're hired for. Although true, that still needs to change the fact that we need to interview. The bright side is that interviewing well is a skill that can be practiced. I'd recommend using Leetcode for algorithmic question prep, and for system design prep, you can use this GitHub repo as a resource.
3. How do you grow fast in big tech through levels up to Staff engineers?
In big tech, there's a well-defined ladder for software engineers. Promoting quickly to the next level is all about understanding the behaviors of the next level and demonstrating them as fast as possible. Here's a high-level summary of each of the software engineering levels and a summary of their expectations:
Software Engineer I (L3) - Completes well-encapsulated tasks with little guidance.
Software Engineer II (L4) - Completes medium to large features without guidance.
Senior Software Engineer (L5) - Owns an area on the team, influences others on the team, and can complete projects of large scope.
Staff Software Engineer (L6) - Creates scope that spans teams, influences other groups, and leads initiatives that senior engineers need help with.
Your manager should play a large role in helping you understand your gaps to the next level and work with you to find opportunities to close them. There are also levels higher than Staff, and to learn more about engineering levels at big tech, check Levels.fyi.
4. What is the Staff Engineer's role in Big Tech?
As you move up the software engineering ladder, the way engineers work begins to diverge. There are "archetypes" that start to emerge around the Staff+ level. Here are a few examples that come to mind:
Tech Lead - Strong generalist who leads cross org initiatives with many engineers. They often work through delegation and only step in to work on the more challenging parts of the projects they lead.
Specialist - An engineer with deep domain knowledge in a given area that allows them to complete tasks that few others can.
Code Machine - An engineer that works heads down with an incredibly optimized workflow with the same output as several strong engineers.
Fixer - These engineers have a deep understanding of complex systems such that they can find simple fixes that have an outstanding impact (e.g., a few line change that achieves most of a team’s goals).
As you can see, there are many specific roles Staff+ Engineers have. People can switch between the archetypes, too, depending on the project they are working on. The only thing common among them is that they have a comparable impact.
5. How to impact a large company and be recognized? Do you need to be a great coder, or is there more?
To have a lot of impact on the company, it’s important to develop a sense of what work will result in the most impact. If you set that critical thinking, there are a few ways it helps:
Helps you prioritize - There will always be more work than we can feasibly do. So, we must decide if work is worth doing when we receive asks.
Helps you find and create scope - Knowing what is impactful and why will help you find new projects and areas for your team to tackle.
Helps you influence others - Everyone wants to have an impact, so the better you understand this, the easier you’ll have to influence others without authority. You can help people go in the correct direction by understanding the impact of what you suggest.
If you do this right and have a lot of impact, recognition will come naturally.
6. How do you develop software at Instagram?
Our infrastructure team doesn’t have any product managers on it. The engineers themselves drive all planning and project timelines. Because of this, we try to reduce overhead and meetings as possible and don’t follow any agile methodology. Each engineer keeps track of their projects and timelines. This works well for us probably because the team is, on average, quite experienced.
We use waterfall planning when we have huge projects spanning teams. This must be done because we must sequence the work and ensure all stakeholders are looped in on our progress.
7. What is something unique about the engineering culture on your team?
Instagram has over a billion users. Because of this scale, breakages have major consequences. Therefore, we need to spend a lot of time on the engineering side to ensure we have high-quality rollouts. Here are a few examples of what we did with past rollouts to make sure that nothing broke:
Building a testing framework - The optimization that led to the 94% compute reduction was straightforward. The part that took the most time was testing and proving our theory. We built an A/B testing framework to simulate different compute workloads in isolated test pools to ensure we kept everything intact. This allowed us to measure downstream effects before launching to confirm correctness.
Extensive A/B testing - This optimization cut latency in half by avoiding a transatlantic round trip. This could have broken video uploads entirely if we launched this in the routing layer without confirming correctness. Therefore, we spent much time designing a test that spanned the client and server to measure our improvement.
Double-write testing - Before fully migrating our video creation system, we wanted to confirm that the new video creation scheme was better for consumers. To do that, we set up a double write test which allows us to verify that consumers are getting a better experience. This is much safer than directly switching over to a single write test because it is easier to fall back if needed. Once we had confidence from the double-write test, we could test the rollout in a regular single-write test.
8. How do you educate yourself?
The biggest source of education for me is from my peers. I learn so much from working with specialists to get my projects done. For instance, even though I had no video domain knowledge, I’ve learned a ton just by working with people that are experts in that domain. I’d say +90% of everything I know about software engineering comes from working with other strong engineers. That’s why working somewhere where your peers are excellent is so important. I’ve even heard of some engineers making it a point to go from project to project to work with the company’s most skilled people they knew.
Aside from learning on the job, I take time to read technical blog posts from other companies (e.g., Netflix engineering blog) to get a sense of what others in the industry are building.
Also, I do read a good amount of books for work purposes in my spare time. This ranges from anything from soft skills to system design, for instance. Here are a few I read recently:
Designing Data-Intensive Applications (system design)
How To Win Friends and Influence People (soft skills)
The Effective Engineer (career)
9. Can you give some general recommendations for becoming great software engineers?
I think you should choose your level and situation. For general advice, you should go somewhere where your peers are excellent, have a great manager, and focus on skill growth above compensation/titles.
My manager and peers greatly impacted my experience as I learned so much from them. One of the top things my manager taught me was that promotions try to capture our skills and behaviors. If you want to grow fast, focus on your skills and behaviors; the upgrades will care for themselves.
🎁 If you are interested in sponsoring one of the following issues and supporting my work while enabling this newsletter to be accessible to readers, check out the Sponsorship Tech World With Milan Newsletter opportunity Tech World With Milan Newsletter.
Thanks for the opportunity to be interviewed Milan!
Cool conversation! Extremely enthusiastic point of view.