dozens of migrations
Java, Python, COBOL and VB6 rewritten into Go, Rust and TypeScript in 30 days
Not only the mainframe. A Java monolith spread over eight servers, Python that ran into the GIL, a Node service that eats memory faster than it serves requests — those become Go and Rust, and the infrastructure bill drops with them. COBOL on z/OS, RPG on the AS/400, VB6 and Delphi on the desktop, ColdFusion and PHP on the web, Perl, PL/SQL, Fortran and ABAP as well. Our platform reads the whole codebase and rewrites it, our engineers take the parts where being wrong is expensive, and the old system keeps running the entire time.
Four screens, about ten minutes. An engineer reads it and comes back with a scope, a date and a price — no demo, no sales sequence.
- 30
- days, the ceiling on any project
- 20
- legacy stacks we migrate
- 10+
- years inside other people's systems
- 1M+
- lines in a single rebuild
Every system we take off life support
- Java, Python, Node12–20 days
Java / Spring Boot
Go
- Machine translates
- services, JPA entities, REST controllers
- Engineer decides
- what the framework was doing for you
- Java, Python, Node10–18 days
Python / Django
Go
- Machine translates
- views, models, Celery tasks
- Engineer decides
- the parts that were fast because of C extensions
- Java, Python, Node8–15 days
Node.js services
Go
- Machine translates
- routes, middleware, ORM models
- Engineer decides
- where dynamic typing hid a contract
- Java, Python, Node12–21 days
Ruby on Rails
Go
- Machine translates
- controllers, ActiveRecord, background jobs
- Engineer decides
- metaprogramming nobody can grep for
- Java, Python, Node12–20 days
C# / .NET Framework
Go
- Machine translates
- services, EF models, WCF endpoints
- Engineer decides
- Windows-only assumptions
- Java, Python, Node7–14 days
Python number crunching
Rust
- Machine translates
- hot loops, array code, serialization
- Engineer decides
- which precision the result actually needs
- Mainframe21–30 days
COBOL on z/OS
Go
- Machine translates
- programs, copybooks, packed decimal
- Engineer decides
- CICS screens, job ordering
- Mainframe7–14 days
JCL batch
Go + scheduler
- Machine translates
- job steps, dataset flow
- Engineer decides
- the dependency graph between streams
- Data7–12 days
VSAM + DB2
Postgres
- Machine translates
- record layouts, indexes
- Engineer decides
- what the copybook meant by a filler field
- AS/40018–28 days
RPG on AS/400
Go
- Machine translates
- RPGLE, DDS, service programs
- Engineer decides
- green screens, OPM leftovers
- Desktop10–18 days
VB6 desktop
TypeScript
- Machine translates
- forms, business rules, COM calls
- Engineer decides
- what the ActiveX control did
- Desktop14–24 days
Delphi 7
Go + TypeScript
- Machine translates
- units, VCL forms, DB access
- Engineer decides
- third-party components with no source
- Web8–16 days
ColdFusion
TypeScript
- Machine translates
- CFML templates, queries, scheduled tasks
- Engineer decides
- tags no one documented
- Web12–21 days
PHP 5.x monolith
Go
- Machine translates
- controllers, models, cron jobs
- Engineer decides
- where the framework ends and the business starts
- Web5–10 days
Perl scripts
Go
- Machine translates
- scripts, regex-heavy parsing
- Engineer decides
- undocumented file formats
- Data9–18 days
PL/SQL packages
Go + Postgres
- Machine translates
- procedures, cursors, triggers
- Engineer decides
- business rules hidden in triggers
- Desktop7–12 days
Access + Excel
Go + web client
- Machine translates
- queries, forms, macros
- Engineer decides
- the spreadsheet that is really the spec
- Web12–22 days
One deployable
Services
- Machine translates
- module boundaries, call graph
- Engineer decides
- where to cut the shared schema
- Data10–20 days
Fortran
Rust
- Machine translates
- numeric kernels, array layout
- Engineer decides
- floating-point behaviour that must not change
- Data9–18 days
ABAP reports
Go
- Machine translates
- report logic, selection screens
- Engineer decides
- what the SAP tables actually contain
One real dependency graph
As it sits today
Mechanical rewrite60%
Boundary cut by an engineer29%
Deletion candidate11%
The same graph as a table
| Module | Lines | Imported by | Imports | Domain | Class | |
|---|---|---|---|---|---|---|
| M01 | 326 | loc | 0 | 10 | S01 | Mechanical rewrite |
| M02 | 142 | loc | 0 | 3 | S02 | Mechanical rewrite |
| M03 | 55 | loc | 0 | 3 | S02 | Mechanical rewrite |
| M04 | 89 | loc | 0 | 3 | S02 | Mechanical rewrite |
| M05 | 5,194 | loc | 3 | 15 | S03 | Boundary cut by an engineer |
| M06 | 239 | loc | 5 | 1 | S03 | Boundary cut by an engineer |
| M07 | 884 | loc | 20 | 0 | S03 | Boundary cut by an engineer |
| M08 | 485 | loc | 4 | 6 | S03 | Mechanical rewrite |
| M09 | 9,835 | loc | 4 | 7 | S03 | Boundary cut by an engineer |
| M10 | 514 | loc | 2 | 0 | S03 | Mechanical rewrite |
| M11 | 677 | loc | 1 | 5 | S03 | Mechanical rewrite |
| M12 | 236 | loc | 4 | 11 | S03 | Boundary cut by an engineer |
| M13 | 187 | loc | 3 | 3 | S04 | Boundary cut by an engineer |
| M14 | 454 | loc | 1 | 1 | S05 | Mechanical rewrite |
| M15 | 58 | loc | 3 | 1 | S05 | Mechanical rewrite |
| M16 | 356 | loc | 4 | 2 | S05 | Mechanical rewrite |
| M17 | 247 | loc | 4 | 2 | S05 | Mechanical rewrite |
| M18 | 59 | loc | 3 | 1 | S04 | Boundary cut by an engineer |
| M19 | 139 | loc | 0 | 0 | S04 | Deletion candidate |
| M20 | 330 | loc | 13 | 2 | S04 | Boundary cut by an engineer |
| M21 | 414 | loc | 1 | 1 | S06 | Mechanical rewrite |
| M22 | 1,670 | loc | 3 | 3 | S06 | Mechanical rewrite |
| M23 | 1,218 | loc | 18 | 0 | S06 | Boundary cut by an engineer |
| M24 | 2,574 | loc | 15 | 3 | S06 | Boundary cut by an engineer |
| M25 | 163 | loc | 4 | 1 | S04 | Boundary cut by an engineer |
| M26 | 251 | loc | 2 | 5 | S04 | Mechanical rewrite |
| M27 | 161 | loc | 1 | 2 | S04 | Mechanical rewrite |
| M28 | 99 | loc | 2 | 0 | S04 | Mechanical rewrite |
| M29 | 45 | loc | 0 | 0 | S04 | Deletion candidate |
| M30 | 25 | loc | 0 | 0 | S04 | Deletion candidate |
| M31 | 1,417 | loc | 24 | 0 | S04 | Boundary cut by an engineer |
| M32 | 82 | loc | 1 | 0 | S04 | Mechanical rewrite |
| M33 | 30 | loc | 4 | 1 | S04 | Boundary cut by an engineer |
| M34 | 141 | loc | 3 | 1 | S03 | Mechanical rewrite |
| M35 | 79 | loc | 1 | 1 | S03 | Mechanical rewrite |
| M36 | 3,036 | loc | 3 | 10 | S03 | Mechanical rewrite |
| M37 | 173 | loc | 1 | 1 | S03 | Mechanical rewrite |
| M38 | 2,501 | loc | 1 | 9 | S03 | Mechanical rewrite |
| M39 | 1,452 | loc | 3 | 4 | S03 | Mechanical rewrite |
| M40 | 50 | loc | 1 | 1 | S03 | Mechanical rewrite |
| M41 | 2,148 | loc | 0 | 9 | S01 | Deletion candidate |
| M42 | 167 | loc | 0 | 1 | S01 | Deletion candidate |
| M43 | 4,873 | loc | 2 | 15 | S07 | Mechanical rewrite |
| M44 | 2,241 | loc | 1 | 10 | S07 | Mechanical rewrite |
| M45 | 474 | loc | 2 | 13 | S07 | Mechanical rewrite |
under the hood
A million lines is the normal size of the job
Every language in the tree, at once
Systems are never one language. COBOL calls JCL, JCL drives a C utility, a Perl script fixes the file before PL/SQL loads it. The platform parses all of it in parallel and holds one graph across the whole thing, which is why nothing falls out at the seams between languages.
Fewer machines for the same load
A Java or Python service rewritten in Go usually needs a fraction of the memory and a fraction of the instances, and a Rust kernel turns a batch window into a coffee break. That is the whole reason to move code that is not broken: the same behaviour on a smaller bill, and headroom you no longer have to buy.
A million lines and up
That is the size we plan around, not the ceiling. Above it we split the estimate and price the first part on its own. Scale is a scheduling question here, not a feasibility one.
Same behaviour, new architecture
A parity harness replays your recorded production traffic against old and new and compares to the cent. What changes is the shape: services with owners, a schema you can read, tests that came with the code, and a deploy that does not need a change window.
Air-gapped, on your hardware or ours
For regulated work the models come from us and run inside your perimeter with no outbound connection at all. If you do not have machines that can carry them, we rent you ours and they sit on your floor. Nothing about your code has to leave the building.
Your cloud, your data centre, a client VPN, or a room with no network at all — every one of these has a working setup, and the specifics go into the contract.
What we take on
- AI developmentThe agent, the typed tool layer around it, and the evaluation harness that keeps it honest in CI.
- Custom softwareA real system where a spreadsheet, an Access database and three patient people currently do the work.
- ModernizationPHP 5, VB6, Delphi and ColdFusion rewritten into Go and TypeScript while the old system keeps running.
- Mainframe and AS/400COBOL, JCL, CICS and VSAM off z/OS, with batch and green screens rebuilt as services.
- AI agentsAgents that run a business process, with a named human approving anything irreversible.
- System assessmentA map of the codebase, a ranked risk register and a phased migration plan with costs against it.
- AI consultingTwo or three use cases worth building, a measured baseline, and a build-or-buy call on each.
- Monolith splitOne deployable on a shared schema, cut into services that release on their own schedule.
How the work runs
- 01
Read access
A read-only copy of the repository, the build scripts, and whatever runbooks survived. We sign your NDA first if that is how your company works.
- 02
The map
The platform parses all of it and reports what is actually there: modules and their dependencies, code nothing calls any more, scheduled jobs nobody documented, and the place where the build only works on one machine. This lands before any rewriting starts.
- 03
Rewrite in slices
One bounded module at a time, with tests written against the behaviour of the original. Old and new run on the same inputs until the outputs match, then traffic moves. Nothing gets switched over on a single date.
- 04
Handover
Your engineers get the repository, the tests written along the way, and the map kept current. We answer questions afterwards, and we hold no keys you cannot revoke.
Ask for the map first
The map is the cheapest thing we sell and the only sound basis for pricing the rest. Tell us what you are running and we come back with what is inside it, what a rewrite takes and what it costs.
The form goes to us, not into a sales sequence. You do not have to sit through a demo to get an answer.