See Pwas at work: 30 guided minutes on an application that already runs. Book the demo →
Compare products Pwas in your industry Book a demo
Pwas-One
ERPShopCRMDoc ManagerAI Agent
Pwas.FrameworkPwas.ClientPwas.OrchestratorPwas.Microservice
Pwas CLIAssessmefyDynamic Registry Builder
Solutions Industries Documentation Partners Request a demo Get Started
Italiano English
pwas.it — powered by pooel.it
solutions · modernisation

From accumulated code to declared configuration.

Pwas.Framework reads your domain schema as configuration — entities, permissions, pipelines — instead of code to maintain by hand. Without the single cutover nobody wants to sign off.

the problem

Every backend accumulates the same boilerplate.

CRUD repeated entity by entity, hand-written permissions, validations duplicated in every endpoint: it's the hidden cost of any system that grows for years without a declarative layer underneath. Modernising with Pwas doesn't mean rewriting everything — it means bringing the domain schema into a declarative description and letting the engine generate APIs, permissions and validation.

the choice that matters

Rewrite, migrate or surround: three routes, very different outcomes.

When a system reaches this point, the same three options are always on the table, and the choice determines the project's fate more than any later technical decision.

Rewrite from scratch

The most seductive route and the one that disappoints most often. The problem isn't technical: it's that the old system contains years of rules nobody ever wrote down anywhere else. Every odd behaviour is almost always the trace of a real case handled in 2014. Rewriting means rediscovering them all, one at a time, in production. And the new system has to reach functional parity before it can deliver any value — a period in which you pay twice and gain nothing.

Migrate to a standard product

Makes sense when your process is genuinely standard. When it isn't — and if it were you'd probably have migrated already — the migration becomes a customisation, and customising someone else's product takes you straight back to the original problem: additional code that every upgrade risks breaking, plus a loss of control over timings.

Surround

The route we recommend almost always, and not out of commercial caution. The legacy system stays where it is and keeps doing what it does well — typically the recording, posting and calculation functions that were expensive and work. Around it you build a declarative layer covering the processes legacy doesn't describe, reading from and writing to it through its interfaces, and becoming the place where all new things are created.

The decisive advantage is that every step produces value on its own. There's no moment where something must be switched off and something else switched on and hoped for. If after three months you decide to stop, you still have one more governed process and no damage. Over time, in some projects, the legacy perimeter narrows until it becomes replaceable at low risk — but that's a consequence, not a goal declared at the start.

the comparison

Rewrite versus incremental modernisation.

The same months of work, distributed very differently.

Complete rewrite

All the risk concentrated at the end

  • No value delivered until functional parity is reached.
  • Unwritten rules are rediscovered in production, one at a time.
  • For months you run two systems and pay twice.
  • The cutover is a risk event nobody wants to sign off.
  • If the project stops halfway, nothing usable remains.
  • The initial estimate is almost always optimistic by a factor of two.
Incremental modernisation

Value at every step, risk distributed

  • Every process brought into the declarative layer is useful immediately, on its own.
  • Unwritten rules emerge in parallel running, with the old system still active.
  • There's no forced dual-running period across the whole perimeter.
  • There's no cutover moment: there's a series of small reversible activations.
  • If the project stops, what's been done stays in service and keeps working.
  • Estimates cover small scopes, so they're wrong less often and corrected sooner.
the path

One domain at a time.

The Dynamic Registry Builder can start from existing documentation — specifications, data models — to propose an initial blueprint, so modernisation starts from a concrete hypothesis instead of a blank page.

  1. 01

    An honest inventory of what exists

    Which functions legacy performs well, which badly, which not at all. It's a distinction nobody in the organisation has usually written down, and without it any modernisation plan rests on impressions.

  2. 02

    Check what legacy exposes

    Application interfaces, file exchanges, read-only database access. It determines what is realistically feasible and must be clarified before promising anything, because it's the constraint that shapes everything else.

  3. 03

    Blueprint of the first domain

    We pick a narrow scope and describe its model: entities, relations, permissions, operations. Where documentation or a data model exists, the Registry Builder proposes a first version to correct, instead of starting from a blank page.

  4. 04

    Parallel running

    The new layer goes into use on that scope while legacy keeps running. This is where the unwritten rules emerge, and they get formalised one at a time with nothing at risk.

  5. 05

    Rollout and shrinking the legacy perimeter

    Repeat on other domains. Over time legacy is responsible only for what it genuinely does well, and whether to replace it becomes an economic decision made with real data, not an upfront bet.

