How a PM Ships Software Without an Engineering Team

How a PM Ships Software Without an Engineering Team
For most of my career, the gap between an idea and a working product was an engineering team. I'm a product manager. I think in milestones, user stories, and outcomes, not in pull requests. I've always coded and I can prototype, but turning a loose idea into something that actually runs, and keeps running, was someone else's job. That gap mostly closed this year. Two tools did it: Claude Code and Claude Cowork. Running a…

Backyard Birds: Building My Own Dashboard on Top of Local Bird Data

Backyard Birds: Building My Own Dashboard on Top of Local Bird Data
A few weeks back I wrote about replacing my Haikubox with a four-camera local pipeline feeding BirdNET into TimescaleDB. The data was beautiful. The dashboards were not. Grafana is great for whether the heat pump cycled overnight or how warm the coop got. It is not great for what showed up in the yard for the first time this week, or what the dawn chorus actually sounds like in order. I kept tweaking panels and…

Managing a Homelab AI Project with Claude Code, Gitea, and the Gitea MCP Server

Managing a Homelab AI Project with Claude Code, Gitea, and the Gitea MCP Server
I am not a software engineer. I think in milestones, user stories, and outcomes. Kim wants a smart garden assistant that tells her when to water and when the blight risk is high. I want to build it. Solo homelab projects like this usually die in a half-finished Docker Compose file. Ceres is different, and the reason is three tools working together: Gitea, the Gitea MCP Server, and Claude Code. The Setup Ceres is a…

I Stopped Doom Scrolling By Building My Own News Feed

I Stopped Doom Scrolling By Building My Own News Feed
A few weeks ago I stopped using Reddit. Not because the content was bad. There's genuinely useful stuff there, but because I had no control over it. I was just overwhelmed with irrelevant content, negative content and constant suggestion of threads I have no interest in. I was full on doom scrolling daily, with a very bad signal to noise ratio. The problem is that once you identify doom scrolling for what it is, you…

How I Would Build the Tableau Connector SDK Today

How I Would Build the Tableau Connector SDK Today
I spent six years at Tableau turning data connectivity from a centralized engineering bottleneck into a partner ecosystem. We went from about 40 connectors, all built by Tableau engineers, to 120+ in the catalog with partners building their own. The Connector SDK, the TDVT test harness, the certification program, and the Tableau Exchange marketplace were the four legs of that platform. The platform worked. It drove 3x adoption, and it shifted connector authorship from "Tableau…

The Painless Problem: Why Kibana Runtime Fields Needed an AI Skill, Not Better Docs

The Painless Problem: Why Kibana Runtime Fields Needed an AI Skill, Not Better Docs
When I owned the Runtime Fields authoring experience in Kibana, we shipped a feature that was elegant in concept and brutal in practice. The concept: define fields at query time against an existing data view, no reindex required, perfect for the half of your data that didn't get mapped correctly the first time. (Reindexing in Elasticsearch means rewriting every document into a new index, which is expensive at scale and a non-starter for clusters serving…