Blog
Long-form posts on software craftsmanship, architecture, testing, and modern web development.
Jan 22, 2026
Terminally driven, Laravel inspired
Neovim (btw)
Sep 24, 2025
Joyful facades and how to write them
[Queue sparking a holy war of facades vs. contacts]
May 20, 2025
Parallel testing with Pest and SQLite
I live my life one parallel test at a time...
May 11, 2025
Content caching with Statamic
Cachin' checks, breakin' (bottle)necks.
Mar 11, 2025
Dynamic error assertions with PHPStan
This blog post could have been tweet, but yet here I am.
Feb 13, 2025
Adventures with PHP, APIs, and sharing types with PHPStan
I like my PHP like I like my Rust... statically analyzed.
Mar 20, 2024
Dapper multi-mapping relationships and value equality
So long, IEqualityComparer<T>, you'll be sorely missed.
Mar 5, 2024
Exploring developer experience with PHP, public APIs, and beer
It's 2024... and PHP still isn't dead?!
Dec 3, 2023
Content-driven websites with PHP and Laravel
It's PHPin' time!
Nov 2, 2023
Rust, AWS Lambda, and too many Office quotes
Identity theft is not a joke, Jim!
Aug 23, 2023
.NET Core service lifetimes in a nutshell
Singleton? More like single... not. I'm sorry.
Jul 11, 2023
Back to the server with Rust, Axum, and htmx
(Insert meme about React devs rediscovering the magic of PHP and ASP).
May 23, 2023
Ziggin' around with linked lists
Flashback to detecting loops in a list on a whiteboard...
Apr 5, 2023
Learning to fly with Rust and Postgres
If it can be Dockerized, it can be deployed.
Mar 30, 2023
Going serverless with Rust and Shuttle
Managing infrastructure sucks, let's write some serverless Rust with Shuttle!
Mar 15, 2023
Migrating to Astro
Astro, Svelte, and Rust walk into a bar...
Nov 3, 2022
Constructing objects with intent
Build better object APIs with named constructors and fluent builders!
Sep 21, 2022
Rethinking exceptions in .NET
Exceptions... exceptions everywhere!
Mar 2, 2022
React data fetching with RxJS
Believe it not, it's actual legal to use RxJS outside of Angular.
Feb 22, 2022
JAMstack Angular apps with Scully and Netlify
Something something JAMstack, something something Angular.
Nov 11, 2021
Hitchhiker's guide to Angular development with Nx
The answer is simple... 42 (projects in the same monorepo).
Sep 3, 2021
Implementing dark mode in Angular with Tailwind
If you're website doesn't have dark, it's a no for me dawg.
Aug 27, 2021
Build a Tailwind modal with Angular and NgRx
Make homemade modals great again!
Sep 23, 2020
Decoupling controllers with ApiEndpoints
No one likes monolithic controllers, and with ApiEndpoints, API design just got a whole lot easier.
Jul 26, 2020
State Management with Blazor using Fluxor (Part 2)
It's redux, but for... .NET?
Jun 26, 2020
State Management with Blazor using Fluxor (Part 1)
Redux... redux ALL the things!
Feb 2, 2020
Clean architecture, Dapper, MediatR, and buzzword bingo (part 4)
MediatR... so hot right now!
Nov 19, 2019
Clean architecture, Dapper, MediatR, and buzzword bingo (part 3)
Testing, testing... is this thing on?
Nov 5, 2019
Nullable reference types and designing with intent
Null reference exceptions can be a thing of the path, but with great power comes great responsibility.
Oct 6, 2019
Clean architecture, Dapper, MediatR, and buzzword bingo (part 2)
To repository or not to repository... that is the question.
Oct 4, 2019
Clean architecture, Dapper, MediatR, and buzzword bingo (part 1)
Beer and code... a match made in heaven.