- Software engineers are an interesting bunch. While quirks are fine, and I have a few myself,
there are certain traits I've encountered that are genuinely counterproductive to my team's
work. In this post, I want to explain what these are and how I try to deal with people who
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- 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.
- 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.
- 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.
- 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.
- 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.