Choose the modernization layer
| Constraint | Possible intervention |
|---|---|
| Lost/reproducible build | Stabilize toolchain and components before upgrading. |
| Old compiler/runtime | Incremental compiler migration with Unicode/API/component testing. |
| BDE or obsolete database | Replace data access or migrate backend independently. |
| UI/platform limitation | Retain core rules behind an adapter or replace workflows progressively. |
| Unrecoverable requirements/code | Characterize behavior before scoped replacement. |
Safe sequence
- Preserve production and establish a reproducible build.
- Inventory components, packages, data and hardware boundaries.
- Create tests around critical calculations, transactions and outputs.
- Change one dependency boundary at a time.
- Deploy reversibly and compare operational results.
Preserve, upgrade or rewrite
Preserve when behavior remains valuable and risk can be isolated. Upgrade when source and components are controlled. Rewrite when requirements are recoverable, replacement value is clear and parallel validation is possible.
Start with source analysis, use BDE migration for that boundary and reverse engineering for missing behavior. The pillar covers operational support.
Provide modernization driver, source/build state, dependency list, database/device interfaces and acceptable migration risk.