Estrategias de Modernizacion

Refactoring de RPG legacy, modernizacion de UI, enfoque API-first y estrategias incrementales para llevar IBM i al siglo XXI sin romper lo que funciona.

Por que modernizar

La modernizacion de IBM i no es un tema de reemplazo tecnologico sino de sostenibilidad del negocio. Las aplicaciones RPG/COBOL que corren en IBM i son a menudo el core del negocio: facturacion, inventario, contabilidad. Funcionan bien, pero enfrentan desafios crecientes.

Escasez de talento

Cada vez menos desarrolladores conocen RPG III/400. Los nuevos programadores esperan herramientas y lenguajes modernos.

Expectativas de UX

Los usuarios internos esperan interfaces web/mobile. Las pantallas 5250 son funcionales pero generan friccion.

Integracion con ecosistema

Las aplicaciones modernas necesitan APIs, webhooks, SSO. El codigo legacy no fue disenado para esto.

Deuda tecnica acumulada

Decadas de cambios sin refactoring crean programas de miles de lineas con logica entrelazada y sin documentacion.

Punto clave: Modernizar no significa reescribir desde cero. Las aplicaciones IBM i contienen decadas de reglas de negocio validadas. El objetivo es hacerlas accesibles, mantenibles y extensibles preservando su logica core.

Las 5R de la modernizacion

Existen cinco estrategias principales, cada una con diferente nivel de riesgo, costo e impacto. No son mutuamente excluyentes; un proyecto puede combinar varias.

RehostMover sin cambiar

Migrar IBM i a PowerVS (cloud) sin modificar el codigo. Mismo software, diferente infraestructura. Riesgo minimo, beneficios operacionales (DR, escalabilidad).

Esfuerzo: BajoRiesgo: Muy bajoBeneficio: Operacional
RefactorMejorar el codigo existente

Convertir RPG III a RPG IV free-format, modularizar monolitos, agregar SQL embebido, adoptar ILE. El programa sigue en IBM i pero es mas mantenible.

Esfuerzo: MedioRiesgo: BajoBeneficio: Mantenibilidad
RearchitectRedisenar la arquitectura

Extraer logica de negocio como APIs/servicios, separar UI del backend, implementar capas. Cambios significativos en estructura, misma plataforma.

Esfuerzo: AltoRiesgo: MedioBeneficio: Extensibilidad
RebuildReescribir selectivamente

Reescribir componentes especificos en lenguajes modernos (Node.js, Java) manteniendo el core en RPG. Solo cuando el refactor no es viable.

Esfuerzo: Muy altoRiesgo: AltoBeneficio: Tecnologico
ReplaceSustituir con paquete

Reemplazar aplicaciones custom por SaaS/ERP comercial. Solo viable cuando la funcionalidad no es diferenciadora del negocio.

Esfuerzo: VariableRiesgo: Muy altoBeneficio: Estrategico

Modernizacion de la interfaz

La modernizacion de UI es generalmente el primer paso visible. Hay multiples enfoques para reemplazar o complementar las pantallas 5250 con interfaces web modernas.

5250 tradicional

  • Pantallas verdes 24x80 caracteres
  • Navegacion por menus y F-keys
  • Sin graficos, colores limitados
  • Un flujo de trabajo = muchas pantallas
  • Requiere entrenamiento especifico
  • Extremadamente eficiente en ancho de banda

Web UI moderna

  • Interfaz grafica responsiva
  • Navegacion intuitiva, drag & drop
  • Dashboards, graficos, mapas
  • Un flujo = una pantalla bien disenada
  • Familiar para usuarios nuevos
  • Accesible desde cualquier dispositivo

Opciones de modernizacion de UI

EnfoqueEsfuerzoResultadoCuando usar
Screen scrapingBajoWeb wrapper sobre 5250Quick win, apps que no cambian
Looksoftware/FrescheMedioWeb auto-generada desde DDSMuchas pantallas, poco tiempo
API + SPA (React, Angular)AltoUI completamente nuevaUX es prioridad, equipo web disponible
Low-code (Profound UI)MedioWeb generada con drag & dropEquipo RPG quiere crear web
Mobile app + RESTAltoApp nativa iOS/AndroidWorkforce mobile, campo
Power Automate / RPABajoAutomatizacion sobre 5250Eliminar tareas repetitivas
Recomendacion: El enfoque mas sostenible es API-first + SPA. Exponer la logica como REST APIs y construir la UI con React/Angular desacopla completamente el frontend del backend. Pero requiere mas inversion inicial.

Refactoring de RPG

El refactoring de RPG es la base de toda modernizacion en IBM i. Consiste en transformar codigo RPG III (columnar, con indicadores, GOTOs) a RPG IV free-format modular. Esto no cambia la funcionalidad pero mejora drasticamente la mantenibilidad.

