Michael Bleigh

@mbleigh.dev

Building the servers for serverless at Firebase. Web platform aficionado.

AI code is like water: it will slosh around to fill whatever container it's poured into. If you don't provide any constraints you're going to end up with a big mess on the floor. The new job of software engineering is to specify verification+guardrails that hold the water.

An unintuitive thing about design docs: a doc that is clearly written but wrong on the substance is better than a doc that is hard to read but flawless on the substance. Design docs are communication tools to align humans. You can win at design but fail at design docs.

What we need as a companion to WebMCP is WebACP that lets me bring an agent of my choosing into the browser. I don't need my agent to build a browser and I don't need my browser to build an agent. I need my agent in my browser.

The primary artifact you need during design for agent-first development is a list of invariants. "Here's what absolutely must be true about the final result." This will often include a mix of concerns and will often include specific API contracts, specific test scenarios and expected outcomes, etc.

As companies grow, they build processes that leave no room for judgment calls. The default posture becomes oriented around fear of idiot / bad-faith actors, putting a huge tax on good-faith actors who have a good reason to do something a little bit risky. It destroys velocity.

Agents' overeager coding makes us all into editors. The PR is ready not when there's nothing left to add, but when there's nothing left to take away.

Not supporting Cmd/Ctrl+Click to open new tabs on navigation is the usability papercut that most frequently sends me into a state of barely-contained rage when using an app.

Bigcos love to add approvals to everything without considering desensitization. Any individual has limited "pay close attention to thing I'm approving" bandwidth. The more often approval is required, the less carefully each review is performed. Rubber stamps become the norm.

If you *actually* care about the security of your platform you have to also care about usability. If it takes 35 steps for users to do the right thing and 3 to do the wrong thing, you are incentivizing bad practices. The "pit of success" is hardest to construct for security.

How has Apple been allowed to get away with the absolutely dismal quality of file search on Mac? It literally couldn't find a folder called "records" in my Downloads folder when I searched for "records".

"How does the harness handle long-running shell commands" turns out to be I think the most consequential question for overall satisfaction for me personally. Antigravity actually nails this. After a short timeout, the command goes into the background and retriggers on complete.

Agentic coding is a ladder, and I think it's most effective to climb it one rung at a time. Loops are very powerful but if you try to jump straight there without first understanding both interactive and unsupervised agentic tasks you're not going to build effective loops.

One pattern I find myself reaching for frequently these days is to gather data into a heavy JSON "kitchen sink included" format and then build lightweight CLI renderers that slice and dice the data into various token-efficient text views for an agent to understand.

My new bar for onboarding is "give me a prompt I can paste into a halfway decent agent that gets me completely set up and onboarded to your service with no prior knowledge of how anything works". Results are graded on a scale of how much work I have to do instead of my agent.

3 things every LLM API ought to have knowing what we know now about building agents: 1. Allow add'l function defs without busting prefix cache 2. Interleaved "developer" messages with stronger instruct weight 3. Canonize XML-tag-ish structure into first-class "section" primitive

Every social media service needs: 1. A "slop" button that is a combination user mute and report of a post as being low-quality. 2. ToS allowing discretionary banning of users for automated low-quality posts. Right now slop replies are clearly rewarded. They need to be punished.

My tolerance for systems and services that don't have simple CLI / API access is falling to zero extremely fast. I expect we'll start seeing startups that build a CLI and MCP server. Who's already doing that?

I wanted to play around with building a personal agent for my family and the process of getting working credentials to talk to a chat app is...next to impossible? Is there some secret shortcut to doing this that doesn't require me to register an LLC or something?

I think the most common frustrating architecture decision I run into is: - To do X (thing we want to do a lot, like define a new tool for an agent) - You need to add code to Y, Z, A, and B Features that need to scale should have vertical consolidation of their definitions.

An interesting thing about the AI era is you no don't need humans to figure out "how" or "what". New to a codebase and need to trace a code path or discover relation between components? Ask an agent. Now most questions to my teammates are about rationale or judgment - the "why".

Is it weird to say that coding with agents feels more...organic? It feels more like tending a garden than building a house. You plant seeds (write specs), water them (poke it along), pull weeds (refactor messes). It's a different skillset but very informed by existing knowledge.

If you're a library author, it's a pain to figure publish agent skills in a way that your users will actually see. If you're a developer using libs, it's a pain to make sure you're using the best and latest agent guidance for them. Let's solve it! I'm proposing .agents.lib

Engineers dunking on Claude Code's memory usage or perf are really telling on themselves. Claude Code went from zero to $2.5B run rate business in a year. Every engineer should aspire to such colossal success and impact of their work. You can optimize later. Win first.

I use this prompt far more often than I'd like to admit: "I've done a bunch of work without properly breaking it into small commits. Please look at the current state and do some incremental commits. Each commit must have tests passing." That being said, it works pretty well!

Has there ever been a successful company that launched itself by buying an incredibly expensive domain name or a superbowl ad? Because all I can think of are abject failures and it's surprising the lesson doesn't get learned by either founders or their investors.