OpenSpec and spec-first AI work, but they donโ€™t fit every team

Originally published on LinkedIn

๐—ข๐—ฝ๐—ฒ๐—ป๐—ฆ๐—ฝ๐—ฒ๐—ฐ ๐—ฎ๐—ป๐—ฑ ๐˜€๐—ฝ๐—ฒ๐—ฐ-๐—ณ๐—ถ๐—ฟ๐˜€๐˜ ๐—”๐—œ ๐˜„๐—ผ๐—ฟ๐—ธ, ๐—ฏ๐˜‚๐˜ ๐˜๐—ต๐—ฒ๐˜† ๐—ฑ๐—ผ๐—ปโ€™๐˜ ๐—ณ๐—ถ๐˜ ๐—ฒ๐˜ƒ๐—ฒ๐—ฟ๐˜† ๐˜๐—ฒ๐—ฎ๐—บ Spec-first development and OpenSpec absolutely have a place.

When I first read OpenSpec, I loved the core idea: requirements in the repository, give agents a persistent knowledge base, keep business intent close to the code. I already do this with other documents like ADRs to help agents. This felt incredibly powerful so had to try when pushed up my list by a colleague.

So I tried it on a large, mature application: multiple domains, 10,000+ tests, substantial unit and E2E coverage, ADRs, engineering docs.

My assumption was simple: point an agent at the repo, reconstruct the requirements, drop them into OpenSpec, done.

It didn't fit.

The problem wasn't OpenSpec. It was the ๐—ฆ๐—ผ๐˜‚๐—ฟ๐—ฐ๐—ฒ ๐—ผ๐—ณ ๐—ง๐—ฟ๐˜‚๐˜๐—ต

I had only the tests. They describe what the application actually does and drive a fully automated regression suite. If I introduce another layer saying what the system ๐˜€๐—ต๐—ผ๐˜‚๐—น๐—ฑ do, what happens when the two disagree?

I kept going anyway, and this is where it became useful.

I had agents mine the codebase and build a requirements catalogue from existing behaviour. That gave me:

๐Ÿ”น Clear feature documentation ๐Ÿ”น BDD-style GIVEN / WHEN / THEN scenarios ๐Ÿ”น Better navigation for humans and agents ๐Ÿ”น Visibility of gaps and weakly tested behaviour

All valuable, but one boundary I couldn't automate around:

I can infer ๐—ช๐—›๐—”๐—ง the software does. I cannot reliably infer ๐—ช๐—›๐—ฌ the business wanted it to do that.

Those are different things. Retrospectively inventing business intent just to make an existing repository fit felt like work without enough value.

More importantly, the experiment clarified how I actually build software.

I'm not really spec-first. I start with a feature and a direction, iterate on the plan, design and implement with agents. I get something visible quick, learn, change it, and once the behaviour right, I ๐—ต๐—ฎ๐—ฟ๐—ฑ๐—ฒ๐—ป it with automated tests.

My flow is closer to: ๐Ÿ‘‰ Build โ†’ Learn โ†’ Iterate โ†’ Harden

OpenSpec feels much more natural when an organisation wants to define full requirements and behaviour before implementation. In that environment, I can see it being extremely powerful.

But many startups and SMEs work through discovery. They don't always know exactly what they're building until they've built some of it.

So I didn't change my process to fit OpenSpec.

I took the parts that fit: โœ… Requirements in the repo โœ… Clearer feature documentation โœ… BDD scenarios โœ… A navigable knowledge base for agents

Tests remain the strongest description of what my existing application actually guarantees. The requirements an agent read optimized replica.

I still like OpenSpec, just not for this system.

Maybe that's the better question for all these new AI development tools:

Not โ€œIs this a good way to build software?โ€ But: ๐——๐—ผ๐—ฒ๐˜€ ๐˜๐—ต๐—ถ๐˜€ ๐—บ๐—ฎ๐˜๐—ฐ๐—ต ๐˜๐—ต๐—ฒ ๐˜„๐—ฎ๐˜† ๐˜„๐—ฒ ๐—ฎ๐—ฐ๐˜๐˜‚๐—ฎ๐—น๐—น๐˜† ๐—ฏ๐˜‚๐—ถ๐—น๐—ฑ ๐˜€๐—ผ๐—ณ๐˜๐˜„๐—ฎ๐—ฟ๐—ฒ?