The second system is always late

The rewrite was supposed to fix everything. It ships late instead, because it carries every requirement of the first system plus all the ambitions that got deferred the first time around.

Why the second system attracts scope

The first system was built under pressure, with no time to do things "right." The second one gets built by people who remember every corner they cut. Every one of those corners becomes a feature request before a line of code is written.

The invisible requirements the first system already satisfied

The old system quietly handles cases nobody wrote down: the malformed input from one client, the timezone bug that was patched three years ago, the rate limit that keeps one customer from falling over. None of that is in the spec. All of it has to be rediscovered the hard way.

Running both systems is its own project

Somewhere in the middle, both systems are live. Data has to move between them, behavior has to match, and nobody is fully staffed on either one. The migration itself becomes a project with its own deadline, its own bugs, and its own budget.

How to keep it honest

Ship a slice, not the whole system. Move one real user onto it early, and let their real traffic find the gaps. A rewrite that only exists on a roadmap stays comfortable and keeps growing. A rewrite carrying real traffic gets honest fast.