Skip to content

Archives

All the articles I've posted.

2026 12 posts

October
  • Revisiting Mekran's Will

    I found the StarCraft map I made as a kid, used an AI agent to make it playable again, and played it to the end. It was smaller than I remembered, and still worth the trip.

September
  • Done-ish

    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
  • Nothing to Catch

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

  • Burning the 3:40 AM Window

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

April
  • Parachuting In

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

  • Two tables

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

  • You can't borrow muscle memory

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

March
  • Temporary is Permanent

    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.

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

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

  • Ideas Die in Drafts

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

February
  • Wider, Not Faster

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

  • The Rock Tumbler

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

2025 6 posts

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

    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.

  • The AI Prisoner's Dilemma

    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?

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

    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.

February

2024 3 posts

November
  • Jekyll to Astro: an AI-assisted migration

    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
  • Personal Finance for Engineers

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

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

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

2023 5 posts

November
  • Launching Effective One-on-One Meetings

    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
  • Tech Interview Tips and Strategies

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

  • The Quadrant Test

    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.

May
  • Senior Engineer Job Search Preparation

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

January
  • My Experience with the Amazon Promotion Process

    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 posts

December
  • Backfill Considerations and Lessons Learned

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

June
  • Reflections on my Amazon Career

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

February
  • Providing Effective Feedback to Engineers

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

January
  • Load Testing Guide

    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 posts

October
  • Getting Unstuck

    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 posts

December
  • My Path to Software Engineering

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

November
  • The Princess and the Pea

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

March
  • Don't Bake a Cake

    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 posts

September
  • AWS Certified Solutions Architect - Associate Notes

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

  • An Intro to AWS Certifications

    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
  • What is Churning and Why Should I Care?

    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.

  • More Code Review Best Practices

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

May
  • Programmer Resources

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

2017 1 posts

January
  • Dangerous Python Functions, Part 3

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

2016 6 posts

September
  • DevOps from Scratch, Part 2: Amazon & Terraform

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

  • DevOps from Scratch, Part 1: Vagrant & Ansible

    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.

  • Refactoring Analogies

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

August
  • Two Trains Talk

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

June
  • Strategies for Writing Useful Tests

    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
  • How to Land the Right Tech Job for You

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

2015 11 posts

November
  • How to Prepare for Talks

    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
  • Answers to Django Security Questions

    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
  • Using Bandit in the Field

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

  • Finding Vulnerabilities with Bandit

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

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

    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.

August
  • Dangerous Python Functions, Part 2

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

July
  • Dangerous Python Functions

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

  • The Sunglasses Scam

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

June
  • Intro to Code Reviews talk

    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
  • Impostor Syndrome and Me

    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.

  • Code Review Best Practices

    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.

2014 4 posts

August
  • Python / Django Talks

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

  • Submitting a Patch to CPython

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

June
May
  • Georgia Tech OMS CS

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