CTO/4
Writing

On the work.

I write occasionally about the work — what I'm building, what's broken about how the industry talks about AI and engineering leadership, and lessons that travel from one company to another. Full archive on Medium.

How You Know You Need a Fractional CTO

Not every company needs a full-time CTO. Some need one for a season; some need one for a problem; some need one just often enough to keep from making expensive mistakes. A practical guide to when the fractional model is the right shape, and when it isn't.

Strategic Technical Debt: A CTO's Guide to Smarter Development Decisions

Technical debt isn't a problem to be eliminated; it's a tool to be used. Like financial debt, the question isn't whether to take it on — it's whether the return justifies the interest. A practical framework for when to incur it, when to refinance it, and when to pay it down.

The $30M Lesson: When Consulting Firms Try to Build Products

Every consulting firm eventually faces the siren call: let's build a product. It almost never works. I've tried this transition twice. The reasons it fails aren't strategy or market — they're cultural, structural, and almost always underestimated. What to do instead.

A White-Knuckle Decision: Refactor or Rewrite

I've done two major rewrites recently. One spun off as a thriving company. The other delivered technically but missed the business return. A spreadsheet model for thinking through these decisions — the value isn't in the model's accuracy, it's in the discipline of building it.

Applying Agile to Hardware: Lessons from a CTO on IoT Success

My first IoT product cycle, I was officially at the helm but really a passenger. Second time around I brought my software development tools to the hardware team and they mostly worked. Weekly hardware iterations. Surviving the first over-the-air firmware update without bricking the fleet. The patterns that travel between hardware and software, and the ones that don't.

Containerized Development: My Security Layer for AI Coding Tools

I stopped writing code three months ago. Not because I retired — because Claude Code got that good. The problem: I'd given an AI assistant the keys to my AWS account, my git repos, and my local drive. Here's the DevContainer template I built so I could stop worrying about it.

AI Chatbot Behavioral Testing: Generative AI and RAG Applications

You can't ship a non-deterministic application with deterministic tests. We learned this the hard way running a production RAG chatbot. The behavioral testing framework we built — and why every team shipping LLM features needs one.

A Cost-Effective AI Chatbot Architecture with AWS Bedrock, Lambda, and Pinecone

The full production architecture for an AI chatbot that runs at roughly $10 per 1,000 conversations. The decisions, the trade-offs, what to ignore from the vendor landscape, and the patterns worth stealing.

Data Pipelines for RAG: A Python Utility for Populating Vector Databases

More data does not mean a better chatbot. Quality of curation does. A Python framework for managing vector database content from disparate sources — websites, PDFs, cloud storage — with whitelist/blacklist filtering and iterative tuning.

Self-Hosted Matomo Web Analytics on AWS

When you've outgrown Google Analytics but the marketing tools meant to replace it cost more than they're worth. How we cut significant marketing-tech spend and gained better analytics by self-hosting Matomo on AWS — with deployment scripts and integration patterns.

Older pieces and drafts live in the Medium archive.