Skip to content

Archives

All the articles I've posted.

2026 11
September 1
  • Done-ish

    Published:
    4 min read

    I let an AI agent work through my backlog over a weekend. I came back to 66 pull requests and still had to decide what was worth doing.

July 2
  • Burning the 3:40 AM Window

    Published:
    5 min read

    Fable 5 costs 2x Opus and burns like 6x. I spent a month learning to ration my wishes.

  • Nothing to Catch

    Published:
    5 min read

    At 16 I passed off a Twilight Zone episode's plot as my own short film. My journal remembers what I did next.

April 3
  • You can't borrow muscle memory

    Published:
    4 min read

    I copied 27 Claude commands and realized it wasn't doing me any favors.

  • Two tables

    Published:
    4 min read

    Waiting tables taught me something about managing multiple AI agents. Including when to stop taking on more.

  • Parachuting In

    Published:
    8 min read

    I don't hand-write code anymore. The hard parts didn't go away.

March 3
  • Ideas Die in Drafts

    Published:
    4 min read

    Some of my best ideas used to die before anyone saw them. That's changing.

  • You can use AI every day and still not get better

    Published:
    5 min read

    Working with AI isn't a binary skill. It's an instrument that requires deliberate practice.

  • Temporary is Permanent

    Published:
    9 min read

    Light Iron announced it was winding down. Some memories from my first job, my first family in LA, and where I accidentally started writing software.

February 2
  • The Rock Tumbler

    Published:
    5 min read

    Some feedback is easy to act on. Other feedback takes work to process. That work might be the point.

  • Wider, Not Faster

    Published:
    4 min read

    Working with AI changed what I'm willing to attempt. It also changed me.

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

    Published:
    10 min read

    I built a sprint-planning game with AI over a weekend. Making it was more fun than playing it, and left me unsure what that means for the craft.

  • The AI Prisoner's Dilemma

    Published:
    5 min read

    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:
    5 min read

    I started this blog for my future self. Eleven years later, writing has given me something I once felt I lacked: a record of things I made.

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

    Published:
    5 min read

    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
  • In Python, Rose == 'Red', Violet is not 'Blue'

    Published:
    4 min read

    Why a Python string comparison with 'is' appeared to work, and what string interning and bytecode revealed about identity versus equality.

  • Personal Finance for Engineers

    Published:
    6 min read

    An introduction to personal finance for engineers, covering budgeting, savings habits, investment plans, and the trade-offs between account types.

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

    Published:
    2 min read

    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

    Originally:updated Feb 17, 2026
    3 min read

    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:
    7 min read

    Feedback from mock technical interviews: tell specific stories, explain your contribution, know your language, and work with the interviewer's hints.

May 1
  • Senior Engineer Job Search Preparation

    Published:
    7 min read

    How I prepared for my 2022 senior engineer job search, from deciding what I wanted to practicing coding, system design, and behavioral interviews.

January 1
  • My Experience with the Amazon Promotion Process

    Originally:updated Feb 21, 2026
    3 min read

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

2022 4
December 1
  • Backfill Considerations and Lessons Learned

    Published:
    8 min read

    Lessons from sending millions of production records through a new service: planning a backfill, testing small, monitoring, and verifying the results.

June 1
  • Reflections on my Amazon Career

    Published:
    4 min read

    What four years at Amazon taught me about starting with customer problems, owning the outcome, and making time to keep learning.

February 1
  • Providing Effective Feedback to Engineers

    Published:
    7 min read

    Joining an experienced team can make every review comment feel presumptuous. How I get more comfortable offering feedback and asking questions.

January 1
  • Load Testing Guide

    Published:
    15 min read

    Our service fell over at 20% of projected traffic in a load test. How I plan tests, define success, and use the results to find what needs fixing.

2021 1
October 1
  • Getting Unstuck

    Published:
    7 min read

    What I try when I'm stuck, how I explain the problem when asking for help, and what to do when nobody knows the answer yet.

2019 3
December 1
  • My Path to Software Engineering

    Published:
    3 min read

    From Starcraft maps to film school and post-production, the detours that led me back to software engineering.

November 1
  • The Princess and the Pea

    Published:
    3 min read

    A routine 45-minute wait became two minutes when I questioned it. Why staying sensitive to small frustrations can reveal worthwhile fixes.

