Archives
All the articles I've posted.
Done-ish
Published:4 min readI 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.
Burning the 3:40 AM Window
Published:5 min readFable 5 costs 2x Opus and burns like 6x. I spent a month learning to ration my wishes.
Nothing to Catch
Published:5 min readAt 16 I passed off a Twilight Zone episode's plot as my own short film. My journal remembers what I did next.
You can't borrow muscle memory
Published:4 min readI copied 27 Claude commands and realized it wasn't doing me any favors.
Two tables
Published:4 min readWaiting tables taught me something about managing multiple AI agents. Including when to stop taking on more.
Parachuting In
Published:8 min readI don't hand-write code anymore. The hard parts didn't go away.
Ideas Die in Drafts
Published:4 min readSome 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 readWorking with AI isn't a binary skill. It's an instrument that requires deliberate practice.
Temporary is Permanent
Published:9 min readLight Iron announced it was winding down. Some memories from my first job, my first family in LA, and where I accidentally started writing software.
The Rock Tumbler
Published:5 min readSome feedback is easy to act on. Other feedback takes work to process. That work might be the point.
Wider, Not Faster
Published:4 min readWorking with AI changed what I'm willing to attempt. It also changed me.
Getting out of my own way: Lessons from becoming a Staff Engineer
Published:7 min readBecoming a Staff Engineer meant working through self-doubt, helping others do better work, and learning which problems to leave alone.
High-Bandwidth Communication
Published:2 min readWhy do some conversations click while others fall flat? Using the language of networking to understand human connection, trust, and saying what you mean.
I made a game with AI and I don't know how to feel about it
Published:10 min readI 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 readAI 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 readI 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.
Know where you're going (and be open to change)
Published:5 min readChoosing cinematography gave my film career direction. Moving into software later taught me that a clear goal can still leave room to change course.
Jekyll to Astro: an AI-assisted migration
Published:5 min readI 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.
In Python, Rose == 'Red', Violet is not 'Blue'
Published:4 min readWhy 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 readAn introduction to personal finance for engineers, covering budgeting, savings habits, investment plans, and the trade-offs between account types.
Launching Effective One-on-One Meetings
Published:2 min readWhen 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.
The Quadrant Test
Originally:updated Feb 17, 20263 min readI 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 readFeedback from mock technical interviews: tell specific stories, explain your contribution, know your language, and work with the interviewer's hints.
Senior Engineer Job Search Preparation
Published:7 min readHow I prepared for my 2022 senior engineer job search, from deciding what I wanted to practicing coding, system design, and behavioral interviews.
My Experience with the Amazon Promotion Process
Originally:updated Feb 21, 20263 min readMy 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.
Backfill Considerations and Lessons Learned
Published:8 min readLessons from sending millions of production records through a new service: planning a backfill, testing small, monitoring, and verifying the results.
Reflections on my Amazon Career
Published:4 min readWhat four years at Amazon taught me about starting with customer problems, owning the outcome, and making time to keep learning.
Providing Effective Feedback to Engineers
Published:7 min readJoining an experienced team can make every review comment feel presumptuous. How I get more comfortable offering feedback and asking questions.
Load Testing Guide
Published:15 min readOur 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.
Getting Unstuck
Published:7 min readWhat 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.
My Path to Software Engineering
Published:3 min readFrom Starcraft maps to film school and post-production, the detours that led me back to software engineering.
The Princess and the Pea
Published:3 min readA routine 45-minute wait became two minutes when I questioned it. Why staying sensitive to small frustrations can reveal worthwhile fixes.
Don't Bake a Cake
Published:5 min readA finished design can be hard to change. Showing the alternatives and decisions along the way gives reviewers a chance to help shape it.
An Intro to AWS Certifications
Published:7 min readI'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 readMy study notes for the 2018 AWS Solutions Architect Associate exam, covering core services, practice tests, and how I prepared.
More Code Review Best Practices
Published:4 min readWhat 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 readI 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.
Programmer Resources
Published:5 min readThe blogs, books, talks, and courses that helped me grow as a developer, alongside a habit of regular practice and research.
Dangerous Python Functions, Part 3
Published:1 min readA brief follow-up to the dangerous Python functions series, with an embedded exploit example for jsonpickle deserialization.
Refactoring Analogies
Published:7 min readA 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 readA 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 readDeploy the Flask app to Amazon EC2, then automate provisioning with Terraform and Ansible. Part two of a 2016 tutorial series.
Two Trains Talk
Published:1 min readSlides from my SoCal Python talk on improving legacy code, the risks of rewrites, and the two-trains analogy for switching systems.
Strategies for Writing Useful Tests
Published:9 min readI 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.
How to Land the Right Tech Job for You
Published:21 min readLessons from my tech job searches and time as an interviewer, covering finding opportunities, preparing for interviews, and evaluating offers.
How to Prepare for Talks
Published:6 min readHow I prepare a technical talk: write about the topic, choose a few takeaways, sketch slides, and rehearse aloud before the talk feels ready.
Answers to Django Security Questions
Published:9 min readI 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.
10 Software Talks to Listen to on Your Way to Work
Published:6 min readI 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 readSlides 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 readA field report from testing Bandit on Python projects in 2015: running scans, interpreting warnings, and deciding which findings need attention.
Dangerous Python Functions, Part 2
Originally:updated Feb 21, 20266 min readThe second installment covers pickle and YAML deserialization, SQL injection, and information leakage, with examples and safer alternatives.
The Sunglasses Scam
Published:8 min readI 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, 20264 min readExamples of command and code injection through Python's shell calls, exec, and eval, with safer alternatives for handling untrusted input.
Intro to Code Reviews talk
Published:1 min readSlides and resources from my LA Django talk on starting code reviews: what they offer, what to check, and how to discuss the code.
Code Review Best Practices
Published:9 min readWhat 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 readI 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.
Submitting a Patch to CPython
Published:2 min readAn 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 readNotes from my commute listening: four Python and Django talks on service architecture, migrations, Unicode, and testable code.
7 Lessons Learned from Teaching My Brother to Program
Published:4 min readTeaching my brother to program over weekend Skype calls taught me to keep projects simple, let him own the work, and make room for mistakes.
Georgia Tech OMS CS
Published:1 min readA short announcement of starting Georgia Tech's online computer science master's program, with Software Development Process as my first course.