(03) — Blogs
Lab notes
Essays, notes, talks, and tutorials I've shipped. Filter by format and jump into the ideas that interest you most.
Scroll ↓Fullstack Software Engineer — Dallas, TX
- EssayDelivering a lean digital product during the pandemicHow I shipped online ordering for a Texas seafood restaurant during pandemic dine-in limits: a lean MVP, built solo with Gatsby, GloriaFood, Stripe and AWS.
- EssayI built a small software factory. Here is how it works and where it failedHow a planner, a builder and a set of deterministic gates take one written slice to a commit, measured over 47 runs, with what the gates caught and what they let through.
- EssayWhat does it cost to turn on TypeScript's strictest flags?4,189 type errors against an estimate of 200, a plan rewritten three times, one code review an hour, and the count that turned out to be a floor.
- EssayHow a lint autofix can change what your tests check without failing one4,336 lint problems, one command, and the six things that command would have broken. What a count can tell you about a method, and what only running it can.
- EssayWe gave an AI assistant read-only access to our ops stack. Its best answer was 'I can't tell'A read-only ops server for AI assistants: two security bugs caught before its first run, and 288 zeros it refused to read as health.
- EssayOur load test found a real bug, and briefly inflated our own statsEight runs, four in production. Each fix exposed the next limit. The harness's own checks caught one of its six mistakes; the other five took a second count.
- EssayA join that took 11 seconds, and the retry that locked players out5,297 timed joins, four over five seconds, and the rule that a slow join must finish because its answer carries the seat cookie.
- EssayOne database round trip was 17% of our median answerA latency benchmark of our Rust WebSocket rooms against a database 61-73 ms away, the confounds, and the A/B that found one more round trip.
- Essay20 failures in one morning, and not one was caught by a unit testTwenty failures from one morning, what first caught each one, and the written checks with positive controls that our coding agents now run first.
- Essay23 pull requests passed review. The branch they made had three bugs23 green per-PR reviews, one 563-file parent, and the three bugs that lived between the pull requests.
- Essay42 write routes trusted SameSite=Lax, which trusts the whole siteWhy a Lax cookie plus a JSON route is not CSRF protection, how one request showed it, and the guard and scan that replaced it.
- EssayCan two real-time services share one small VPS?Real numbers from moving a WebSocket game service and a Kafka relay onto a 2 vCPU VPS: the latency, the near-miss, and how much of the plan exists.
- NoteHow Hearso is built: the docs overviewWhat Hearso is, why it exists, and how it is put together. Written for people who want the real shape of it rather than a feature list.
- EssayFreeing port 8080 shut down Docker, and 28 containers with itA July one-liner that killed whatever held port 8080 found Docker Desktop in September. Every link, measured, and the one-line fix with its controls.
- EssayEleven route files compared Origin with an address nobody sentA 403 where a 401 belonged: what eleven route files were really comparing, the three functions that replaced it, and what two reviewers took back out.
- Essay67 live checks passed a page with two navigation barsLocal review before pushing left one finding on 70 files. It was real, and none of my 67 live checks could have found it. Here is why, and the guard that can.
- EssayEleven checks gave a verdict without looking. Four were mineEleven real checks in one night that reported without examining anything, ten of them as success. What each printed, what it had actually examined, and the rules that replaced them.
- EssayHearso answers still ride a 1.5-second poll. Here's the socket pathThe 1.5-second poll production runs, the WebSocket path we built behind a per-room switch, and how a finished game's points reach DynamoDB.
- EssayWe broke our scripts 51 times. The real bugs were where we didn't look51 hand-picked mutants against our own tooling scripts. Four survived, and each named a test we hadn't written. The real bugs were in the wiring.
- EssayMy soak runner said FAIL at minute 30. The service was fineNine conditions read FAIL on a healthy run because the numbers were not in yet. Here is what the restart measured over two hours.
- EssayTwo coding agents shared one file for a night. It taught us 7 rulesLocks, timestamps, and orders that were not orders: what one overnight build across two repositories taught me.
- EssayUptime Kuma dropped our login, and I was wrong about why three timesFive red checks, three wrong diagnoses, and a socket.io login handler registered after an await. Here's what we measured, and how the race came back.
- EssayLine coverage said we were done. Mutation testing disagreed99% statement coverage, 76% mutation score on the handler that takes every score. What survived, and what it told us about our tests.
- EssayOur benchmark passed at 239 ms p95, and we threw it awayThe run passed and could not be replayed. The reproducibility flaw, the run-scoped namespace that fixed it, and the record that still cites the old run.
- Essay128 counters cap what a deep rank costs to read, not to write128 log-spaced counters cap what a deep rank lookup costs to read. What that buys, what it costs on the write side, and what we have not measured.
- EssayOne score is 11 writes, and our cost estimate lost its workingThe write fan-out behind one leaderboard score, the $0.68 estimate rebuilt step by step, and the one measurement that disagrees with it.
- EssayWe store scores backwards, so the top 25 is one read and no sortThe keys, indexes and capacity choices behind our leaderboard tables, grounded in AWS's own papers and docs, with what we measured and what we did not.
- NoteHow I Revamped My Blog — 2025 App Router EditionA concise, practical walkthrough of the architecture, tech choices, and implementation patterns behind my rebuilt blog using the Next.js App Router, MDX, Tailwind, and modern React tooling.
- PodcastMy Favorite Tech PodcastsI've compiled a list of my favorite tech and non-tech podcasts.
- TutorialHandling External Links for MDX files in GatsbyThe easiest way to open links in a new tab when using gatsby-plugin-mdx.
- EssayImage types: Vector vs. PixelWhy you should go for Vector vs. Pixel.
- TutorialFetching data from FirestoreThis quick guide shows you how to create a React custom hook to fetch data from Cloud Firestore.
- TutorialInitial setup for Cloud Firestore databaseThis quick guide shows you how to set up Cloud Firestore for your React application.
- TutorialRebuilding my portfolio site with Tailwind CSSMy experience with Tailwind CSS.
- EssayPowerful Morning Routines that Will Change Your LifeKiller morning routines to better your life and reach your full potential.
- EssayThe Debate between Module vs Package vs Library vs FrameworkOne of the most frequent asked question in Software Engineering.
- Essay7 Basic Rules for Self ImprovementWhat I have learned from doing self-development work.