how it works

Legacy stays on while the new scope grows.

The existing system keeps working and is read and written through its interfaces, while new processes go live one at a time.

AAAWgmp1bWIAAAAeanVtZGMycGEAEQAQgAAAqgA4m3EDYzJwYQAAABZcanVtYgAAAEdqdW1kYzJtYQARABCAAACqADibcQN1cm46YzJwYTpmNzliZWY3My03YzYyLTQwN2EtODNiYi02NGU1OGEyZWY5Y2UAAAADl2p1bWIAAAApanVtZGMyYXMAEQAQgAAAqgA4m3EDYzJwYS5hc3NlcnRpb25zAAAAALxqdW1iAAAARGp1bWRjYm9yABEAEIAAAKoAOJtxE2MycGEuaW5ncmVkaWVudC52MwAAAAAYYzJzaDndLGYM/EHcnMUAJpPK6FgAAABwY2JvcqNpZGM6Zm9ybWF0bWltYWdlL3N2Zyt4bWxqaW5zdGFuY2VJRHgseG1wOmlpZDo1ODFjZWU4Yy01ZTc5LTRjYjMtODlhMy0xMTQ4YjVmYzdmY2ZscmVsYXRpb25zaGlwaHBhcmVudE9mAAAB4mp1bWIAAABBanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5hY3Rpb25zLnYyAAAAABhjMnNoqkH+b/zwooO0klOflQGxbQAAAZljYm9yomdhY3Rpb25zgqJmYWN0aW9ua2MycGEub3BlbmVkanBhcmFtZXRlcnOha2luZ3JlZGllbnRzgaJjdXJseC1zZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmluZ3JlZGllbnQudjNkaGFzaFgg3H5sh+HZ//B3NBI57z/I9BywqIaFxMnPk91Kh18q1/qkZmFjdGlvbngdY29tLmFudGhyb3BpYy5jbGF1ZGUucHJvdmlkZWRqcGFyYW1ldGVyc6F4H2NvbS5hbnRocm9waWMub3JpZ2luLWNvbmZpZGVuY2VndW5rbm93bmtkZXNjcmlwdGlvbnhmQ2xhdWRlIHByb3ZpZGVkIHRoaXMgZmlsZSBhdCB0aGUgcmVxdWVzdCBvZiBhIHVzZXIgYW5kIG1heSBoYXZlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdGhlIGZpbGUgY29udGVudHMubXNvZnR3YXJlQWdlbnShZG5hbWVmQ2xhdWRlcmFsbEFjdGlvbnNJbmNsdWRlZPUAAADIanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaM9wDYKbl/nJVcL40HwT3WwAAACAY2JvcqVjYWxnZnNoYTI1NmNwYWRMAAAAAAAAAAAAAAAAZGhhc2hYIAOMWO7Z2W22Tp42dCHC92z99XlwAqRh6I8qu01Omrx0ZG5hbWVuanVtYmYgbWFuaWZlc3RqZXhjbHVzaW9uc4GiZXN0YXJ0GQEQZmxlbmd0aBkeBAAAAj5qdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAACD2Nib3KlY2FsZ2ZzaGEyNTZpc2lnbmF0dXJleE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOmY3OWJlZjczLTdjNjItNDA3YS04M2JiLTY0ZTU4YTJlZjljZS9jMnBhLnNpZ25hdHVyZWppbnN0YW5jZUlEeCx4bXA6aWlkOjI3NzhiNzc3LWYwMGEtNGY2MC1hODNlLWNmMmRhOTY2N2I3YXJjcmVhdGVkX2Fzc2VydGlvbnODomN1cmx4LXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaW5ncmVkaWVudC52M2RoYXNoWCDcfmyH4dn/8Hc0EjnvP8j0HLCohoXEyc+T3UqHXyrX+qJjdXJseCpzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmFjdGlvbnMudjJkaGFzaFgg+sOR9q44OAbAlioHl9bJiSrI7WI4nAys0oIKP4vTP0KiY3VybHgpc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFkaGFzaFgg6YLsYS36EGsPTibigPNFMwD0/UoOPmqv3b+SlHLqTjZ0Y2xhaW1fZ2VuZXJhdG9yX2luZm+jZG5hbWVvQW50aHJvcGljIEZpbGVzZ3ZlcnNpb25lMS4wLjBrc3BlY1ZlcnNpb25lMi40LjAAABA4anVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAABAIY2JvctKEWQISogEmGCFZAgowggIGMIIBjaADAgECAhRA5aAK7sI50L64g/oGQgU9Z1UTADAKBggqhkjOPQQDAzBJMRcwFQYDVQQKEw5BbnRocm9waWMsIFBCQzEuMCwGA1UEAxMlQW50aHJvcGljIENvbnRlbnQgQ3JlZGVudGlhbHMgUm9vdCBDQTAeFw0yNjA4MDcxODQzNTZaFw0yODA4MDYxOTQzNTZaMEQxFzAVBgNVBAoTDkFudGhyb3BpYywgUEJDMSkwJwYDVQQDEyBBbnRocm9waWMgQ2xhdWRlIENvbnRlbnQgU2lnbmluZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJh6CmvLUBgFFNU0vUKlOVtE6djd17L5SuwX0LemFisBM3dkd/3cyjxFA3Qo5S46fX0/ihY0VZ7mfb9KF703t5OjWDBWMA4GA1UdDwEB/wQEAwIHgDAVBgNVHSUEDjAMBgorBgEEAYPoXgIBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUzlHiBIFOZFsj+OPEz5o+nMHXXMIwCgYIKoZIzj0EAwMDZwAwZAIwMXMdFJ4BetLLVY7ORuE9noqbbAZOZn/aArXyTwFAZfKrPzxF2vPoJNf1+UCdg1XGAjBwX1zd9WGqYkqmL5SFqw1QySjr1zJfpJM9+1rdDwSPLMOPOjKuiXjoU/pUUeG9RwmhY3BhZFkNngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZYQHpGD5NUtK/a/90oCDwZQlTosN4oJUXyCFZehmCZF1ZNJHp1v2DWHSD3eH+QeKfcQx5Xf4JuJoPY9GKx1jjO6zA=Modernising without switching everything offThe legacy system keeps running and is reached through its interfaces. New functions are declared on the platform and go live one scope at a time, so the legacy perimeter shrinks progressively while data keeps flowing in both directions.LEGACY STAYS ON WHILE THE NEW SCOPE GROWSLegacy systemSTAYS IN PRODUCTIONIntegration layerREAD AND WRITE BACKDeclared new scopeONE PROCESS AT A TIMEProgressive switchSCOPE BY SCOPERESULTNo big-bang migrationLegacy perimeter shrinksRules finally written downData keeps flowing both ways: no duplicate entry during the transition.
what changes structurally