De RPG III a RPG IV free-format

RPG III — Codigo legacy (columnar)
     C           CUSTNO    CHAIN     CUSTMAST              99
     C  N99                MOVEL     CUSNAM    WKNAME
     C  N99                MOVEL     CUSADR    WKADDR
     C  N99                Z-ADD     CUSBAL    WKBAL
     C   99                MOVEL     *BLANKS   WKNAME
     C   99                MOVEL     'NOT FOUND'WKERR
     C                     EXFMT     SCREEN01
     C           *INKC     IFEQ      *ON
     C                     MOVE      *ON       *INLR
     C                     ENDIF
RPG IV free-format — Mismo codigo modernizado
**free
ctl-opt main(Main);
ctl-opt option(*srcstmt:*nodebugio);

dcl-proc Main;
  dcl-pi *n end-pi;

  dcl-s custNo packed(7:0);
  dcl-ds custData likeds(customerDs);

  custData = getCustomer(custNo);

  if custData.found;
    displayCustomer(custData);
  else;
    displayError('Cliente no encontrado');
  endif;

  return;
end-proc;

dcl-proc getCustomer;
  dcl-pi *n likeds(customerDs);
    id packed(7:0) const;
  end-pi;

  dcl-ds result likeds(customerDs) inz;

  exec sql
    SELECT CUSNAM, CUSADR, CUSBAL
    INTO :result.name, :result.address, :result.balance
    FROM CUSTMAST
    WHERE CUSID = :id;

  result.found = (sqlcode = 0);
  return result;
end-proc;

Checklist de refactoring

Eliminar indicadores (*INxx)

Reemplazar por variables booleanas con nombres descriptivos

Convertir a free-format

Mover de columnas fijas a formato libre /free ... /end-free o **free

Reemplazar GOTO por IF/SELECT

Eliminar TAG/GOTO por estructuras de control

Extraer subprocedimientos

Modularizar logica en procedimientos con dcl-proc

Adoptar SQL embebido

Reemplazar READ/WRITE/CHAIN por exec sql

Usar data structures

Agrupar campos relacionados en dcl-ds

Agregar ctl-opt

Control specs para opciones de compilacion

Implementar ILE

Crear service programs con procedimientos exportados

Enfoque API-first

El enfoque API-first consiste en exponer toda la logica de negocio como servicios REST antes de construir cualquier nueva interfaz. Esto crea una capa de abstraccion que desacopla el backend RPG de cualquier consumidor.

Flujo API-first en IBM i

1Disenar contrato OpenAPI (swagger) primero
2Refactorizar RPG: extraer logica a service programs con procedimientos exportados
3Registrar procedimientos en IWS como endpoints REST
4Configurar autenticacion (basic auth, JWT, API key)
5Documentar con Swagger UI automatico
6Construir UI web consumiendo las APIs
7Abrir APIs a partners/mobile/integraciones
OpenAPI — Contrato de API para IBM i
openapi: 3.0.0
info:
  title: Customer Management API
  version: 1.0.0
  description: APIs backed by IBM i RPG programs
paths:
  /api/customers/{id}:
    get:
      summary: Get customer by ID
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Customer found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
        '404':
          description: Customer not found
  /api/customers:
    post:
      summary: Create new customer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerInput'

De monolito a servicios

Las aplicaciones IBM i tipicas son monolitos: un programa gigante que maneja todo. La descomposicion en servicios permite que diferentes equipos trabajen en paralelo, que los componentes se escalen independientemente y que se adopten tecnologias modernas de forma gradual.

Identificar dominios

Usar Domain-Driven Design para encontrar bounded contexts: Clientes, Ordenes, Inventario, Facturacion. Cada dominio se convierte en un servicio.

Extraer service programs

Refactorizar el monolito RPG en service programs ILE separados por dominio. Cada uno con procedimientos exportados bien definidos.

Exponer como APIs

Cada service program se registra en IWS como un servicio REST independiente. Los servicios se comunican via APIs, no via acceso directo a datos.

Precaucion: No caer en "microservices mania". En IBM i, el overhead de comunicacion entre servicios REST es significativamente mayor que una CALL directa. Crear servicios demasiado granulares genera latencia innecesaria. Buscar un balance: servicios de dominio, no un servicio por tabla.

Herramientas de analisis

Antes de modernizar, es imprescindible entender que hay. Las herramientas de analisis escanean el codigo fuente y las dependencias para crear un mapa del sistema existente.

