Popular Posts
My most-read posts, roughly in order.
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.
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.
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.
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?
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.
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.
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.
Wider, Not Faster
Published:4 min readWorking with AI changed what I'm willing to attempt. It also changed me.
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.
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.
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.
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.
Parachuting In
Published:8 min readI don't hand-write code anymore. The hard parts didn't go away.
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.