Skip to content

Notes on systems that outlived their authors

What we run into inside COBOL, RPG, VB6, Delphi and PHP codebases, and what the migrations actually cost. Written by the engineers doing the work.

Do Classic ASP and PHP migrations need the same plan?
Classic ASP and PHP migrationsClassic ASP migrationPHP monolith migration
Do Classic ASP and PHP migrations need the same plan?
8 min read

Classic ASP and PHP migrations fail when teams confuse a hosting deadline with an architecture decision. Learn how to plan and prove each move.

Latest

The truth behind an end-of-life deadline
8 min read
The truth behind an end-of-life deadline
Learn how to test an end-of-life deadline against contracts, support scope, recovery evidence and the priced risk of keeping legacy software.
end-of-life deadlinelegacy software risk
Technical due diligence changes the price
8 min read
Technical due diligence changes the price
Technical due diligence reveals codebase risks that change valuation, deal terms, integration cost, and the buyer's plan for day one.
technical due diligencecodebase due diligence
COBOL COMP-3 migration without losing a cent
8 min read
COBOL COMP-3 migration without losing a cent
COBOL COMP-3 migration fails when scale, signs, rounding, or invalid bytes change. Map the data contract and prove every monetary result.
COBOL COMP-3 migrationpacked decimal COBOL
What do air-gapped models actually require?
8 min read
What do air-gapped models actually require?
Air-gapped models need controlled hardware, verified weights, a deliberate update path, and honest trade-offs against hosted inference.
air-gapped modelsair-gapped AI
How AI coding tools change code you did not write
8 min read
How AI coding tools change code you did not write
AI coding tools predict text, answer questions, or act on a repository. Learn where each mode helps and how to control changes in unfamiliar systems.
AI coding toolscoding autocomplete
Whole codebase reading beyond the context window
8 min read
Whole codebase reading beyond the context window
Whole codebase reading needs more than a giant prompt. See how dependency maps, staged analysis, evidence, and parity tests keep rewrites honest.
whole codebase readingmillion line codebase
What belongs in a software rewrite estimate?
8 min read
What belongs in a software rewrite estimate?
A software rewrite estimate should measure code volume, branching, integrations, data, operations and the test surface, with evidence for each.
software rewrite estimatelegacy system rewrite cost
A development freeze is the wrong migration bargain
8 min read
A development freeze is the wrong migration bargain
A development freeze shifts migration risk onto the business. Learn how module cutover keeps production moving without a dangerous big bang.
development freezelegacy system migration
A legacy code audit worth paying for
8 min read
A legacy code audit worth paying for
A legacy code audit should map modules, measure dead code, rank business risks, and price each migration phase. Use this standard before you pay.
legacy code auditlegacy system assessment
How to read JCL starts with execution order
8 min read
How to read JCL starts with execution order
Learn how to read JCL by reconstructing steps, DD data flow, GDG allocation, condition-code gates, procedures, scheduler rules, and restarts.
how to read JCLJCL job steps
How moving VSAM to Postgres breaks hidden key contracts
8 min read
How moving VSAM to Postgres breaks hidden key contracts
Moving VSAM to Postgres safely means preserving KSDS key bytes, alternate-index rules, browse order, and batch behavior before changing the data model.
moving VSAM to PostgresKSDS primary keys
JCL job dependencies exist beyond the JCL
8 min read
JCL job dependencies exist beyond the JCL
Map JCL job dependencies by reconciling procedures, scheduler rules and production traces, then prove which nightly job produced each input.
JCL job dependenciesnightly batch dependency map
Mainframe cost per year in a defensible budget
8 min read
Mainframe cost per year in a defensible budget
Build a defensible mainframe cost per year from software capacity, hardware, labor, facilities, and the costs a migration can actually remove.
mainframe cost per yearmainframe software licensing
How an AS/400 migration moves more than an ERP
8 min read
How an AS/400 migration moves more than an ERP
An AS/400 migration must preserve database semantics, RPG behavior, display file rules, batch work, security, and operational evidence.
AS/400 migrationmigrate from IBM i
When does legacy system acceptance mean anything?
8 min read
When does legacy system acceptance mean anything?
Legacy system acceptance needs production replay, cent-level reconciliation, tested rollback, and handover evidence your engineers can rerun.
legacy system acceptanceproduction traffic replay
Four numbers decide when to rewrite legacy software
8 min read
Four numbers decide when to rewrite legacy software
Use four measurable signals to decide when to rewrite legacy software, when to keep patching, and how to defend the choice with evidence.
rewrite legacy softwarelegacy system rewrite
Legacy system knowledge after a rewrite
8 min read
Legacy system knowledge after a rewrite
Preserve legacy system knowledge by turning expert judgment, production cases, and operating practice into tests, decisions, and durable ownership.
legacy system knowledgeknowledge transfer in migration
A CICS transaction is not an HTTP request
8 min read
A CICS transaction is not an HTTP request
A CICS transaction is not an HTTP request. Model task state, COMMAREA data, syncpoints and distributed commit without breaking business behavior.
CICS transactionCICS HTTP migration
Fixed-format RPG migration and the free-format divide
8 min read
Fixed-format RPG migration and the free-format divide
A fixed-format RPG migration must recover column rules, indicators, and the cycle before it can share an estimate with procedural free-form code.
fixed-format RPG migrationfree-format RPG conversion
Legacy system sizing beyond line count
8 min read
Legacy system sizing beyond line count
Legacy system sizing needs more than line count. Measure decision depth, data fan-in, dead code, integrations, and observed production behavior.
legacy system sizinglegacy code metrics
Staff augmentation vs outsourcing for legacy modernization
8 min read
Staff augmentation vs outsourcing for legacy modernization
Staff augmentation vs outsourcing compared by architecture ownership, production risk, knowledge transfer and delivery accountability.
staff augmentation vs outsourcingdelivery owned contracting
How a parity harness proves a system rewrite
8 min read
How a parity harness proves a system rewrite
A parity harness replays real production traffic, compares exact outputs, controls nondeterminism, and exposes disputed legacy behavior.
parity harnesslegacy system rewrite
Where COBOL in production still does the real work
8 min read
Where COBOL in production still does the real work
See where COBOL in production runs today, why it survived, what finally forces replacement, and how to preserve behavior during a rewrite.
COBOL in productionCOBOL legacy systems
ColdFusion migration starts before the licence expires
8 min read
ColdFusion migration starts before the licence expires
Plan a ColdFusion migration that preserves live traffic, separates CFML behavior from runtime quirks, and retires the licence on evidence.
ColdFusion migrationmigrate CFML application
What survives an ECC to S/4HANA migration?
8 min read
What survives an ECC to S/4HANA migration?
An ECC to S/4HANA migration needs an early inventory of Z-programs, exits, BAdIs and hidden dependencies before the 2027 deadline.
ECC to S/4HANA migrationSAP custom code
Is Delphi business logic trapped in your forms?
8 min read
Is Delphi business logic trapped in your forms?
Find and separate Delphi business logic hidden in VCL forms, data-aware controls, dataset events, and transaction code before rewriting the UI.
Delphi business logicVCL form migration
Monolith vs microservices through the database
8 min read
Monolith vs microservices through the database
Treat monolith vs microservices as a data ownership decision: map transactions, expose shared tables, and split only where boundaries hold.
monolith vs microservicesmicroservice database boundaries
How to find hidden rules during a PL/SQL migration
8 min read
How to find hidden rules during a PL/SQL migration
A PL/SQL migration succeeds when you inventory packages, triggers, session state, and side effects, then prove parity before moving each rule.
PL/SQL migrationPL/SQL business rules
How do you measure dead code without deleting business rules?
8 min read
How do you measure dead code without deleting business rules?
Learn how to measure dead code with static reachability, runtime coverage, traffic replay, and explicit tests for rare year-end business rules.
measure dead codestatic reachability analysis
VB6 in 2026 still runs, but the build is the risk
8 min read
VB6 in 2026 still runs, but the build is the risk
VB6 in 2026 can run on current Windows, yet its unsupported IDE, COM dependencies and lost build knowledge make recovery the urgent problem.
VB6 in 2026VB6 runtime Windows 11
Technical debt cost belongs in the budget
8 min read
Technical debt cost belongs in the budget
Calculate technical debt cost from sprint capacity, incident losses, and delayed margin, then give finance a budget case it can challenge.
technical debt costcost of technical debt
Should you rewrite Fortran in Rust or wrap it?
8 min read
Should you rewrite Fortran in Rust or wrap it?
Decide when to rewrite Fortran in Rust, when to wrap a proven kernel, and how to compare parity, maintenance risk, and hardware cost.
rewrite Fortran in Rustwrap Fortran code
Are Excel and Access production systems?
8 min read
Are Excel and Access production systems?
Learn how to identify Excel and Access production systems, expose their hidden rules, and migrate them without breaking month-end work.
Excel and Access production systemsExcel migration
How a whole codebase dependency graph finds hidden calls
8 min read
How a whole codebase dependency graph finds hidden calls
A whole codebase dependency graph exposes cross-language calls, generated names, batch handoffs, and data contracts that repository scans miss.
whole codebase dependency graphcross-language dependency analysis
Legacy Perl scripts nobody wants to touch
8 min read
Legacy Perl scripts nobody wants to touch
Find which legacy Perl scripts still run, rebuild their CPAN dependencies, expose hidden regex rules, and choose what to retire or rewrite.
legacy Perl scriptsPerl dependency audit
How to extract a service from a monolith safely
8 min read
How to extract a service from a monolith safely
Learn how to extract a service from a monolith by choosing data independence, limiting deployment risk, and making rollback a routing change.
extract a service from a monolithmonolith service extraction
Should you refactor, rewrite or replace?
8 min read
Should you refactor, rewrite or replace?
Learn when to refactor, rewrite or replace a legacy system, what each budget buys, and why the wrong choice can consume a year without reducing risk.
refactor rewrite or replacelegacy system rewrite
A service boundary from data access patterns
8 min read
A service boundary from data access patterns
Find a service boundary from data access patterns by measuring co-writes, decision reads, batch recovery, and transactions that must stay local.
service boundary from data access patternsservice boundary analysis
How to review AI-generated code you cannot read
8 min read
How to review AI-generated code you cannot read
Learn how to review AI-generated code at scale with property tests, differential replay, invariants, focused human inspection, and clear evidence.
review AI-generated codeproperty testing
A legacy system migration plan before code generation
8 min read
A legacy system migration plan before code generation
Build a legacy system migration plan around evidence, extraction order, parity gates, and engineering decisions before generating replacement code.
legacy system migration planlegacy code migration
Typed tools keep agents out of your API's blind spots
8 min read
Typed tools keep agents out of your API's blind spots
Typed tools give agents explicit API contracts, boundary validation, and approval gates that stop malformed or unintended writes before execution.
typed toolsschema-bound tool calls
How to recover knowledge from legacy code after its author leaves
8 min read
How to recover knowledge from legacy code after its author leaves
Learn how to recover knowledge from legacy code using source analysis, production evidence, parity tests, and honest records of what cannot be restored.
recover knowledge from legacy codelegacy system documentation
Can a zero downtime migration stay reversible?
8 min read
Can a zero downtime migration stay reversible?
Plan a zero downtime migration with strangler routing, durable dual writes, reconciliation, shadow reads, and a rollback-ready cutover.
zero downtime migrationstrangler routing
How AI agent approval becomes a real control
8 min read
How AI agent approval becomes a real control
Place AI agent approval at the last responsible moment, log exact intent and results, design reversals, and keep some operations human-only.
AI agent approvalhuman approval step
Can an AI agent work without whole codebase context?
8 min read
Can an AI agent work without whole codebase context?
Why whole codebase context determines whether AI agents find hidden dependencies, preserve legacy behavior, and survive production batch runs.
whole codebase contextAI agents for legacy code
How coding agent evals catch what passing tests miss
8 min read
How coding agent evals catch what passing tests miss
Measure coding agent evals with regression checks, task cost, latency, patch quality, and failures found only in unfamiliar repositories.
coding agent evalscoding agent CI metrics
Go rewrite infrastructure costs follow the workload
8 min read
Go rewrite infrastructure costs follow the workload
Go rewrite infrastructure costs fall when memory, concurrency and connections improve, but workload limits decide whether the bill actually moves.
Go rewrite infrastructure costsGo memory per instance
Can automated repository documentation be trusted?
8 min read
Can automated repository documentation be trusted?
See how automated repository documentation maps code and data reliably when every claim carries evidence, scope, and explicit uncertainty.
automated repository documentationrepository call graph
A rollback plan must survive the first write
8 min read
A rollback plan must survive the first write
A rollback plan only works when write ownership, data replay, compatibility, warm-system timing, and rehearsal evidence are settled before cutover.
rollback planlegacy system cutover