Hi, I'm Lindsey
RSS FeedI'm a backend engineer and an M.S. Computer Science student at Northeastern University. Most recently I was a Software Development Engineer Intern at Amazon Web Services, where I owned and shipped a sharing feature end to end — across two codebases that had historically diverged, and with the security review that comes with serving user-generated content to the public.
Before that I built a medallion data lake on S3 and a set of Python/FastAPI microservices. I like the unglamorous parts of the job: access-control models, idempotent pipelines, and cutting a p95 in half. I work with AI to get productive in an unfamiliar domain in days rather than weeks, then do the part it won't do for you — code humans can read, test, and audit.
I write up what I learn in the notes section, and there's a bit more context on the about page.
Featured
Does MySQL need a COMMIT after INSERT? No, and that's the problem
The answer is no, MySQL autocommits by default. The interesting part is that typing COMMIT anyway raises no error, so a wrong mental model can survive for years.
Recent Posts
At-least-once delivery means your consumer will process the same event twice
SQS, Kinesis, and DynamoDB Streams all guarantee at-least-once. That guarantee is a requirement on your consumer, not a promise you can ignore.
A 90% cache hit rate and the API is still slow. Look at your connection pool.
Caching removes repeated work. Connection pooling removes per-request setup. They fix different halves of your latency, and a cache cannot touch the half it doesn't own.
Why MySQL says "Unknown column" for an alias you just defined
You aliased a column in SELECT, used it in WHERE, and got ERROR 1054. ORDER BY accepts the same alias without complaint. Here's the one rule that explains both.
You created an index and the query is still slow. Here's why MySQL ignores it.
EXPLAIN says type: ALL and key: NULL even though the index exists. Four common reasons an index you just built gets skipped, and how to confirm which one you hit.