Brainfab
← Back to Field Notes

Find hidden complexity before choosing a modernization path

Modernization decisions improve when teams map the work that lives between screens, services, data, and daily operating habits.

Modernization plans often begin with a visible problem: an old interface, a framework that is difficult to hire for, or a request to move away from a low-code platform. Those are real signals, but they are not a map of the work.

The difficult parts are commonly hidden in places that users do not see directly. They include manual operations that correct bad data, business rules embedded in formulas, permissions that were added one exception at a time, and integrations that only fail at a particular point in the month. A plan that starts with the surface alone can produce a neat estimate and an unreliable result.

Map the product as a set of dependencies

Before selecting a replacement stack or a rewrite scope, list the product’s meaningful dependencies. Include user-facing flows, data stores, integrations, scheduled work, operational tools, and the people who intervene when something goes wrong.

This is not an inventory for its own sake. The exercise asks a practical question: if this part changes, what else can be affected? The answer often reveals work that would not appear in a design file or a source repository.

An appointment workflow, for instance, may touch availability rules, time zones, reminders, payment status, staff permissions, calendar synchronization, and an operations process for conflicts. Rebuilding the booking screen does not automatically rebuild the system that makes the booking dependable.

Look for exceptions and repetition

Exceptions are where product intent becomes concrete. They show which rules have mattered enough for somebody to work around a default behavior. Repeated manual work is equally informative: it may indicate a missing capability, a deliberate control, or a risk that has not yet been modeled.

Interviewing the people who operate a product should therefore focus on cases, not only opinions. Ask what they do when a record is incomplete, an import is late, an approval is disputed, or a third-party service returns unexpected data. Pair those answers with a review of the actual workflow.

Distinguish uncertainty from scope

A large unknown is not automatically a large implementation task. It is a discovery task. Treating uncertainty as a named item prevents it from being silently folded into a promise that cannot be tested.

Teams can rank uncertainties by impact and reversibility. A layout choice may be inexpensive to revisit. A data migration, contractual integration, or access-control decision may not be. This ranking helps decide what to validate first and what can wait until the surrounding system is clearer.

Choose a path after the map exists

There is no universal answer to “rewrite or incrementally modernize.” A product with stable boundaries and a well-understood domain may support a focused replacement. A product with many uncertain integrations may benefit from strengthening documentation, tests, and interfaces before moving its core.

The value of early mapping is not that it eliminates risk. It makes risk explicit enough to discuss. A modernization path is more credible when it says what is known, what still needs verification, and which assumptions would change the next decision.