Loading
Loading
Thoughts on AI-augmented development, engineering leadership, and building scalable software.
Generation got cheap, judgment didn't: where the engineering bottleneck actually moved
August 11, 2026
From AI skeptic to a working division of labor: the model drafts, guardrails check, a human decides
August 5, 2026
What AI-enabled actually means for an engineering team
July 31, 2026
The missing pieces in stalled AI adoption are process, not model quality
July 29, 2026
How AI-augmented development workflows enabled managing 6 concurrent engineering clients across different agencies without sacrificing quality.
January 28, 2026
Why adversarial verification catches what a single confident finding misses
September 9, 2026
A second ratchet, on a different metric, proving the pattern generalizes
September 7, 2026
Why a coverage ratchet beats a hard coverage gate on a real codebase
September 1, 2026
Open to work, the capstone ask
August 28, 2026
What a dozen live products taught me about tradeoffs
August 27, 2026
I ship vertical slices, not layers
August 26, 2026
From match-score to hire, the full loop
August 25, 2026
The boring discipline that makes me fast
August 24, 2026
Open to work, remote, senior, full-stack
August 21, 2026
A full production database recovery, and the boring safety net that made it possible
August 20, 2026
Animal biometric ID, pluggable embeddings
August 20, 2026
Double-entry ledger for agent-to-agent payments
August 19, 2026
Debugging is the slow part AI hasn't touched, and it's widening the gap between engineers
August 18, 2026
Reuse as a hiring signal (contrarian)
August 18, 2026
Typed wire contracts to Python sidecars
August 17, 2026
Open to work, what my week 1 looks like
August 14, 2026
I dogfood, ApplyPulse finds my own jobs
August 13, 2026
Apple rejected my app, and the reason was fair
August 12, 2026
Self-hosted computer vision (ALPR) at the edge
August 11, 2026
What an AI-assisted security audit found, fixed, and deliberately left for a human
August 10, 2026
LATAM e-invoicing nobody wants to build
August 10, 2026
Open to work, hire the platform thinking not just the dev
August 7, 2026
Multi-tenant from day one
August 6, 2026
The 50-line adapter rule
August 5, 2026
Every external input is adversarial
August 4, 2026
One backend, 13+ apps, contract tests
August 3, 2026
Open to work, the 3 roles I'm built for
July 31, 2026
One core, web and React Native, no rewrite
July 30, 2026
A payment state machine that can't double-spend
July 29, 2026
83 shared libraries without breaking apps
July 28, 2026
Swapped a commercial vendor for OSS behind an interface
July 27, 2026
Open to work, proof of weekly output
July 24, 2026
Money as integers, fiscal-core e-invoicing
July 23, 2026
Treating scraped job posts as adversarial input
July 22, 2026
20+ apps, one monorepo, one reuse discipline
July 21, 2026
I built the AI that matched me to your job
July 20, 2026
Implementing an AI-powered code review pipeline using git hooks and the Claude API that catches 73% of issues before human review.
February 5, 2026
How I went from a 2,300-line orchestrator to a composable multi-agent system using TypeScript, YAML configs, and factory patterns.
January 15, 2026
Month-three failures usually trace to four org-side gaps, not to the person you hired
September 3, 2026
What a real senior engineer owns in the first 30 days, and how to tell early
August 31, 2026
A recruiter-friendly playbook for screening senior engineers for judgment, not memorization
August 28, 2026
The real mid/senior line is decision authority, and job descriptions never mention it
August 17, 2026
Why algorithm interviews test for a job that doesn't exist, and what predicts who's good
August 7, 2026
Seven years of remote-first engineering from Costa Rica, and what distributed teams actually require
August 6, 2026
A resume asks you to trust; proof of work lets you check
August 3, 2026
Why a portfolio should be checkable proof of work, not a prettier CV
July 23, 2026