HerramientaFuncionBeneficio clave
X-AnalysisAnalisis de codigo y dependenciasMapa completo de programas, archivos y relaciones
Arcad ObserverAnalisis de impactoMuestra que afecta un cambio antes de hacerlo
RPGCVT (IBM)Conversion RPG III a IVAutomatiza la conversion basica de formato
RDi (Eclipse)IDE con refactoring toolsRename, extract procedure, busqueda de refs
iSpherePlugin Eclipse open sourceBusqueda de strings, comparacion de fuentes
Code for IBM iExtension VS CodeAnalisis de codigo RPG/CL con UI moderna
DSPPGMREFComando CL nativoMuestra archivos que usa un programa
DSPDBRComando CL nativoMuestra programas que usan un archivo
CL — Analisis de dependencias nativo
-- Ver que archivos usa un programa
DSPPGMREF PGM(MYLIB/ORDENTRY)
          OUTPUT(*PRINT)

-- Ver que programas usan un archivo
DSPDBR FILE(MYLIB/CUSTMAST)
       OUTPUT(*PRINT)

-- Ver fuentes de un miembro
DSPPFM FILE(MYLIB/QRPGLESRC) MBR(ORDENTRY)

-- Buscar string en todos los fuentes
FNDSTRPDM STRING('CUSTMAST')
          FILE(MYLIB/QRPGLESRC)
          MBR(*ALL)
          OPTION(*NONE)

Gestion de riesgos

Riesgos comunes

  • Subestimar la complejidad de la logica de negocio
  • Perder reglas de negocio implicitas en el codigo
  • Big bang: migrar todo de una vez
  • Falta de tests antes de refactorizar
  • No involucrar a los usuarios de negocio
  • Equipo sin experiencia en IBM i
  • Plazos irrealistas impuestos por management

Mitigaciones

  • Analisis exhaustivo con X-Analysis antes de comenzar
  • Documentar reglas de negocio antes del refactor
  • Enfoque incremental: migrar modulo por modulo
  • Crear suite de tests automatizados (RPGUnit)
  • Workshops con usuarios para validar cada fase
  • Mentoring cruzado: equipo IBM i + equipo moderno
  • Roadmap realista con milestones medibles
Error fatal mas comun: Intentar reescribir desde cero un sistema que tiene 20+ anos de reglas de negocio acumuladas. Multiples proyectos han fracasado por subestimar la cantidad de logica invisible embebida en el codigo legacy. El refactoring incremental es casi siempre mas seguro.

Casos de estudio tipicos

Distribuidor mayorista — UI modernization

Escenario: 500 usuarios de 5250, sistema de pedidos de 25 anos. Nuevos clientes querian portal web.
Enfoque: Refactor RPG a service programs + IWS REST APIs + React frontend. 5250 sigue activo para warehouse.
Resultado: Portal web en 8 meses. 40% de pedidos ahora son self-service. Personal de warehouse sigue con 5250.
Duracion: 12 meses total

Empresa de seguros — API-first

Escenario: Sistema de polizas monolitico de 3000 programas RPG. Necesitaban integrarse con brokers externos.
Enfoque: Analisis con X-Analysis. Extraccion de 50 procedimientos core como APIs REST. Sin tocar el UI.
Resultado: APIs publicadas en API Gateway. 15 brokers conectados. Tiempo de integracion de meses a dias.
Duracion: 18 meses

Manufacturera — Refactoring puro

Escenario: Codigo RPG III con 30 anos de antiguedad. Solo 2 programadores lo entendian, ambos cerca de jubilarse.
Enfoque: Conversion a RPG IV free-format + documentacion + RPGUnit tests. Transferencia de conocimiento.
Resultado: Codigo legible por nuevos programadores. Suite de 200 tests automatizados. Knowledge transfer completo.
Duracion: 24 meses

Roadmap de modernizacion

Un roadmap realista para modernizacion de IBM i tipicamente abarca 18-36 meses. Este es un template generico que se adapta segun la organizacion:

Fase 0 (Mes 1-2)Discovery
Inventario de programas y archivos Analisis de dependencias con X-Analysis Identificacion de dominios de negocio Assessment de skills del equipo
Fase 1 (Mes 3-6)Quick wins
Conversion RPG III a IV de modulos criticos Setup de Git + CI/CD para fuentes RPG Primeras APIs REST con IWS RPGUnit: tests para logica core
Fase 2 (Mes 7-12)Foundation
Refactoring a service programs ILE Capa de APIs REST completa para un dominio Prototipo de UI web para un flujo Integracion con API Gateway
Fase 3 (Mes 13-18)Scale
Extender APIs a todos los dominios UI web en produccion para usuarios seleccionados CDC para replicacion a data warehouse Documentacion y training
Fase 4 (Mes 19-24+)Optimize
Rollout completo de UI web Retirar pantallas 5250 no criticas Optimizacion de performance Apertura de APIs a partners externos
Principio guia: Entregar valor visible en cada fase. Management pierde confianza si pasan 12 meses sin resultados tangibles. Las Quick wins de Fase 1 (APIs basicas, Git/CI-CD) demuestran progreso y generan momentum.