[{"title":"Professional Software Engineering for AI and Distributed Systems","url":"/posts/professional-software-engineering-for-ai-and-distributed-systems/","description":"A graduate course designed to bridge the gap between writing code and engineering production-grade distributed systems — with intentional technical debt, architecture defense, and AI as a force multiplier.","tags":["software-engineering","education","distributed-systems","ai","architecture"],"date":"March 1, 2026","content":"Computer science programs teach programming. They teach data structures, algorithms, complexity analysis, and language syntax. Students graduate knowing how to invert a binary tree, implement a hash map, and reason about Big-O notation. These are valuable skills. They are also insufficient.\nThe gap"},{"title":"Anatomy of an AI Engineering System","url":"/posts/anatomy-of-an-ai-engineering-system/","description":"Seventeen slash commands, seven templates, and three model tiers — how a set of short, composable skills turns Claude Code into a full software development lifecycle.","tags":["ai","software-engineering","developer-tools","claude","architecture"],"date":"February 26, 2026","content":"In a previous post I described the shift from AI skepticism to building an engineering system around it. I mentioned standards files, quality gates, and the idea that unconstrained AI produces mediocre code while constrained AI produces code that looks like yours. What I didn\u0026amp;rsquo;t show was the"},{"title":"The Ideal Repository Structure","url":"/posts/the-ideal-repository-structure/","description":"How strict layer boundaries prevent architectural decay — a deep-dive into interface-first, layered monorepo design with Go and Python examples.","tags":["architecture","monorepo","design-patterns","go","python"],"date":"February 24, 2026","content":"Most repositories start with good intentions. The first hundred commits are organized, components are small and focused, and dependency flow is obvious. By commit five thousand, the codebase resembles a tangled graph — services depend on repositories that depend back on services, infrastructure"},{"title":"How I Learned to Love the Bomb","url":"/posts/how-i-learned-to-love-the-bomb/","description":"A developer's journey from AI skepticism to building an entire engineering system around it. Adapt or die — and what adaptation actually looks like.","tags":["ai","software-engineering","developer-tools","claude","cursor"],"date":"February 22, 2026","content":"I spent the better part of two decades building software the old-fashioned way. I read the docs. I typed every line. I had opinions about whitespace. When GitHub Copilot showed up in 2021 and started finishing my sentences, my reaction was roughly the same as a novelist watching someone autocomplete"},{"title":"The Decorator Pattern for Observability and Resilience","url":"/posts/decorator-pattern-observability-resilience/","description":"How the decorator pattern cleanly separates logging, metrics, retry, and circuit breaking from business logic — with examples in Python and Go.","tags":["architecture","design-patterns","observability","resilience"],"date":"February 22, 2026","content":"Production services require logging, metrics collection, retry logic, and circuit breaking. The central question is where these cross-cutting concerns should reside. The naive approach — scattering observability and resilience logic directly inside business methods — produces implementations that"},{"title":"From Dependency Parses to Montague Semantics via Vector-Grounded Concept Bases","url":"/posts/dependency-to-lambda/","description":"Exploring how Universal Dependencies parse trees, Montague-style typed lambda calculus, and vector-derived concept bases fit together into a compositional semantics pipeline.","tags":["nlp","formal-semantics","lambda-calculus","dependency-parsing"],"date":"January 31, 2026","content":"A persistent challenge in computational semantics is bridging the gap between syntactic parse representations — which capture grammatical structure — and formal semantic representations capable of supporting inference. Dependency parsers produce trees annotated with grammatical relations (subject,"},{"title":"My Development Environment","url":"/posts/my-development-environment/","description":"A walkthrough of my macOS development setup: zsh, neovim, tmux, and 80+ CLI tools — all managed from a single dotfiles repo with a one-command install.","tags":["developer-tools","dotfiles","neovim","tmux","macos"],"date":"January 15, 2026","content":"Every developer I respect has a dotfiles repo. Not because the configs themselves are interesting — most of them aren\u0026amp;rsquo;t — but because maintaining one forces you to make deliberate choices about your tools. You can\u0026amp;rsquo;t version-control a setup you don\u0026amp;rsquo;t understand. The act of curating"}]