Redwind Software All articles
Engineering Insights

The Greenfield Illusion: What a Rebuild Estimate Leaves Out

Redwind Software
The Greenfield Illusion: What a Rebuild Estimate Leaves Out

Photo: Unknown authorUnknown author or not provided, Public domain, via Wikimedia Commons

Few decisions in a custom software portfolio arrive with as much optimism as the greenfield rewrite. The existing system is slow, expensive to change, and held together by the people who built it. A new build, the pitch goes, will be cleaner, faster, and cheaper to own. The estimate often looks reasonable next to another year of maintenance. The trouble is that the estimate is usually comparing the wrong two numbers.

A rebuild is not priced against the current system's codebase. It is priced against the current system's behavior—including all the business rules that were never written down because they were discovered in production. Those rules are the reason the first system survived. They are also the reason the second system tends to cost more than the pitch.

The estimate that omits the invisible system

Most rebuild estimates are built from visible artifacts: screens, integrations, database tables, and a feature list assembled from interviews. That inventory is necessary, but it is not sufficient. The operating logic of a mature business system lives in places that are hard to see from the outside: exception handling for a handful of large customers, month-end reconciliation steps, approval thresholds that vary by state, and manual workarounds that became policy because the software never caught up.

These are not defects in the original build. They are accumulated domain knowledge. A system that has run for eight or ten years has been trained by its users. It has learned which invoices need a second look, which shipments can be split, and which fields must remain blank to satisfy a downstream report. None of that appears in a standard requirements document, and little of it appears in the code review.

When the rebuild estimate is assembled, those behaviors are either omitted or assumed to be simple. The first omission lowers the price. The second lowers it again. The result is a proposal that looks disciplined on paper and begins to drift as soon as the new system meets real transactions.

Where the first system's cost actually sits

The business case for a rewrite usually compares the cost of building new software with the cost of maintaining the old software. That comparison is incomplete. The current system's total cost includes not only maintenance but also the institutional memory embedded in it. Replacing the code does not automatically replace the memory.

Some of that memory can be recovered through tests, documentation, and interviews. Much of it cannot. It resides in the habits of operations staff, in the configuration of third-party systems, and in the informal rules that determine when a process is allowed to fail. A rebuild that does not account for transferring this knowledge will pay for it later, often at a higher rate, during stabilization.

This is the core accounting error of the second system: the old system is treated as a liability to be retired, when in fact it is also an asset that must be harvested. The rebuild estimate covers the construction of a new asset but not the extraction of the old one.

Why the second system expands

The second system problem is not merely a matter of optimistic scheduling. It is a structural consequence of starting over. A greenfield build removes constraints, and removed constraints invite additions. The new system can support more integrations, cleaner data models, and better reporting. Each improvement seems justified on its own. Together they expand the scope beyond the original mandate.

There is also a political dimension. A rebuild is a rare opportunity to address every complaint that has accumulated over the life of the first system. Stakeholders who tolerated limitations for years now see a chance to correct them. The requirements grow because the rebuild is treated as a reset rather than a replacement.

Meanwhile, the old system keeps running. Parallel operations, data migration, and reconciliation add cost that is difficult to estimate at the outset. The new system must be proven before the old one can be retired, and proving it requires running both. That period is often longer than planned because the new system lacks the accumulated exceptions that make the old one trustworthy.

A three-path decision framework

Before approving a rebuild, leadership should force a structured comparison of three paths: rebuild, refactor, and retain with targeted improvement. Each path has a different risk profile, and the right choice depends on where the system's constraints actually bind.

A rebuild is defensible when the current architecture blocks strategic requirements that cannot be reached through incremental change. Examples include a platform that cannot support required security controls, a data model that prevents a necessary product line, or a vendor stack that is no longer maintainable. Even then, the rebuild should be scoped to the constraint, not to every improvement the organization can imagine.

Refactoring is often the better path when the domain model is sound but specific areas have accumulated debt. Replacing a reporting layer, isolating a integration, or extracting a service can reduce maintenance cost without discarding the business logic that already works. Refactoring is slower than a rewrite in the imagination, but it is usually faster in practice because it preserves behavior.

Retaining the system with targeted improvements is the right choice when change volume is low, operational risk is high, and the system is stable. In that case, the organization should invest in observability, documentation, and selective replacement rather than a full rebuild. A system that is boring and reliable is not automatically a failure.

Questions to ask before signing off

A rebuild proposal should be tested with questions that expose what the estimate does not include. Which business capabilities are load-bearing, and where are they encoded? What is the change volume by module over the past twenty-four months? Which integrations and data contracts must remain exact? How long will parallel operations run, and who will pay for reconciliation? Who owns the domain knowledge, and how will it transfer to the new team? What are the exit criteria, and what happens if the new system is not ready on schedule?

The answers will not make the decision easy, but they will make it honest. A rebuild can be the right choice. It is rarely the cheap choice. The organizations that succeed at it treat the first system as a source of evidence, not merely a problem to be removed. They budget for knowledge transfer, parallel operations, and the discovery of rules that were never written down. They also accept that some of the second system's cost is the price of learning what the first one already knew.

For business leaders, the practical lesson is straightforward: do not compare a rebuild estimate with a maintenance invoice. Compare it with the cost of preserving the behavior that makes the current system valuable. If the proposal cannot explain how that behavior will survive, the estimate is incomplete—and the second system is already more expensive than it appears.

All Articles

Related Articles

Possession Is Nine-Tenths of the Contract: Testing Software Ownership Before You Need It

Possession Is Nine-Tenths of the Contract: Testing Software Ownership Before You Need It

The Quiet Drift: Seven Indicators That a Custom Software Build Is Losing Alignment

The Quiet Drift: Seven Indicators That a Custom Software Build Is Losing Alignment

When the Machine Opens the Pull Request: A Human Review Standard for AI-Assisted Code

When the Machine Opens the Pull Request: A Human Review Standard for AI-Assisted Code