Skip to content

Archives

All the articles I've posted.

2025 4
June 3
  • I made a game with AI and I don't know how to feel about it

    Published: at 11:00 PM

    I 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 PM

    AI 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?

  • Why I write (and why you might want to too)

    Published: at 07:12 PM

    A colleague asked me why I write, and it got me thinking. This post explores my journey into writing, what I've gained from it, and why you might want to start putting your thoughts out there too.

February 1
  • Know where you're going (and be open to change)

    Published: at 10:30 PM

    My 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.

2024 3
November 1
  • Jekyll to Astro: an AI-assisted migration

    Published: at 10:00 AM

    I 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.

June 2
  • Personal Finance for Engineers

    Published: at 09:09 PM

    I'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.

  • In Python, Rose == 'Red', Violet is not 'Blue'

    Published: at 09:57 AM

    I came across Python code that used `is` to check if a string was "red" or "blue," which felt wrong. After digging into string interning behavior, I discovered why this sometimes works and why it matters for performance and correctness.

2023 5
November 1
  • Launching Effective One-on-One Meetings

    Published: at 06:41 AM

    When I took over one-on-ones for a team of 8 engineers at Amazon, I needed a framework to make these meetings valuable. This template evolved over 20+ sessions to help create effective one-on-ones.

July 2
  • The Quadrant Test

    Published: at 07:22 PM

    I had a tough career decision to make, so a manager suggested this simple quadrant exercise. It helped me map out the best and worst-case scenarios for both the short and long term, and it gave me clarity.

  • Tech Interview Tips and Strategies

    Published: at 12:53 PM

    I've been helping a friend prepare for technical interviews by running mock interviews and offering feedback. Here are my best tips and strategies for acing your tech interviews, from behavioral questions to coding challenges.

May 1
  • Senior Engineer Job Search Preparation

    Published: at 12:53 PM

    I 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.

January 1
  • My Experience with the Amazon Promotion Process

    Published: at 10:20 AM

    When I started at Amazon, promotions felt like a mystery. This is my story of navigating that two-year journey, from understanding Amazon's cautious approach to finally getting promoted.

2022 4
December 1
  • Backfill Considerations and Lessons Learned

    Published: at 06:22 PM

    When you need to backfill data, it's easy to cause problems. I've learned this lesson the hard way. This guide walks you through planning and executing backfills safely, from small fixes to massive data migrations.

June 1
  • Reflections on my Amazon Career

    Published: at 12:57 AM

    Today's my last day after four years at Amazon. I joined to learn what made Amazon so successful, and I'm leaving with insights on their engineering culture and Leadership Principles.

February 1
  • Providing Effective Feedback to Engineers

    Published: at 08:41 AM

    Giving feedback to engineers is one of the most important skills for tech leads and managers. My framework for providing constructive feedback that helps people grow without damaging relationships.

January 1
  • Load Testing Guide

    Published: at 06:22 PM

    We built a new service that handled 20x more traffic than expected. When we load tested it, it died at 20% of expected traffic. My complete guide to load testing, from choosing tools to interpreting results.

2021 1
October 1
  • Getting Unstuck

    Published: at 01:00 PM

    We all get stuck. The trick is knowing when and how to ask for help. My framework for troubleshooting problems and, when that fails, how to ask for help in a way that gets you the answers you need.

2019 3
December 1
  • My Path to Software Engineering

    Published: at 12:35 PM

    I've gone between software engineering and film for most of my career. People often wonder about my unusual path, so I'm sharing the story of how I bounced between these two worlds and found my way to tech.

November 1
  • The Princess and the Pea

    Published: at 12:35 PM

    The Princess and the Pea fairy tale perfectly captures a problem I see in software teams. When someone on your team is overly sensitive to small issues, it can create tension. How to handle it constructively.

March 1
  • Don't Bake a Cake

    Published: at 01:35 PM

    Don'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.

2018 5
September 2
  • AWS Certified Solutions Architect - Associate Notes

    Published: at 09:23 AM

    I recently passed the AWS Solutions Architect - Associate exam and wanted to share my study notes. These cover the key services, concepts, and gotchas you need to know to pass.

  • An Intro to AWS Certifications

    Published: at 01:23 PM

    I'm usually skeptical of certification programs, but AWS certifications felt different. They focus on how to build scalable and reliable services. My take on why they're worth it and how to prepare for the exams.

June 2
  • More Code Review Best Practices

    Published: at 03:50 PM

    Three years after my first code review best practices post, I've learned even more about what makes reviews effective. Here are additional strategies for making your code reviews more valuable and less painful.

  • What is Churning and Why Should I Care?

    Published: at 05:32 AM

    I got into credit card churning a few years ago, and it's become a rewarding hobby. My wife and I went on our honeymoon using rewards points. This introductory guide covers the world of credit card rewards.

