Never change what you do not understand.

ATLAS models your legacy system from its own evidence, then carries the work through to merged, verified code.

Rows of legacy server hardware in a machine room
SurfaceAuto
StructureAuto
SemanticsAsked
RuntimeObserved

Reads what your system already produces

Git GitHub GitLab PostgreSQL MySQL Apache Maven OpenTelemetry Prometheus Grafana Datadog Jira
Why modernization fails

Three failure modes, in order of what they cost.

Most expensive

Silent behaviour change

A rewrite alters an edge case nobody knew existed. It is discovered in production months later, usually by a customer or a regulator.

Costly

Analysis paralysis

Twelve weeks of discovery produces a slide deck. No code moves, and the assessment goes stale before execution starts.

Corrosive

Plausible fiction

Tools generate confident documentation, plans and code from inference. Everything reads well. Some of it is wrong, and there is no way to tell which parts.

Static analysis maps structure but never observes runtime. Observability sees runtime but not intent. Code assistants generate changes with no model of the system at all. Nothing connects the four links as one chain. That chain is the product.

One continuous chain, with nothing inferred between the links.

Evidence

Source, history, schema, live data, servers, logs, metrics and traces, pulled read-only and redacted at the boundary.

F1
Understanding

One typed graph where every node carries its stratum, its sources and its confidence. Gaps become questions, not guesses.

F2 and F3
Planned work

Tasks generated from the graph, each shipped as a self-contained envelope a person or an agent can execute without research.

F4 and F9
Verified change

Production transactions replayed through old and new. Every difference ruled on by a named person before merge.

F8

One gap. Three vocabularies.

When evidence runs out, the platform does not fill the space with plausibility. It writes a question, routes it to whoever actually knows, and renders it in that person's language.

Choosing beats typing. Options are synthesised from competing readings, observed production values and precedent. Free text stays available as an escape, never as the default path.

Branch at PremiumCalculator:218 fires in 0.4% of calls and was last hit six days ago. Live requirement or never-removed fallback?

trace:otel, 14d window, 47 executions ยท vcs:commit a4f2e91

None of these I do not know Ask someone else

Answering this unblocks 23 tasks and decides whether 2 test cases are treated as correct behaviour.

Differences are grouped by cause, and someone has to sign for each one.

Captured production transactions run through both implementations. The output is not a wall of failing cases. It is a short list of reasons, each needing a ruling before the merge is allowed.

Worked example from a policy rating engine
CauseCountExampleRuling
Rounding on half-cent 201 1284.125 to .12 against .13 Accepted Matches the filed rate manual
Credit ordering 21 Credit applied before the surcharge rather than after Accepted Signed off against RATE-0042
New York pre-2014 rate 2 0.0725 against 0.0680 Merge blocked Unexplained
0

Unexplained differences permitted to reach a merge. This is a gate, not advice.

Live paths

Coverage is measured against paths runtime evidence proves are used. Coverage of dead code is worthless.

15:1

Target clustering ratio, so one answer retires many questions instead of one.

How it lands

Read-only first. Nothing writes to your systems until the model is trusted.

Assess
F1, F2, F3

Ingestion, the system model and clarification for one language pair. No code is written and no write access is needed.

System map, risk register, confirmed rules, a populated task board
Prove
F8 test generation

Characterization tests for untested legacy code. Still purely additive, so nothing changes behaviour.

Behaviour pinned before anything is allowed to move
Execute
F5, F6, F7

Low-risk task types only: dependency upgrades, dead code removal, test backfill. Agent-authored pull requests, human review.

Differential replay before every merge
Decide
F9

Migration decisions with constraint propagation. Only valuable once the model underneath has earned trust.

Architecture decision records that bind downstream work
Transform
Full scope

Agent execution on service extraction, schema migration and framework replacement.

The parts everyone wanted on day one, attempted last
Full phasing, metrics and risks

Evidence or a question. Never an inference.

Every fact in the model traces to source code, schema, a runtime observation, or a named human's answer. Where the platform cannot establish something, it blocks and asks. It recommends, explains and refuses. It never decides.

Start with an assessment that cannot lie to you.

Read-only, on your infrastructure, one language pair. You get a system map and a task board, or a precise account of what was missing and why.