decenas de migraciones
Java, Python, COBOL y VB6 reescritos en Go, Rust y TypeScript en 30 días
No solo el mainframe. Un monolito Java repartido en ocho servidores, Python que chocó con el GIL, un servicio Node que se come la memoria más rápido de lo que atiende peticiones: todo eso se convierte en Go y Rust, y la factura de infraestructura baja con ello. También COBOL en z/OS, RPG en el AS/400, VB6 y Delphi en el escritorio, ColdFusion y PHP en la web, Perl, PL/SQL, Fortran y ABAP. Nuestra plataforma lee toda la base de código y la reescribe, nuestros ingenieros se quedan con las partes donde equivocarse sale caro, y el sistema viejo sigue funcionando todo ese tiempo.
Cuatro pantallas, unos diez minutos. Un ingeniero lo lee y vuelve con alcance, fecha y precio — sin demo y sin secuencia comercial.
- 30
- días, el techo de cualquier proyecto
- 20
- stacks legacy que migramos
- 10+
- años dentro de sistemas ajenos
- 1M+
- líneas en una sola reescritura
Todos los sistemas que desconectamos del respirador
- Java, Python, Node12–20 days
Java / Spring Boot
Go
- La máquina traduce
- services, JPA entities, REST controllers
- El ingeniero decide
- what the framework was doing for you
- Java, Python, Node10–18 days
Python / Django
Go
- La máquina traduce
- views, models, Celery tasks
- El ingeniero decide
- the parts that were fast because of C extensions
- Java, Python, Node8–15 days
Node.js services
Go
- La máquina traduce
- routes, middleware, ORM models
- El ingeniero decide
- where dynamic typing hid a contract
- Java, Python, Node12–21 days
Ruby on Rails
Go
- La máquina traduce
- controllers, ActiveRecord, background jobs
- El ingeniero decide
- metaprogramming nobody can grep for
- Java, Python, Node12–20 days
C# / .NET Framework
Go
- La máquina traduce
- services, EF models, WCF endpoints
- El ingeniero decide
- Windows-only assumptions
- Java, Python, Node7–14 days
Python number crunching
Rust
- La máquina traduce
- hot loops, array code, serialization
- El ingeniero decide
- which precision the result actually needs
- Mainframe21–30 days
COBOL on z/OS
Go
- La máquina traduce
- programs, copybooks, packed decimal
- El ingeniero decide
- CICS screens, job ordering
- Mainframe7–14 days
JCL batch
Go + scheduler
- La máquina traduce
- job steps, dataset flow
- El ingeniero decide
- the dependency graph between streams
- Datos7–12 days
VSAM + DB2
Postgres
- La máquina traduce
- record layouts, indexes
- El ingeniero decide
- what the copybook meant by a filler field
- AS/40018–28 days
RPG on AS/400
Go
- La máquina traduce
- RPGLE, DDS, service programs
- El ingeniero decide
- green screens, OPM leftovers
- Escritorio10–18 days
VB6 desktop
TypeScript
- La máquina traduce
- forms, business rules, COM calls
- El ingeniero decide
- what the ActiveX control did
- Escritorio14–24 days
Delphi 7
Go + TypeScript
- La máquina traduce
- units, VCL forms, DB access
- El ingeniero decide
- third-party components with no source
- Web8–16 days
ColdFusion
TypeScript
- La máquina traduce
- CFML templates, queries, scheduled tasks
- El ingeniero decide
- tags no one documented
- Web12–21 days
PHP 5.x monolith
Go
- La máquina traduce
- controllers, models, cron jobs
- El ingeniero decide
- where the framework ends and the business starts
- Web5–10 days
Perl scripts
Go
- La máquina traduce
- scripts, regex-heavy parsing
- El ingeniero decide
- undocumented file formats
- Datos9–18 days
PL/SQL packages
Go + Postgres
- La máquina traduce
- procedures, cursors, triggers
- El ingeniero decide
- business rules hidden in triggers
- Escritorio7–12 days
Access + Excel
Go + web client
- La máquina traduce
- queries, forms, macros
- El ingeniero decide
- the spreadsheet that is really the spec
- Web12–22 days
One deployable
Services
- La máquina traduce
- module boundaries, call graph
- El ingeniero decide
- where to cut the shared schema
- Datos10–20 days
Fortran
Rust
- La máquina traduce
- numeric kernels, array layout
- El ingeniero decide
- floating-point behaviour that must not change
- Datos9–18 days
ABAP reports
Go
- La máquina traduce
- report logic, selection screens
- El ingeniero decide
- what the SAP tables actually contain
Un grafo de dependencias real
Como está hoy
Reescritura mecánica60%
Frontera cortada por un ingeniero29%
Candidato a borrar11%
El mismo grafo en tabla
| Módulo | Líneas | Importado por | Importa | Dominio | Clase | |
|---|---|---|---|---|---|---|
| M01 | 326 | loc | 0 | 10 | S01 | Reescritura mecánica |
| M02 | 142 | loc | 0 | 3 | S02 | Reescritura mecánica |
| M03 | 55 | loc | 0 | 3 | S02 | Reescritura mecánica |
| M04 | 89 | loc | 0 | 3 | S02 | Reescritura mecánica |
| M05 | 5,194 | loc | 3 | 15 | S03 | Frontera cortada por un ingeniero |
| M06 | 239 | loc | 5 | 1 | S03 | Frontera cortada por un ingeniero |
| M07 | 884 | loc | 20 | 0 | S03 | Frontera cortada por un ingeniero |
| M08 | 485 | loc | 4 | 6 | S03 | Reescritura mecánica |
| M09 | 9,835 | loc | 4 | 7 | S03 | Frontera cortada por un ingeniero |
| M10 | 514 | loc | 2 | 0 | S03 | Reescritura mecánica |
| M11 | 677 | loc | 1 | 5 | S03 | Reescritura mecánica |
| M12 | 236 | loc | 4 | 11 | S03 | Frontera cortada por un ingeniero |
| M13 | 187 | loc | 3 | 3 | S04 | Frontera cortada por un ingeniero |
| M14 | 454 | loc | 1 | 1 | S05 | Reescritura mecánica |
| M15 | 58 | loc | 3 | 1 | S05 | Reescritura mecánica |
| M16 | 356 | loc | 4 | 2 | S05 | Reescritura mecánica |
| M17 | 247 | loc | 4 | 2 | S05 | Reescritura mecánica |
| M18 | 59 | loc | 3 | 1 | S04 | Frontera cortada por un ingeniero |
| M19 | 139 | loc | 0 | 0 | S04 | Candidato a borrar |
| M20 | 330 | loc | 13 | 2 | S04 | Frontera cortada por un ingeniero |
| M21 | 414 | loc | 1 | 1 | S06 | Reescritura mecánica |
| M22 | 1,670 | loc | 3 | 3 | S06 | Reescritura mecánica |
| M23 | 1,218 | loc | 18 | 0 | S06 | Frontera cortada por un ingeniero |
| M24 | 2,574 | loc | 15 | 3 | S06 | Frontera cortada por un ingeniero |
| M25 | 163 | loc | 4 | 1 | S04 | Frontera cortada por un ingeniero |
| M26 | 251 | loc | 2 | 5 | S04 | Reescritura mecánica |
| M27 | 161 | loc | 1 | 2 | S04 | Reescritura mecánica |
| M28 | 99 | loc | 2 | 0 | S04 | Reescritura mecánica |
| M29 | 45 | loc | 0 | 0 | S04 | Candidato a borrar |
| M30 | 25 | loc | 0 | 0 | S04 | Candidato a borrar |
| M31 | 1,417 | loc | 24 | 0 | S04 | Frontera cortada por un ingeniero |
| M32 | 82 | loc | 1 | 0 | S04 | Reescritura mecánica |
| M33 | 30 | loc | 4 | 1 | S04 | Frontera cortada por un ingeniero |
| M34 | 141 | loc | 3 | 1 | S03 | Reescritura mecánica |
| M35 | 79 | loc | 1 | 1 | S03 | Reescritura mecánica |
| M36 | 3,036 | loc | 3 | 10 | S03 | Reescritura mecánica |
| M37 | 173 | loc | 1 | 1 | S03 | Reescritura mecánica |
| M38 | 2,501 | loc | 1 | 9 | S03 | Reescritura mecánica |
| M39 | 1,452 | loc | 3 | 4 | S03 | Reescritura mecánica |
| M40 | 50 | loc | 1 | 1 | S03 | Reescritura mecánica |
| M41 | 2,148 | loc | 0 | 9 | S01 | Candidato a borrar |
| M42 | 167 | loc | 0 | 1 | S01 | Candidato a borrar |
| M43 | 4,873 | loc | 2 | 15 | S07 | Reescritura mecánica |
| M44 | 2,241 | loc | 1 | 10 | S07 | Reescritura mecánica |
| M45 | 474 | loc | 2 | 13 | S07 | Reescritura mecánica |
bajo el capó
Un millón de líneas es el tamaño normal
Todos los lenguajes del árbol, a la vez
Un sistema nunca está en un solo lenguaje. COBOL llama a JCL, JCL lanza una utilidad en C, un script Perl arregla el fichero antes de que PL/SQL lo cargue. La plataforma lo lee todo en paralelo y sostiene un único grafo sobre el conjunto: nada se cae en las costuras entre lenguajes.
Menos máquinas para la misma carga
Un servicio Java o Python reescrito en Go suele necesitar una fracción de la memoria y una fracción de las instancias, y un núcleo en Rust convierte una ventana de batch en una pausa para el café. Esa es toda la razón para mover código que no está roto: el mismo comportamiento con una factura menor, y margen que ya no hay que comprar.
Un millón de líneas y más
Ese es el tamaño con el que planificamos, no el techo. Por encima partimos la estimación y ponemos precio a la primera parte por separado. Aquí la escala es cuestión de planificación, no de viabilidad.
Mismo comportamiento, arquitectura nueva
Un banco de comparación reproduce su tráfico de producción grabado contra el viejo y el nuevo y compara al céntimo. Lo que cambia es la forma: servicios con responsables, un esquema legible, pruebas nacidas junto al código y un despliegue que no necesita ventana de mantenimiento.
Air gap, en su hardware o en el nuestro
Para entornos regulados los modelos los ponemos nosotros y corren dentro de su perímetro sin ninguna conexión saliente. Si no tiene máquinas capaces de sostenerlos, le alquilamos las nuestras y se quedan en su sala. Nada de su código tiene que salir del edificio.
Su nube, su centro de datos, una VPN de cliente o una sala sin red alguna: cada una de estas opciones tiene un montaje que funciona, y el detalle va al contrato.
De qué nos hacemos cargo
- Desarrollo con IAEl agente, la capa de herramientas tipada a su alrededor y el banco de evaluación que lo mantiene honesto en CI.
- Software a medidaUn sistema de verdad donde hoy trabajan una hoja de cálculo, una base Access y tres personas pacientes.
- ModernizaciónPHP 5, VB6, Delphi y ColdFusion reescritos en Go y TypeScript mientras el sistema viejo sigue funcionando.
- Mainframe y AS/400COBOL, JCL, CICS y VSAM fuera de z/OS, con el batch y las pantallas verdes reconstruidos como servicios.
- Agentes de IAAgentes que ejecutan un proceso de negocio, con una persona con nombre que aprueba todo lo irreversible.
- Auditoría del sistemaUn mapa del código, un registro de riesgos ordenado y un plan de migración por fases con su coste al lado.
- Consultoría de IADos o tres casos que merecen la pena, una medición de partida y una decisión de construir o comprar en cada uno.
- División del monolitoUn único desplegable sobre un esquema compartido, partido en servicios que se publican a su propio ritmo.
Cómo va el trabajo
- 01
Acceso de lectura
Una copia de solo lectura del repositorio, los scripts de compilación y los runbooks que hayan sobrevivido. Firmamos su NDA antes si así funciona su empresa.
- 02
El mapa
La plataforma lo analiza todo y cuenta lo que hay de verdad: los módulos y sus dependencias, el código que ya no llama nadie, las tareas programadas que nadie documentó, y el sitio donde la compilación solo funciona en una máquina. Esto llega antes de reescribir nada.
- 03
Reescritura por partes
Un módulo acotado cada vez, con pruebas escritas contra el comportamiento del original. El viejo y el nuevo corren sobre las mismas entradas hasta que las salidas coinciden, y entonces se mueve el tráfico. Nada cambia de manos en una única fecha.
- 04
Entrega
Sus ingenieros reciben el repositorio, las pruebas escritas por el camino y el mapa al día. Después respondemos preguntas, y no nos quedamos con ninguna llave que usted no pueda revocar.
Pida primero el mapa
El mapa es lo más barato que vendemos y la única base sólida para poner precio al resto. Cuéntenos qué tiene funcionando y volvemos con lo que hay dentro, lo que tarda una reescritura y lo que cuesta.
El formulario llega a nosotros, no a una secuencia comercial. No hace falta aguantar una demo para obtener una respuesta.