May 1
  • Programmer Resources

    Published: at 03:50 PM

    A friend asked me what I've used to improve as a software engineer. When he asked for a list, I realized I didn't have one yet. Here are the blogs, books, and online courses that have helped me grow as a developer.

2017 1
January 1
  • Dangerous Python Functions, Part 3

    Published: at 01:33 PM

    In the final part of my dangerous Python functions series, I cover more security risks including assert statements, XML parsing vulnerabilities, and unsafe input handling. Plus, I've turned the whole series into a deck of cards!

2016 6
September 3
  • Refactoring Analogies

    Published: at 06:54 AM

    Refactoring can be hard to explain to stakeholders who don't code. Using analogies from home improvement and organization, I share how I communicate the value of refactoring to non-technical audiences.

  • DevOps from Scratch, Part 2: Amazon & Terraform

    Published: at 12:32 PM

    In part 2 of my DevOps from Scratch series, we'll take our Flask app from local development to production on AWS using Terraform for infrastructure automation and Ansible for deployment.

  • DevOps from Scratch, Part 1: Vagrant & Ansible

    Published: at 12:32 PM

    Ever 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.

August 1
  • Two Trains Talk

    Published: at 03:50 PM

    I gave a talk using the "two trains" analogy to explain technical debt and refactoring. The response was so positive that I wrote it up as a blog post, complete with slides and speaker notes.

May 1
  • Strategies for Writing Useful Tests

    Published: at 06:54 AM

    I used to hate writing tests—they felt like a waste of time, took forever to run, and broke constantly. Now I actually enjoy it. Here are the strategies that transformed my approach to testing from dread to delight.

January 1
  • How to Land the Right Tech Job for You

    Published: at 12:45 PM

    Job hunting can feel like shopping for a new car—exciting at first, then intimidating and hopeless. Having been both a candidate and an interviewer, I've put together this comprehensive guide to help you navigate the process and land the right tech job.

2015 11
November 1
  • How to Prepare for Talks

    Published: at 02:09 PM

    Preparing for a technical talk can feel overwhelming, but I've learned something new every time I've given one. This 11-step process covers everything from choosing a topic to handling Q&A, helping you go from idea to presentation.

October 1
  • Answers to Django Security Questions

    Published: at 06:56 AM

    I 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.

September 3
  • 10 Software Talks to Listen to on Your Way to Work

    Published: at 03:17 PM

    I felt like I didn't know enough as a developer, so I started listening to conference talks on my commute. Here are ten of my favorites that genuinely changed how I think about building software.

  • Using Bandit in the Field

    Published: at 03:17 PM

    After talking about Bandit, I wanted to see how it actually performed in the real world. This post shares my experience using Bandit to find vulnerabilities in Python projects and practical tips for integrating it into your workflow.

  • Finding Vulnerabilities with Bandit

    Published: at 03:37 PM

    Python's dynamic nature makes it hard to catch security vulnerabilities statically. Bandit scans your Python code for common security issues. Learn how to use it to find problems before they reach production.

August 1
  • Dangerous Python Functions, Part 2

    Published: at 02:33 PM

    In 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.

July 2
  • The Sunglasses Scam

    Published: at 02:09 PM

    I got banned from Ragnarok Online for "scamming" players with sunglasses. This bizarre experience taught me about cognitive biases and anchoring effects, drawing lessons from Daniel Kahneman's "Thinking, Fast and Slow."

  • Dangerous Python Functions

    Published: at 02:33 PM

    Python'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.

June 1
  • Intro to Code Reviews talk

    Published: at 08:54 AM

    If you've never participated in a code review, it can be tough to know where to start. I gave this talk at an LA Django meetup to help teams get started with code reviews and make them a regular part of their process.

May 2
  • Code Review Best Practices

    Published: at 08:54 AM

    A 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.

  • Impostor Syndrome and Me

    Published: at 01:09 PM

    I've struggled with impostor syndrome throughout my career, from my first programming job to joining Amazon. What I've learned about recognizing it and working through those feelings of not being good enough.

2014 4
August 2
  • Python / Django Talks

    Published: at 07:51 PM

    I started listening to Python and Django conference talks on my commute instead of music, and it's been amazing. Here are my notes and takeaways from some of the most influential talks I've heard.

  • Submitting a Patch to CPython

    Published: at 12:32 PM

    I submitted my first patch to CPython, Python's main implementation. The story of how I found a bug, worked with the core developers, and got my contribution accepted into the language.

June 1
  • 7 Lessons Learned from Teaching My Brother to Program

    Published: at 12:32 PM

    I spent a year teaching my 18-year-old brother to program over weekend Skype calls. Here are the seven key lessons I learned about teaching programming to beginners, from choosing the right language to keeping motivation high.

May 1
  • Georgia Tech OMS CS

    Published: at 02:45 PM

    I'm starting Georgia Tech's Online Master of Science in Computer Science program. Why I chose this program, what I hope to gain, and my thoughts on online education for working professionals.