Properties of the approach.

Characteristics verifiable in a demo, not savings estimates.

0
days of downtime required

The declarative layer sits alongside the existing system: there's no cutover moment where something must be switched off.

0
lines of controller for CRUD

Search, create, update, delete, permissions and APIs for every entity derive from the declaration, not from code written entity by entity.

readable
domain knowledge

Rules leave the code and enter a structured document that non-programmers can read and verify.

reversible
every single step

Because legacy stays active, stopping or backing out of a scope doesn't require an emergency restore.

These are properties of the method and the platform, not results measured at specific customers. Timings and effort depend on what your system exposes and on domain complexity, and are estimated together after the feasibility check.

in depth

The questions decision-makers ask themselves.

"Our problem is that only one person knows how it works. Does this solve that?"

Partly, and it's worth understanding which part, because it's the most serious reason to modernise and the least discussed in commercial proposals.

Concentration risk has two components. The first is technical knowledge of the system — how it's built, where to touch it — and that transfers, laboriously, to anyone with the skills. The second is domain knowledge: why that control exists, which real case produced that exception, what happens on 31 December. That's the irreplaceable part, and it's the part that leaves with the person.

The declarative model performs no magic, but it moves the second kind of knowledge from code into a document a domain person can read. When the rule "an order paid in advance cannot ship without confirmed receipt" is written as a readable condition instead of inside a function, anyone who knows the trade can verify, challenge and correct it, without knowing how to program.

The extraction work remains — the hardest phase of the project, and one nobody can do for you: someone has to sit with that person and write down what they know. The value of that work, however, doesn't depend on the project continuing.

"If legacy has no interfaces, are we stuck?"

