Ir al contenido

Plataforma

Un millón de líneas legacy, funcionando en Go o Rust en 30 días.

Modelos afinados leen el repositorio entero de una pasada y lo reescriben parte por parte. Cada parte se contrasta con su tráfico de producción y la aprueba un ingeniero que lleva más de 25 años escribiendo código de producción.

codehero · pipeline

  1. Ingesta

    Todo lo que hay en el árbol

  2. Mapa

    Un solo grafo de dependencias

  3. Reescritura

    Parte por parte

  4. Verificación

    Paridad con tráfico real

  5. Entrega

    Corte sin ventana de mantenimiento

Pipeline

Cinco etapas automatizadas, cada una aprobada por un ingeniero senior.

El mismo pipeline procesa un monolito PHP y un millón de líneas de COBOL. El modelo que lee el código cambia con el dialecto; el ingeniero que lo aprueba siempre tiene más de 25 años de código en producción a sus espaldas.
  1. 01

    Ingesta

    Todo lo que hay en el árbol

    Código fuente, scripts de compilación, planificación de jobs, esquemas y procedimientos almacenados entran juntos. Cada lenguaje del árbol se analiza en paralelo.

  2. 02

    Mapa

    Un solo grafo de dependencias

    Módulos, llamadas, flujos de datos y código muerto caen en un solo grafo. Las fronteras entre servicios salen directamente de su estructura.

  3. 03

    Reescritura

    Parte por parte

    Los modelos afinados reescriben una parte acotada cada vez en Go, Rust, TypeScript o SQL idiomáticos, con las pruebas escritas primero.

  4. 04

    Verificación

    Paridad con tráfico real

    Las entradas de producción grabadas se reproducen contra el sistema viejo y el nuevo. Corregimos cada diferencia, o usted la aprueba por escrito.

  5. 05

    Entrega

    Corte sin ventana de mantenimiento

    El tráfico pasa parte por parte. El sistema viejo sigue en caliente, en reserva, hasta que el nuevo soporta toda la carga.

Modelos afinados

Entrenados con el código que todos olvidaron.

Los modelos de frontera escriben buen código para el GitHub de hoy. Los sistemas legacy están escritos en dialectos que allí casi no existen. Afinamos nuestros modelos con pares de código legacy y moderno, así que saben qué significa un copybook, cómo un paso JCL le pasa un dataset al siguiente y qué hacía en realidad una action de Struts. Envíenos su sistema y en 48 horas sabrá exactamente lo que hace falta.

Dialectos con los que se entrenaron los modelos

  • COBOL
  • JCL
  • CICS
  • RPG IV
  • PL/I
  • Natural
  • Fortran
  • VB6
  • Delphi
  • PowerBuilder
  • ColdFusion
  • PHP 4–5
  • Perl
  • Classic ASP
  • Java EE
  • Struts
  • PL/SQL
  • T-SQL
  • DB2 SQL
  • Oracle Forms
  • ABAP
  • AngularJS
  • Un especialista por familia

    Afinados por separado para mainframe, midrange, escritorio, web y datos. Cada uno conoce los modismos de su familia y dónde están las trampas.

  • Código que su equipo querrá conservar

    Go, Rust o TypeScript idiomáticos, con los nombres, las pruebas y la estructura que escribiría un ingeniero senior. Su equipo lo lee desde el primer día.

  • Su código sigue siendo suyo

    Su repositorio nunca entrena nuestros modelos sin su consentimiento por escrito. On-premise, los pesos tampoco salen de su edificio.

Grafo real de producción

Así ve la plataforma un sistema.

Es un servicio en Go que funciona en producción. Sustituimos los nombres de paquete por M01 a M45 y dejamos la estructura exactamente como está. Arrastre el control para pasar de cómo está el código hoy a cómo se separa por fronteras de dominio. La clase de cada nodo sale del propio grafo: un módulo que vive dentro de un solo dominio se reescribe de forma mecánica, y uno del que tiran cuatro dominios pasa a un ingeniero que corta la frontera a mano. Su sistema recibe este mapa en sus primeros 3 días.

Como está hoy

Reescritura mecánica60%

Frontera cortada por un ingeniero29%

Candidato a borrar11%