March 1
  • Don't Bake a Cake

    Published:
    5 min read

    A finished design can be hard to change. Showing the alternatives and decisions along the way gives reviewers a chance to help shape it.

2018 5
September 2
  • An Intro to AWS Certifications

    Published:
    7 min read

    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.

  • AWS Certified Solutions Architect - Associate Notes

    Published:
    6 min read

    My study notes for the 2018 AWS Solutions Architect Associate exam, covering core services, practice tests, and how I prepared.

June 2
  • More Code Review Best Practices

    Published:
    4 min read

    What I changed about code reviews after three more years: automate style checks, point out good work, offer context, and watch the tone.

  • What is Churning and Why Should I Care?

    Published:
    6 min read

    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:
    5 min read

    The blogs, books, talks, and courses that helped me grow as a developer, alongside a habit of regular practice and research.

2017 1
January 1
  • Dangerous Python Functions, Part 3

    Published:
    1 min read

    A brief follow-up to the dangerous Python functions series, with an embedded exploit example for jsonpickle deserialization.

2016 6
September 3
  • Refactoring Analogies

    Published:
    7 min read

    A trash pile, a tube of toothpaste, and two moving trains: three ways I think about improving legacy code and keeping rewrites manageable.

  • DevOps from Scratch, Part 1: Vagrant & Ansible

    Published:
    16 min read

    A step-by-step Flask setup using Vagrant and Ansible to automate a local server, with Gunicorn and nginx. Part one of a 2016 tutorial series.

  • DevOps from Scratch, Part 2: Amazon & Terraform

    Published:
    14 min read

    Deploy the Flask app to Amazon EC2, then automate provisioning with Terraform and Ansible. Part two of a 2016 tutorial series.

August 1
  • Two Trains Talk

    Published:
    1 min read

    Slides from my SoCal Python talk on improving legacy code, the risks of rewrites, and the two-trains analogy for switching systems.

June 1
  • Strategies for Writing Useful Tests

    Published:
    9 min read

    I used to hate writing tests. Writing them as I go and treating them as first-class code made them useful enough to change my mind.

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

    Published:
    21 min read

    Lessons from my tech job searches and time as an interviewer, covering finding opportunities, preparing for interviews, and evaluating offers.

2015 11
November 1
  • How to Prepare for Talks

    Published:
    6 min read

    How I prepare a technical talk: write about the topic, choose a few takeaways, sketch slides, and rehearse aloud before the talk feels ready.

October 1
  • Answers to Django Security Questions

    Published:
    9 min read

    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:
    6 min read

    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.

  • Finding Vulnerabilities with Bandit

    Published:
    2 min read

    Slides from my SoCal Python talk on Bandit, including findings from scanning 16 open-source Python projects for potential security flaws.

  • Using Bandit in the Field

    Published:
    7 min read

    A field report from testing Bandit on Python projects in 2015: running scans, interpreting warnings, and deciding which findings need attention.

August 1
  • Dangerous Python Functions, Part 2

    Originally:updated Feb 21, 2026
    6 min read

    The second installment covers pickle and YAML deserialization, SQL injection, and information leakage, with examples and safer alternatives.

July 2
  • The Sunglasses Scam

    Published:
    8 min read

    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

    Originally:updated Feb 21, 2026
    4 min read

    Examples of command and code injection through Python's shell calls, exec, and eval, with safer alternatives for handling untrusted input.

June 1
  • Intro to Code Reviews talk

    Published:
    1 min read

    Slides and resources from my LA Django talk on starting code reviews: what they offer, what to check, and how to discuss the code.

May 2
  • Code Review Best Practices

    Published:
    9 min read

    What I look for in a code review, from design and duplication to tests, and how I discuss changes with the person who wrote them.

  • Impostor Syndrome and Me

    Published:
    6 min read

    I felt like a fraud when I became a full-time developer. Memories from learning to drive and working on film sets helped me put that feeling in perspective.

2014 4
August 2
  • Submitting a Patch to CPython

    Published:
    2 min read

    An experiment with UUID performance led me to submit a CPython patch. The benchmarks, proposed change, and steps I followed to contribute.

  • Python / Django Talks

    Published:
    2 min read

    Notes from my commute listening: four Python and Django talks on service architecture, migrations, Unicode, and testable code.

June 1
May 1
  • Georgia Tech OMS CS

    Published:
    1 min read

    A short announcement of starting Georgia Tech's online computer science master's program, with Software Development Process as my first course.