Rarely stuck, often slowed. In practice there are three routes, in order of preference.

  • Application interfaces, where they exist: the best route, because legacy keeps control of its own logic and operations are synchronous and verifiable.
  • Structured file exchange, the most common reality in systems of a certain age: periodic inbound extracts and return files. It works well, provided you carefully design frequency, discrepancy handling and what happens when two worlds diverge.
  • Direct database reads, read-only and agreed with whoever maintains the system: workable when the other two don't exist, as long as it stays read-only.

What we don't do is write directly into a legacy database bypassing its application logic. It looks like the shortcut that solves everything and is the cause of the worst damage, which surfaces months later in forms hard to trace back to the cause.

"How long does it realistically take?"

The right question isn't how long modernisation takes, because put that way the honest answer is "years" and it helps nobody decide. The useful question is: how long before the first domain is in service and producing value on its own.

For a narrow, well-defined scope the order of magnitude is a few weeks from the initial session, plus the time for legacy integration — the most uncertain variable, depending entirely on what that system exposes and how available its maintainers are. That's why the feasibility check is the second step of the path and not the last.

From there the pace depends on how many domains you want to bring across and with what resources. The difference from a rewrite is that there's no date beyond which the project either succeeds or was pointless: every completed domain is value banked, regardless of what happens afterwards.

"And if we do eventually want to switch the old system off?"

It becomes a far simpler decision than it is today, for a specific reason: by then the legacy perimeter has narrowed and its rules have been written down.

The reason you can't switch it off today isn't that it's technically impossible: it's that nobody knows exactly what it does. After three or four domains have been moved out and formalised, what remains inside is a smaller, better understood set. Replacement, at that point, is a project of known size instead of a leap in the dark.

It should be said frankly, though, that in many cases it still isn't worth it. If legacy has shrunk to doing posting and calculations that have worked for twenty years without trouble, replacing it is spend without return. Successful modernisation isn't the kind that eliminates the old system: it's the kind that stops being its prisoner.

quick check

Is this your case?

Probably yes

  • You have a system that works but can no longer absorb new requirements.
  • Every change costs weeks and passes through a few irreplaceable people.
  • Processes created in recent years live in spreadsheets and departmental databases.
  • You considered a rewrite and stopped at the risk, rightly.
  • You need to expose data or functions externally and the current system can't.
  • You want to reduce dependence on a long-standing supplier without upending everything.

Probably not

  • Your current system also covers recently created needs well.
  • A mature vertical product covers almost your entire process.
  • The real constraint is an infrastructure change, not application logic.
  • Those who know the domain can't be involved in formalising it.
frequently asked

Modernisation: the specific questions.

Do we have to migrate historical data?
Usually not, or only partly. Because legacy stays active, historical data stays where it is and is read when needed. Migrations happen only when a scope is actually moved, and at that point they concern a circumscribed, well-understood set rather than the whole archive. It's one of the main reasons this approach is less risky than a rewrite.
What happens if two systems drift apart?
That's the scenario to design explicitly, and it must be addressed at the start. The principle we apply is that every data item has a declared owning system: legacy owns some information, the new layer owns other, and no data has two systems claiming it. Where drift is still possible — typically with periodic file exchange — automatic checks detect and flag it, instead of it being discovered at month end.
Can the Registry Builder read our documentation?
It can start from existing documentation, functional specifications or data models to propose an initial blueprint of entities and relations. It's a proposal to correct, not a final result: it exists to avoid the blank page and speed up the first session. Output quality depends heavily on how far the documentation reflects the real system, which in legacy projects is often less than expected.
Can we keep everything in-house?
Yes. On-premise installation is a supported deployment mode, and in modernisation projects it's frequent because legacy often already runs in your own server room and proximity simplifies integration. European cloud and mixed setups are equally workable and the choice stays reversible.
Who maintains the new layer afterwards?
Ordinary domain changes — a field, a permission, a rule — are within reach of trained internal staff, because the configuration is a readable structured document. Work on integrations and technical components needs a technical profile, which can be yours, a partner's or ours. The explicit goal of the project is that you don't depend on us for domain changes.
How do we justify the investment internally?
In our experience the argument that holds best isn't projected savings, which are hard to prove in advance, but risk reduction: a first domain in service within weeks, at known cost and with no downtime, proves or disproves the hypothesis before the investment becomes significant. It's also why we always suggest starting small.

Have a legacy system to modernise?

After the demo, the assessment looks at what your system exposes and we tell you what's realistic, with timing and cost.