Popular Posts
My most-read posts, roughly in order.
Getting out of my own way: Lessons from becoming a Staff Engineer
Published: at 07:26 PMLessons from my journey to Staff Engineer at Snap. A personal look at imposter syndrome, becoming a force multiplier, and the strategic shifts to succeed at the next level.
Code Review Best Practices
Published: at 08:54 AMA comprehensive guide to effective code reviews, covering what to look for in terms of architecture, style, and testing, as well as how to provide constructive feedback.
My Experience with the Amazon Promotion Process
Originally:updated Feb 21, 2026My promo journey at Amazon took two years from when I first thought I was ready. One rejection, a lot of reflection, and a manager's quote that made it all click.
I made a game with AI and I don't know how to feel about it
Published: at 11:00 PMI tried building a game with AI, and it was an interesting journey. This post covers the ups and downs, what I learned about AI collaboration, and my thoughts on how it's changing game development.
The AI Prisoner's Dilemma
Published: at 09:44 PMAI coding tools are everywhere, and each step feels reasonable. But what if we're all caught in an AI prisoner's dilemma, where individual choices lead to an uncertain future for our craft?
Jekyll to Astro: an AI-assisted migration
Published: at 10:00 AMI migrated my old Jekyll blog to Astro using AI tools. It cut the time in half, and I learned a lot about what AI is good at (repetitive tasks) and where it still needs human guidance.
DevOps from Scratch, Part 1: Vagrant & Ansible
Published: at 12:32 PMEver wondered how to build and deploy a web app from scratch? This is the first part of my 'DevOps from Scratch' series, where we'll get hands-on with Vagrant and Ansible to automate our local development setup for a Python web application.
Know where you're going (and be open to change)
Published: at 10:30 PMMy career path has been a bit unusual, from film school to software engineering. This post is about why it's important to have a clear direction, but also to be open to changing course when new opportunities arise.
Dangerous Python Functions
Originally:updated Feb 21, 2026Python's dynamic nature can lead to subtle bugs that are hard to catch. I've created a deck of cards highlighting dangerous Python functions like eval(), exec(), and input() that can cause security vulnerabilities or unexpected behavior.
Personal Finance for Engineers
Published: at 09:09 PMI've made every money mistake possible, from not saving enough to investing poorly. What I wish I knew about personal finance when I started my engineering career, including practical advice on 401(k)s, budgeting, and investment strategies.
Answers to Django Security Questions
Published: at 06:56 AMI found a list of Django security questions but couldn't find clear answers anywhere. So I dug in and wrote them myself, covering everything from CSRF and SQL injection to password hashing and mass assignment.
Senior Engineer Job Search Preparation
Published: at 12:53 PMI recently concluded a job search and landed at Snapchat. My detailed guide on how I prepared for interviews, navigated the process, and selected a new role as a senior engineer.
Don't Bake a Cake
Published: at 01:35 PMDon't bake a cake became my shorthand for a common problem in software teams. What I learned about communicating status updates effectively and why transparency, even when things go wrong, builds trust.
Dangerous Python Functions, Part 2
Originally:updated Feb 21, 2026In part 2 of my dangerous Python functions series, I cover more risky functions like pickle.loads(), yaml.load(), and tempfile.mktemp(). These can lead to code execution, deserialization attacks, and race conditions.
High-Bandwidth Communication
Published: at 09:25 PMWhy do some conversations click while others fall flat? Using the language of networking to understand human connection, trust, and saying what you mean.