Daniel Doubrovkine bio photo

Daniel Doubrovkine

aka dB., @Microsoft, ex-@ShopifyEng, @OpenSearchProj, @awscloud, former CTO @artsy, +@vestris, NYC

Email Twitter LinkedIn Github Strava
Creative Commons License

ai

25 posts · All topics

  • — The Matter of Taste

    While working on Svet, a Git and filesystem linter, I had a conversation with GitHub Copilot CLI about a flag.

  • — One Tool for the (Spell Checking) Job

    I’ve built six spell-checking plugins in under three weeks. This is not an unhealthy interest in spelling. The cost of rolling tools out is the cost of tokens + my time supervis...

  • — I Am Just One Engineer Armed with AI

    I made 295 pull requests across 49 GitHub repos and did 30 project releases burning ~1.2 billion AI tokens in ten days. I am just one Engineer armed with AI. That is a lot of ty...

  • — AI Wants to Eat Your Project Backlog

    You can clear the backlog of your open-source projects with AI now. It’s really great at reproducing bugs, implementing reasonable features, adding the tests you never had time ...

  • — ELPDS: Inspecting FAT Partitions in 1995

    I recovered another program I wrote in 1995: ELPDS, or Enhanced Logical & Physical Drive Status. Run ELPDS C: and it reports physical disk geometry, partition entries, FAT b...

  • — A 1998 PDF-to-Text Converter

    In 1998 I needed to convert PDF files to text for a search engine called Alkaline, without requiring separately installed libraries. So I wrote a C++ parser. Alkaline is another...

  • — Good Morning, Dave: the 1998 INET Conference Kiosk Launcher

    In July 1998, the Internet Society held INET ‘98, “The Internet Summit”, at Palexpo in Geneva. The University of Geneva provided about 250 computers for the conference, and I wa...

  • — Porting a 1996 Pascal/Delphi Calculator to Rust (CLI + MCP)

    In his Rails World 2026 keynote DHH talks about one-shot apps built almost instantly with an agent as part of Omarchy. His canonical example is Omacalc, a dead simple calculator...

  • — Using AI Effectively in Technical Writing

    I write a lot, and I use AI a lot. But AI does not write my blog posts. Mostly.

  • — Serving Markdown for AI Agents, Now as a Jekyll Plugin

    Back in January I wrote Serving Markdown for AI Agents: for every page on this blog, there’s also a .md version at the same URL, discoverable via a <link rel="alternate" type...

  • — Porting a Discord Bot to Microsoft Teams, Entirely With AI

    Slava (slack-strava) connects a Strava account to a chat and posts a card for every activity, complete with map, pace, and elevation, plus commands like connect, disconnect, sta...

  • — Benchmarks Are Free Now

    My previous post walked through four bugs in ruby-enum, a gem I maintain, all stemming from the fact that class-level instance variables aren’t inherited by subclasses. The thir...

  • — Generating AI Descriptions of Automated Pull Requests

    The slack-ruby-client library, an open source Ruby gem I maintain, runs a scheduled GitHub Actions workflow that regenerates code from Slack’s API definitions and opens a pull r...

  • — Coding with AI Agents is Now a Baseline Expectation for Managers

    AI-first Engineering is now the operating default in many organizations, including mine. Developers have kept up. Vibe coding became agentic engineering, and the race towards tr...

  • — How I Made $360 by Serving Markdown to A.I. agents from My Jekyll Blog

    In April 2025 I wrote Apologizing for My Obsessiveness Over Punctuation, a post about my various organizational compulsions. Near the end, almost as an aside, I mentioned that I...

  • — Opening Proprietary Code to Contributors Checklist

    Before AI coding assistants, a typical engineering team built expertise with the years: new team members joined, contributed small bug fixes, then were given more ambitious task...

  • — AI Slop: A Slack API Rate Limiting Disaster

    Yesterday I described AI-generated code as “plausible-looking, locally coherent, globally wrong.” Here’s a concrete example from my own codebase.

  • — Right-Sizing Engineering Teams for AI

    Before AI coding assistants, a typical engineering team of 8-10 people might have been lucky to have one or two “10x engineers”, or “workhorses”, the kind of engineer that both ...

  • — Serving Markdown for AI Agents in Jekyll

    Dries Buytaert recently wrote about The Third Audience. For decades, websites have targeted two audiences: humans and search engines. AI agents are now the third audience, and m...

  • — Turning Hypermedia APIs into MCPs

    I’ve written and talked extensively about Hypermedia APIs for about a decade. The HATEOAS constraints in representing resources for a RESTful API has numerous advantages in API ...

  • — Using AI to Reduce the Burden of Status Reporting

    One of the negative side effects of having any top-down command structure is that every additional layer risks introducing a new level of bureaucracy, which then actively subtra...

  • — Using Claude Code with Google Sheets

    Let’s get Claude Code to connect to Google Sheets. We’ll use this Google Sample Spreadsheet.

  • — Using Claude-Swarm to Upgrade Ruby Projects

    One of my colleagues wrote a pretty awesome tool called claude-swarm that orchestrates multiple Claude Code instances as a collaborative AI development team. At Shopify, we are ...

  • — I Failed to Implement the Diameter of a Binary Tree in a Coding Interview

    Six months ago I failed a basic coding interview at a FAANG. Yes, I was a Principal Engineer, and yes, I was paid absurd amounts of money, yet I couldn’t implement a diameter of...

  • — Executing Structured A.I. Workflows with Shopify Roast

    Last week, my team at Shopify released a new tool called Roast, a convention-oriented framework for creating structured AI workflows. Our vision is to enable A.I. agents to solv...