Solving the Code Review Bottleneck, Part 2: Painless Product/Technical Specs, 2026 Edition — 'Magic Link Sign-In'

· br11k's blog

Decompose your product/technical specs into logical, single responsibility, atomic parts. And CI/CD will take care of the rest.

Painless Product/Technical Specs, 2026 Edition — "Magic Link Sign-In" (draft) #

This is currently in draft because I'm sill writing a CLI tool. Will publish the link to it later and add sections on how to use it.

Problem we (still) have today #

We've all been there.

You're working on a new feature. Even better -- a feature that was a "quick MVP" from 2014 that was never finished. Code from 2014 that made it into 2026 codebase, unchanged, no documentation, no spec. All the technical debt that was built on top of it. When you try git blame, all you see is garbage and noise:

1* linting (2019)
2* refactoring (2018)
3* very important bug fix (2016, bug tracker: TICKET-123)
4* fix
5* migrating entire codebase to new linting rules (2015)
6* implementation (2014, bug tracker: TICKET-67)

Here's one more thing to add on top: bug tracker tickets mentioned in commit messages from 2014-2016 are long gone. Because, well, if you have a bug tracker, you don't need proper commit messages, right? Just write a ticket number and you're done.

I covered this specific problem in Stacked Commits post.

Anyway, it was decided that it was not worth it investing into importing old tickets into a new system. And so now your history is gone. And people who were involved in the feature are long gone.

Well, not dead but good luck finding them and asking a question from 10+ year old git commit message. And receiving an answer that would be useful.

And so, here are all first questions you have to answer:

Only thing you are left with is git diff and useless commit messages.

Your customers are angry: "This feature isn't working, go figure, fast". And you're the one who has to come up with a solution.

Two options #

The very first option is to start from scratch and write a new spec and a new implementation. That's what everyone does when they get assigned a Jira customer support ticket, right? Right?

Wrong.

From my 12 years of experience, I never saw another engineer to dig the codebase and "reverse-engineer the original spec and requirements". That's what I call it:

Reverse-engineering product specs and requirements is the process of understanding the original problem developers were trying to solve, using only existing codebase and limited context.

And as you can imagine, this is a very difficult task. So it is not that surprising that most engineers just give up and make a hack/workaround

If you are lucky, a hack can be "aligned" to the original spec. But I've seen plenty of cases where developers come up with a fix to a solution that was never intended to be used in the first place.

I even seen commits that say "temporary fix". Made 3 years ago! If anything, there's nothing more permanent than a temporary solution.

It was only MVP to test the idea. And you are spending time fixing wrong assumptions made in 2014, instead of solving the actual 2026 problem.

Solution from 2000: Product/Functional Spec #

First of all, I suggest to go read Joel Spolsky's classic article on "Painless Functional Specifications".

There are four chapters:

Did you read it?

No you didn't. Go read it now and then come back, so we can talk more about what a good spec should and shouldn't have in it. I'll wait here for you. Thanks.

(waiting patiently...)

Ah, good. You're back.

So, I would not duplicate Joel's work here. I just want to expand on it a bit and add a few more details, that matter today, in 2026.

What I think is crazy, is that nothing changed at all since 2000. We are still making same mistakes Joel mentioned in his article. Still writing terrible specs and requirements. Or not writing them at all. Terrible mistake that costs us a lot of time and money.

And I'm pretty sure if we dig deeper, Joel isn't first one to notice this. But for some unexplainable reason, I managed to stumble upon it, back in 2015 or so. I can't even remember how I found it. And 10 years later, we're nowhere close to fixing this problem. And so my mission is very clear: to fix this problem once and for all.

This following is an example spec Joel wrote back in 2000.

What Time Is It?

And here are few things I want to highlight:

So, here is what I think we should do.

This is example of a spec that I want to be used as a template. It's not year 2000, and we have progressed a lot since then. So I'm adding few more interesting details to it.

The spec itself should be as tiny as possible. However, there is certain set of things that should be included in every spec.


Now that we have fields of a spec, we can make an example spec for our Magic Link Sign-In feature.

last updated: