My career path has been anything but linear. I’ve tried a little bit of everything - in fact, the last few years of my career were aimed at accomplishing just that. It’s all been consistently technical, but this manifested in a wide range of different roles, ranging from operations to product. But now it’s time for a new challenge, and a more deliberate focus on becoming a better engineer.
I’ve been working as a full-time developer for most of my career, but most of this work has involved fairly high-level abstractions, and didn’t have a heavy emphasis on scale or performance. This often made me feel like I wasn’t in an ideal position to learn and reinforce some of the lower-level software concepts in which I’ve wanted to gain experience. In the absence of an explicit focus on such subjects in the day job, I sought out a few extracurricular activities to help fill these gaps:
- Rust - The design of the Rust programming language forces you to think carefully about how you write software. The handful of deep-dives I’ve done thus far, as well as the few projects I’ve built with Rust have been deeply educational.
- eBPF - I’ve found the community around eBPF and playing around with some of the tools and frameworks in this space to be really helpful in furthering my understanding of Linux internals.
- Graphics - This is one area where performance really matters, so I worked on a few projects here, including some toy CPU-bound stuff but also some Vulkan-based projects I hope to blog about soon.
- Data Structures and Algorithms - In addition to renewing my computer science knowledge more broadly, I’ve just started to read through the Art of Computer Programming with a few friends, and it is really kicking my butt (in a good way).
However, to really become proficient at something, one often must invest more time than what’s possible through a casual side project. Nearing the end of 2021, I knew it was time to look for a change to align my day job with this new focus. Last week I started a new role as a Software Engineer on Cloudflare’s Traffic team.
The work I’m doing at Cloudflare is best summed up in one of our team’s job postings:
The Traffic team’s mission is to build software systems that improve the performance and reliability of our customers' traffic: from each end user to their destination. The remit of the team is broad and we measure success by three key indicators: how successful end users are at reaching our network; how successful our network is in reaching their destinations; and finally, how well we accelerate traffic between the two in order to provide the best experience.
I work on internal services that make this possible, as well as the Argo Smart Routing product. The work that’s done by my team has a profound impact on both reliability and performance for customer traffic, like an average 35% decrease in latency, a 27% decrease in connection errors, and a 60% decrease in cache misses for traffic like HTTP/HTTPS but also an average 10% latency improvement for all generic IP traffic. Even just in the past two months, I’ve already seen a handful of customers post about these kinds of benefits.
The Cloudflare blog contains much more detail than I’m able to capture here, but in short this is possible due to a combination of Cloudflare’s scale (we have data centers in 250 cities around the world) and some smart software which together create a “virtual backbone” over the internet. This results in the ability to make real-time forwarding decisions based on performance and other important factors.
There are a bunch of reasons that I felt this opportunity was a good fit, but here a few that I feel are particularly worth sharing:
- Immediacy and Scale - Developers at Cloudflare have their code deployed to 250 cities around the world, which immediately touches an average of 28 million requests per second. This is daunting to say the least, but undoubtedly a great environment for challenging myself and learning quickly.
- Authenticity - From the first moments of the interview process, every single person I’ve interacted with has been uncommonly authentic and real with me. Everyone is super aligned on the mission and speaks frankly about what we’re doing to get there.
- Interview Process - The interview process was one of the best I’ve ever experienced. In fact, my systems design interview was one of the reasons I chose Cloudflare. It was quite challenging, but it was also extremely practical and relevant to what I will end up doing in the day job, and not contrived and arbitrary. This was yet another manifestation of the authenticity I have seen throughout the team and the company.
- Pace of Innovation - The pace of innovation at Cloudflare is absolutely bonkers; there’s always something going on. In just the past two months I’ve found it extremely difficult to keep up with all of the new product announcements.
I don’t usually write too much about the day job, but this represents a significant and positive shift in focus for me, and I think this is important context to share for the posts to come. I’m sure that I’ll continue to write about the same concepts I’ve been exploring for the past few years, but now it will be driven by some of the lessons I’ll be learning in this new role.