45 módulos, 167 dependencias y 45,990 líneas repartidas en 7 dominios. Grafo real de un servicio en producción, sin los nombres de paquete y sin ninguna otra edición. Las tres clases se cuentan a partir de la estructura del propio grafo.
El mismo grafo en tabla
Ordenado por tamaño. Un módulo es mecánico cuando cabe dentro de un solo dominio, pasa a un ingeniero cuando dependen de él tres dominios o más o está metido en un ciclo, y se vuelve candidato a borrar cuando nada lo importa y no es un punto de entrada.
MóduloLíneasImportado porImportaDominioClase
M01326loc010S01Reescritura mecánica
M02142loc03S02Reescritura mecánica
M0355loc03S02Reescritura mecánica
M0489loc03S02Reescritura mecánica
M055,194loc315S03Frontera cortada por un ingeniero
M06239loc51S03Frontera cortada por un ingeniero
M07884loc200S03Frontera cortada por un ingeniero
M08485loc46S03Reescritura mecánica
M099,835loc47S03Frontera cortada por un ingeniero
M10514loc20S03Reescritura mecánica
M11677loc15S03Reescritura mecánica
M12236loc411S03Frontera cortada por un ingeniero
M13187loc33S04Frontera cortada por un ingeniero
M14454loc11S05Reescritura mecánica
M1558loc31S05Reescritura mecánica
M16356loc42S05Reescritura mecánica
M17247loc42S05Reescritura mecánica
M1859loc31S04Frontera cortada por un ingeniero
M19139loc00S04Candidato a borrar
M20330loc132S04Frontera cortada por un ingeniero
M21414loc11S06Reescritura mecánica
M221,670loc33S06Reescritura mecánica
M231,218loc180S06Frontera cortada por un ingeniero
M242,574loc153S06Frontera cortada por un ingeniero
M25163loc41S04Frontera cortada por un ingeniero
M26251loc25S04Reescritura mecánica
M27161loc12S04Reescritura mecánica
M2899loc20S04Reescritura mecánica
M2945loc00S04Candidato a borrar
M3025loc00S04Candidato a borrar
M311,417loc240S04Frontera cortada por un ingeniero
M3282loc10S04Reescritura mecánica
M3330loc41S04Frontera cortada por un ingeniero
M34141loc31S03Reescritura mecánica
M3579loc11S03Reescritura mecánica
M363,036loc310S03Reescritura mecánica
M37173loc11S03Reescritura mecánica
M382,501loc19S03Reescritura mecánica
M391,452loc34S03Reescritura mecánica
M4050loc11S03Reescritura mecánica
M412,148loc09S01Candidato a borrar
M42167loc01S01Candidato a borrar
M434,873loc215S07Reescritura mecánica
M442,241loc110S07Reescritura mecánica
M45474loc213S07Reescritura mecánica

Banco de paridad

Mismas entradas, mismas salidas, al céntimo.

Cada parte recibe las mismas entradas grabadas en el sistema viejo y en el nuevo. Comparamos las salidas campo por campo, al céntimo, y una parte sale a producción solo cuando el diff está vacío. Por eso la fecha va en el contrato.

  • Su tráfico de producción grabado es la batería de pruebas
  • Comparación campo por campo, incluidos redondeos y casos límite de fechas
  • Cada diferencia aceptada, firmada por usted y por escrito
Sistema legacySistema nuevoDiff
  • ACCT 0048213 41.36ACCT 0048213 41.36
  • ACCT 0048214 0.00ACCT 0048214 0.00
  • ACCT 0051120 1,208.04ACCT 0051120 1,208.04
  • ACCT 0051121 17.90ACCT 0051121 17.90
  • ACCT 0060007 342.11ACCT 0060007 342.11
  • ACCT 0060008 5.02ACCT 0060008 5.02
Diff0 diferencias

Las alternativas

Tres formas de modernizar. Solo una cabe en 30 días.

Reescritura manualHerramientas de IA genéricasCodeHero
Plazo hasta producciónDe meses a añosIncierto, se atasca a escala30 días por fase
PrecioPor horas y materialesEl tiempo de sus ingenierosCerrado por fase, presupuestado en 48 horas
Prueba de comportamientoQA manualNingunaParidad con su propio tráfico
Contexto del repositorio completoEn la cabeza de las personasUnos pocos archivos cada vezUn grafo, todos los lenguajes
Funciona air-gappedSíRara vezSí, en nuestro hardware o en el suyo
Quién respondeUn equipo grandeUstedUn ingeniero senior con más de 25 años