• Migrating to Kubernetes, part 2: Why it's hard

    In my previous post, I described how migrating to Kubernetes involves transitioning an organization's infrastructure from a legacy service platform (LeSP) to a Kubernetes service platform (KuSP). In this post, I want to go into more details on why this migration is hard and what you can do to reduce the pain associated with this transition. (Read more)
  • Migrating to Kubernetes, part 1: Moving on from the legacy service platform

    Over the last few years, I've worked on migrations at several companies- Airbnb, Stripe, and Segment. In this post, I want to talk about why these migrations are done and what they involve from the platform standpoint. (Read more)
  • The senior engineer plateau

    At many companies the "senior engineer" level is fairly straightforward to get into, but hard to get promoted beyond. The difficulty in advancing past "senior" can cause a lot of frustration and make people feel stuck in their careers. In this post, I want to share some observations about this "senior engineer plateau", why it causes frustration, and how to navigate out of it. (Read more)
  • Non-optimal engineer personas

    Software engineers are an interesting bunch. While quirks are fine, and I have a few myself, there are certain traits that show up on the personality side that can be genuinely counterproductive to my team's work. In this post, I want to explain what these are and how I try to deal with them. (Read more)
  • Golang: Some batteries not included

    The go standard library is fairly rich. However, there are certain pieces of functionality that are either missing or insufficient and that, as a result, require the use of third-party libraries in nearly all of my projects. In this post, I want to go through the main "batteries not included" in the standard library, and the alternatives that I typically use for each one. (Read more)
  • Starting a job

    In my last post, I discussed how companies can make their onboarding processes better for employees. In this post, I want to turn the tables and talk about the strategies I use personally to get up-to-speed when I'm starting at a new job. (Read more)
  • Great engineer onboarding

    Starting a new software engineering job is hard, and making this process successful requires a lot of effort from both the employer and the employee. In this post, I want to focus on the former, and in particular how companies can make their onboarding processes better. (Read more)
  • How I made this blog

    Every now and then, I get asked how I made this blog from a technical standpoint. In this post, I want to share how my content is generated and hosted, and then describe some commonly-used, alternative approaches that I decided not to take. (Read more)
  • Quitting a new job

    Two years ago, I did something that I'd never done in my career before- I left a job (at Nuro) only a few months after starting it. In this post, I want to explain what happened and what I learned from the experience. (Read more)
  • Going into tech with a PhD

    I spent 5 years of my life getting a PhD, but like many others who've gotten this degree, I decided to leave academia after graduation. At the time, I explored several career choices but ultimately decided to take a Product Manager job at Google. In this post, I want to discuss why I think tech is a great destination for people with technical PhDs. (Read more)
  • How to do an architecture interview

    Many software engineering interview loops include an "architecture interview", where the candidate is asked to develop a high-level design for a software system. Over the last few years, I've given many, many of these interviews. Based on these experiences, I'd like to share what it takes to succeed in them, and some common behaviors to avoid. (Read more)
  • How tech acquisitions work

    In an earlier post, I listed out signs that your employer is about to be acquired. In this one, I want to talk about how the tech acquisition process works from end-to-end, based on my personal experiences. (Read more)
  • Transformative tools

    Since I switched into engineering 8 years ago, I've witnessed a few productivity and organization tools that have really been "transformative" in terms of how I do my day-to-day work. In this post, I want to share my personal, before-and-after experiences with these. (Read more)
  • Signs you're about to be acquired

    Over the course of my tech career thus far, I've been through two acquisitions. In each case, I was just a normal employee without any special inside knowledge, and found out only a few days before the deals were publicly announced. In retrospect, however, there were some clear signs in the weeks leading up to the announcements that something unusual was going on. (Read more)
  • RSUs FTW

    Equity in one's employer is a large part of the compensation for Software Engineers. In this post, I want to describe how the different kinds of equity work and why I strongly prefer one type, restricted stock units (RSUs), over options-based alternatives. (Read more)
  • Six years of recruiting emails

    As a software engineer working in the San Francisco Bay Area, I get a lot of unsolicited recruiting emails. I recently decided to dig through my email archives and do some analysis of the long-term trends. Here are the results. (Read more)
  • Service meshes are hard

    Service meshes look great on paper but can be a huge pain to roll out and manage. In this post, I want to share some of my war stories and caution against diving into the service mesh hype too quickly. (Read more)
  • Cleaner go code with golines

    Last year, I open-sourced golines, a tool that automatically shortens long lines in go code. This post explains why I developed the tool and how it works. (Read more)
  • Stop hiding levels

    Most tech companies, even those without formal job titles, assign "levels" to engineers. Despite the importance of levels for determining compensation and job expectations, many companies prevent non-management employees from seeing anyone's levels besides their own. In this post, I explain why this is a harmful practice that should be discontinued. (Read more)
  • Leaving a job

    Over the course of my career, I've had many jobs which implies that I've also left many jobs. Leaving a job can be awkward and emotionally draining, but, depending on the circumstances, also liberating and life-improving. In this post, I want to provide some guidance on why, how, and when to leave a job based on my experiences so far. (Read more)
  • Switching from product management to engineering

    I began my career as a product manager (PM) but then switched tracks and became a software engineer (SWE) three and a half years later. In this post, I want to describe how I started as a PM, why I made the decision to switch, and how it worked out. (Read more)
  • Interviewing with Triplebyte

    In my most recent job search, I used a service called Triplebyte to connect with potential employers. I wanted to share my thoughts in case others are considering using their services to find a job. (Read more)
  • The rules for better coding interviews

    In a previous post, I discussed preparing for coding interviews as a candidate. In this post, I want to flip to the other side of the table and talk about conducting better interviews from the interviewer perspective. (Read more)
  • Using Leetcode to master coding interviews

    Having switched jobs a few times over the last few years, I've done a a lot of software engineering interviews. In my most recent job search, for instance, I did around eight phone screens followed by six on-sites. (Read more)