- Apr 2026 What I keep fixing in AI-generated code
- Apr 2026 How edit forms should load dropdown data
- Dec 2025 Navigation properties make database calls invisible
- Dec 2025 Git worktrees for parallel branch work
- Oct 2025 Handling Enum Values as Strings in C# API Models
- Oct 2025 Standardize Data at Write Time, Not Read Time
- Oct 2025 Property Getters vs Get Methods: When to Use Which
- Oct 2025 A Baseline CloudFormation Layout That I Keep Reusing
- Oct 2025 The Static-Instance Singleton Pattern in Flutter
- Oct 2025 Detecting Manual AWS Changes in CloudFormation Stacks
- Apr 2025 What makes code hard to change
- Apr 2025 Your system is an ETL pipeline
- Apr 2025 Wrapping Google Sheets as a backend instead of migrating away from it
- Apr 2025 Build the throwaway prototype first
- Apr 2025 A loop that does five things is five problems
- Mar 2025 Serilog Correlation IDs for background tasks in .NET Core
- Oct 2024 Use enums over booleans for status fields
- Feb 2024 Developer Command Snippets
- Aug 2023 How to Use Pseudocode to Design Better Software - Working Example
- Aug 2023 Overriding services ASP.NET Core integration tests using ConfigureTestServices
- Aug 2023 Test-specific AppSettings configuration in ASP.NET Core integration tests
- Jan 2023 Dynamic SQL queries: string concatenation vs SqlKata
- Jan 2023 Type-safe appsettings configuration in .NET Core
- Jun 2018 Solving the N+1 query problem
- Oct 2017 How to Extend Select2 with Adapters
- Jul 2017 Refactoring a Feature Envy Code
- May 2016 ASP.NET MVC5 Feature Folders Structure
- Sep 2015 How to Refactor Business Rules Using the Specification Pattern
- Jan 2015 Rhino Security and StructureMap Integration Guide (Archive, 2015)
- Dec 2014 .NET Database Development with FluentMigrator (Archive, 2014)