dezenas de migrações
Java, Python, COBOL e VB6 reescritos em Go, Rust e TypeScript em 30 dias
Não só o mainframe. Um monólito Java espalhado por oito servidores, Python que esbarrou no GIL, um serviço Node que come memória mais rápido do que atende requisições — tudo isso vira Go e Rust, e a conta de infraestrutura cai junto. Também COBOL no z/OS, RPG no AS/400, VB6 e Delphi no desktop, ColdFusion e PHP na web, Perl, PL/SQL, Fortran e ABAP. Nossa plataforma lê a base de código inteira e reescreve, nossos engenheiros ficam com as partes em que errar sai caro, e o sistema antigo continua rodando esse tempo todo.
Quatro telas, uns dez minutos. Um engenheiro lê e volta com escopo, data e preço — sem demo e sem régua de e-mails.
- 30
- dias, o teto de qualquer projeto
- 20
- stacks legadas que migramos
- 10+
- anos dentro de sistemas dos outros
- 1M+
- linhas em uma única reescrita
Todo sistema que tiramos do respirador
- Java, Python, Node12–20 days
Java / Spring Boot
Go
- A máquina traduz
- services, JPA entities, REST controllers
- O engenheiro decide
- what the framework was doing for you
- Java, Python, Node10–18 days
Python / Django
Go
- A máquina traduz
- views, models, Celery tasks
- O engenheiro decide
- the parts that were fast because of C extensions
- Java, Python, Node8–15 days
Node.js services
Go
- A máquina traduz
- routes, middleware, ORM models
- O engenheiro decide
- where dynamic typing hid a contract
- Java, Python, Node12–21 days
Ruby on Rails
Go
- A máquina traduz
- controllers, ActiveRecord, background jobs
- O engenheiro decide
- metaprogramming nobody can grep for
- Java, Python, Node12–20 days
C# / .NET Framework
Go
- A máquina traduz
- services, EF models, WCF endpoints
- O engenheiro decide
- Windows-only assumptions
- Java, Python, Node7–14 days
Python number crunching
Rust
- A máquina traduz
- hot loops, array code, serialization
- O engenheiro decide
- which precision the result actually needs
- Mainframe21–30 days
COBOL on z/OS
Go
- A máquina traduz
- programs, copybooks, packed decimal
- O engenheiro decide
- CICS screens, job ordering
- Mainframe7–14 days
JCL batch
Go + scheduler
- A máquina traduz
- job steps, dataset flow
- O engenheiro decide
- the dependency graph between streams
- Dados7–12 days
VSAM + DB2
Postgres
- A máquina traduz
- record layouts, indexes
- O engenheiro decide
- what the copybook meant by a filler field
- AS/40018–28 days
RPG on AS/400
Go
- A máquina traduz
- RPGLE, DDS, service programs
- O engenheiro decide
- green screens, OPM leftovers
- Desktop10–18 days
VB6 desktop
TypeScript
- A máquina traduz
- forms, business rules, COM calls
- O engenheiro decide
- what the ActiveX control did
- Desktop14–24 days
Delphi 7
Go + TypeScript
- A máquina traduz
- units, VCL forms, DB access
- O engenheiro decide
- third-party components with no source
- Web8–16 days
ColdFusion
TypeScript
- A máquina traduz
- CFML templates, queries, scheduled tasks
- O engenheiro decide
- tags no one documented
- Web12–21 days
PHP 5.x monolith
Go
- A máquina traduz
- controllers, models, cron jobs
- O engenheiro decide
- where the framework ends and the business starts
- Web5–10 days
Perl scripts
Go
- A máquina traduz
- scripts, regex-heavy parsing
- O engenheiro decide
- undocumented file formats
- Dados9–18 days
PL/SQL packages
Go + Postgres
- A máquina traduz
- procedures, cursors, triggers
- O engenheiro decide
- business rules hidden in triggers
- Desktop7–12 days
Access + Excel
Go + web client
- A máquina traduz
- queries, forms, macros
- O engenheiro decide
- the spreadsheet that is really the spec
- Web12–22 days
One deployable
Services
- A máquina traduz
- module boundaries, call graph
- O engenheiro decide
- where to cut the shared schema
- Dados10–20 days
Fortran
Rust
- A máquina traduz
- numeric kernels, array layout
- O engenheiro decide
- floating-point behaviour that must not change
- Dados9–18 days
ABAP reports
Go
- A máquina traduz
- report logic, selection screens
- O engenheiro decide
- what the SAP tables actually contain
Um grafo de dependências de verdade
Como está hoje
Reescrita mecânica60%
Fronteira cortada por engenheiro29%
Candidato a exclusão11%
O mesmo grafo em tabela
| Módulo | Linhas | Importado por | Importa | Domínio | Classe | |
|---|---|---|---|---|---|---|
| M01 | 326 | loc | 0 | 10 | S01 | Reescrita mecânica |
| M02 | 142 | loc | 0 | 3 | S02 | Reescrita mecânica |
| M03 | 55 | loc | 0 | 3 | S02 | Reescrita mecânica |
| M04 | 89 | loc | 0 | 3 | S02 | Reescrita mecânica |
| M05 | 5,194 | loc | 3 | 15 | S03 | Fronteira cortada por engenheiro |
| M06 | 239 | loc | 5 | 1 | S03 | Fronteira cortada por engenheiro |
| M07 | 884 | loc | 20 | 0 | S03 | Fronteira cortada por engenheiro |
| M08 | 485 | loc | 4 | 6 | S03 | Reescrita mecânica |
| M09 | 9,835 | loc | 4 | 7 | S03 | Fronteira cortada por engenheiro |
| M10 | 514 | loc | 2 | 0 | S03 | Reescrita mecânica |
| M11 | 677 | loc | 1 | 5 | S03 | Reescrita mecânica |
| M12 | 236 | loc | 4 | 11 | S03 | Fronteira cortada por engenheiro |
| M13 | 187 | loc | 3 | 3 | S04 | Fronteira cortada por engenheiro |
| M14 | 454 | loc | 1 | 1 | S05 | Reescrita mecânica |
| M15 | 58 | loc | 3 | 1 | S05 | Reescrita mecânica |
| M16 | 356 | loc | 4 | 2 | S05 | Reescrita mecânica |
| M17 | 247 | loc | 4 | 2 | S05 | Reescrita mecânica |
| M18 | 59 | loc | 3 | 1 | S04 | Fronteira cortada por engenheiro |
| M19 | 139 | loc | 0 | 0 | S04 | Candidato a exclusão |
| M20 | 330 | loc | 13 | 2 | S04 | Fronteira cortada por engenheiro |
| M21 | 414 | loc | 1 | 1 | S06 | Reescrita mecânica |
| M22 | 1,670 | loc | 3 | 3 | S06 | Reescrita mecânica |
| M23 | 1,218 | loc | 18 | 0 | S06 | Fronteira cortada por engenheiro |
| M24 | 2,574 | loc | 15 | 3 | S06 | Fronteira cortada por engenheiro |
| M25 | 163 | loc | 4 | 1 | S04 | Fronteira cortada por engenheiro |
| M26 | 251 | loc | 2 | 5 | S04 | Reescrita mecânica |
| M27 | 161 | loc | 1 | 2 | S04 | Reescrita mecânica |
| M28 | 99 | loc | 2 | 0 | S04 | Reescrita mecânica |
| M29 | 45 | loc | 0 | 0 | S04 | Candidato a exclusão |
| M30 | 25 | loc | 0 | 0 | S04 | Candidato a exclusão |
| M31 | 1,417 | loc | 24 | 0 | S04 | Fronteira cortada por engenheiro |
| M32 | 82 | loc | 1 | 0 | S04 | Reescrita mecânica |
| M33 | 30 | loc | 4 | 1 | S04 | Fronteira cortada por engenheiro |
| M34 | 141 | loc | 3 | 1 | S03 | Reescrita mecânica |
| M35 | 79 | loc | 1 | 1 | S03 | Reescrita mecânica |
| M36 | 3,036 | loc | 3 | 10 | S03 | Reescrita mecânica |
| M37 | 173 | loc | 1 | 1 | S03 | Reescrita mecânica |
| M38 | 2,501 | loc | 1 | 9 | S03 | Reescrita mecânica |
| M39 | 1,452 | loc | 3 | 4 | S03 | Reescrita mecânica |
| M40 | 50 | loc | 1 | 1 | S03 | Reescrita mecânica |
| M41 | 2,148 | loc | 0 | 9 | S01 | Candidato a exclusão |
| M42 | 167 | loc | 0 | 1 | S01 | Candidato a exclusão |
| M43 | 4,873 | loc | 2 | 15 | S07 | Reescrita mecânica |
| M44 | 2,241 | loc | 1 | 10 | S07 | Reescrita mecânica |
| M45 | 474 | loc | 2 | 13 | S07 | Reescrita mecânica |
por dentro
Um milhão de linhas é o tamanho normal
Todas as linguagens da árvore, ao mesmo tempo
Sistema nenhum é de uma linguagem só. COBOL chama JCL, JCL dispara um utilitário em C, um script Perl conserta o arquivo antes de o PL/SQL carregar. A plataforma lê tudo em paralelo e mantém um único grafo sobre o conjunto: nada cai nas emendas entre linguagens.
Menos máquinas para a mesma carga
Um serviço Java ou Python reescrito em Go costuma precisar de uma fração da memória e uma fração das instâncias, e um núcleo em Rust transforma uma janela de batch em uma pausa para o café. É essa a razão inteira para mexer em código que não está quebrado: o mesmo comportamento com uma conta menor, e folga que você não precisa mais comprar.
Um milhão de linhas e acima
Esse é o tamanho com que planejamos, não o teto. Acima disso dividimos a estimativa e precificamos a primeira parte sozinha. Aqui escala é questão de agenda, não de viabilidade.
Mesmo comportamento, arquitetura nova
Uma bancada de comparação reproduz o seu tráfego de produção gravado contra o antigo e o novo e compara até o centavo. O que muda é a forma: serviços com donos, um esquema legível, testes que nasceram junto com o código e um deploy que dispensa janela de manutenção.
Air gap, no seu hardware ou no nosso
Para ambiente regulado os modelos são nossos e rodam dentro do seu perímetro, sem nenhuma conexão de saída. Se você não tem máquinas que aguentem, alugamos as nossas e elas ficam na sua sala. Nada do seu código precisa sair do prédio.
Sua nuvem, seu data center, uma VPN do cliente ou uma sala sem rede nenhuma — cada uma dessas opções tem uma montagem que roda, e o detalhe vai para o contrato.
O que a gente pega
- Desenvolvimento de IAO agente, a camada tipada de ferramentas em volta dele e o conjunto de avaliações que o mantém honesto no CI.
- Software sob medidaUm sistema de verdade onde hoje trabalham uma planilha, um banco Access e três pessoas pacientes.
- ModernizaçãoPHP 5, VB6, Delphi e ColdFusion reescritos em Go e TypeScript enquanto o sistema antigo segue rodando.
- Mainframe e AS/400COBOL, JCL, CICS e VSAM saindo do z/OS, com o batch e as telas verdes remontados como serviços.
- Agentes de IAAgentes que tocam um processo de negócio, com uma pessoa nomeada aprovando tudo que é irreversível.
- Diagnóstico do sistemaUm mapa da base de código, um registro de riscos ordenado e um plano de migração em fases com preço em cada uma.
- Consultoria de IADois ou três casos que valem a construção, uma linha de base medida e a decisão de construir ou comprar em cada um.
- Divisão do monólitoUm deployment único sobre um schema compartilhado, cortado em serviços que sobem no próprio ritmo.
Como o trabalho anda
- 01
Acesso de leitura
Uma cópia somente leitura do repositório, os scripts de build e os runbooks que sobreviveram. Assinamos seu NDA antes, se é assim que sua empresa funciona.
- 02
O mapa
A plataforma lê tudo isso e relata o que existe de fato: módulos e suas dependências, código que ninguém chama mais, jobs agendados que ninguém documentou e o ponto onde o build só funciona em uma máquina. Isso chega antes de qualquer reescrita.
- 03
Reescrita em fatias
Um módulo delimitado por vez, com testes escritos contra o comportamento do original. O antigo e o novo rodam sobre as mesmas entradas até as saídas baterem, e só então o tráfego muda. Nada é virado em uma data única.
- 04
Entrega
Seus engenheiros recebem o repositório, os testes escritos no caminho e o mapa mantido atualizado. Depois disso respondemos dúvidas, e não ficamos com nenhuma chave que você não possa revogar.
Peça o mapa primeiro
O mapa é a coisa mais barata que vendemos e a única base sólida para precificar o resto. Conte o que você roda e voltamos com o que existe lá dentro, quanto tempo uma reescrita leva e quanto custa.
O formulário chega até nós, não para uma régua de e-mails. Você não precisa assistir a uma demo para ter uma resposta.