Writing.

4 min read
Parallel AI Coding with Git Worktrees: Sandboxing Multiple Agents Without Repository Chaos

Running terminal AI agents in your main repository working directory locks your editor, breaks your flow, and risks dirty file conflicts. Git worktrees give every agent an isolated branch and directory while sharing a single commit history.

AI ToolingGitDeveloper WorkflowProductivity
5 min read
SwiftUI State Management Without Losing User Intent

SwiftUI state bugs are often user-intent bugs in disguise. Here is the model I use to keep loading, saving, errors, and navigation explicit in modern iOS 17 apps.

SwiftUIiOSMobileArchitecture
6 min read
From Offline-First to Local-First: Schema Migrations on Distributed SQLite Databases

Writing to a local SQLite database is straightforward. Evolving that schema across 50,000 devices that sync asynchronously over months without losing un-synced user edits is where mobile architecture actually lives.

MobileArchitectureSQLiteFlutterDatabases
6 min read
Privacy-First Product Analytics: What to Measure When You Refuse to Track People

A product can learn from usage without building a profile of every person. This is the measurement model I use when trust, minimal collection, and useful product decisions all matter.

PrivacyFlutterProductMobile
5 min read
Contract-First API Changes: How to Evolve Laravel APIs Without Breaking Mobile Apps

Mobile clients do not update when a backend deploys. This is the compatibility model I use to evolve Laravel API responses without making old app versions fail in the field.

LaravelPHPAPI DesignMobile
5 min read
Surviving Swift 6 Strict Concurrency: A Practical Guide for Senior iOS Developers

Turning on Swift 6 strict concurrency usually generates hundreds of compiler errors overnight. Here is a battle-tested mental model for actors, Sendable types, task boundaries, and bridging legacy APIs without slapping @unchecked Sendable everywhere.

SwiftiOSMobileArchitectureConcurrency
6 min read
Safe Database Migrations in Laravel: A Release Checklist for Live Systems

A migration can be valid Laravel code and still be a risky production release. Here is the expand, backfill, switch, and contract sequence I use to change live schemas without leaving the application or its workers behind.

LaravelPHPDatabasesDevOps
7 min read
Agentic Coding: When the AI Has Access to Your Terminal

Chat-based copilots suggest code. Agentic tools run it. That shift changes what trust, scope, and supervision mean in daily development — and the habits that keep it productive.

AI ToolingDeveloper WorkflowSoftware Craft
7 min read
Code Review in the Age of AI-Generated Pull Requests

When most of the diff was written by an AI tool, traditional review habits break down. The volume goes up, the author's understanding goes down, and the reviewer needs a different checklist.

AI ToolingCode ReviewDeveloper Workflow
7 min read
Vibe Coding vs. Supervised Coding: Where the Line Actually Is

Vibe coding lets the AI drive and hopes the result works. Supervised coding keeps the human in control of scope, verification, and final decisions. Both have a place — the mistake is using one where the other belongs.

AI ToolingDeveloper WorkflowSoftware Craft
4 min read
The Bug Was in the Config, Not the Code

Most Laravel production incidents are not code bugs — they are config that was already wrong before the deploy. Here is why deployment readiness belongs in CI and how I built a CLI package that catches those risks before release.

LaravelPHPDevOpsCI/CD
5 min read
Rate Limiting You Can Actually See

Laravel lets you define rate limits but tells you nothing about who hits them. Here is why throttling needs an observability layer and how I built one as a package — instrumentation, persisted metrics, a secured dashboard, and runtime controls.

LaravelPHPRate LimitingObservability