Skip to content

James Allman | JA Technology Solutions LLC

Modernization that builds on what you have

Modernization does not mean starting over. It means making existing systems more maintainable, more capable, and better connected, without the risk of a wholesale replacement.

Approach

I approach modernization selectively. Not every part of a legacy system needs to change. The goal is to identify where modernization delivers real business value (better maintainability, reduced risk, improved integration, or new capability) and focus effort there.

This often means modernizing interfaces while preserving reliable back-end logic, or wrapping existing business rules in modern APIs rather than rewriting them from scratch.

The problem modernization solves

The system still runs the business, but it can no longer keep up with it. The RPG is fixed-format and thinly documented, so even small changes are risky. A .NET Framework app is stuck on an unsupported runtime because the upgrade was always next quarter. A Red Hat 6 server is years past end-of-life because the migration kept getting deferred.

None of these need a wholesale rewrite. They need the parts that hurt modernized (free-format RPGLE on IBM i, a .NET Framework to .NET 8 upgrade on Windows, a supported Linux distribution and containerized deployment) while the business logic that already works stays in place. That is the difference between modernization and replacement.

What modernization involves

  • Free-format conversion of legacy RPG code on IBM i, and RPG-to-Java migration where it genuinely fits: targeted rewrites of specific programs rather than wholesale replacement, with Java and Kotlin services running alongside existing IBM i applications where coexistence is the better call
  • .NET Framework to .NET 8 upgrades on Windows, and bringing VB6, classic ASP, and Access/VBA applications onto a supported, maintainable stack
  • Linux distribution migrations (RHEL 6 and 7 to current), containerization of long-running services, and build and deployment automation
  • Web front ends using React, Vue, and modern frameworks connected to existing business logic, regardless of where that logic lives
  • API development to expose legacy data and functions to modern consumers, and replacement of green-screen interfaces with browser-based alternatives
  • Vendor lock-in reduction through open-source JDKs, Linux-based deployment, and open database platforms
  • Consolidation of spreadsheet-based workflows into database-backed applications, and modernization of reporting from static printouts to interactive, visual formats

A real merchandising workflow, before and after: item maintenance, item attributes, and price and cost maintenance are on separate green-screen pages. The modern tabbed view that replaces them handles all three on one screen, with the business logic underneath preserved.

Before

 01  6/09/26 RW TMISC      Grocers Support Systems       Store maint mode
    4/19/25             Item adds/changes/deletions    ALL72    000412

 UPC number        4011 BANANAS
 Attr.zones 01                                                             
    A/*-add, C-change, D-delete, X-ignore
 C 101        C 102        C 103        C 104        C 105        C 106        
 C 107        C 108        C 109        C 110        C 111        C 112        
 C 113        C 114        C 115        C 116        C 117        C 118        
 C 119        C 120        C 121        C 122        C 123        C 124        
 C 125        C 126        C 127        C 128        C 129        C 130        
 C 131        C 132        C 133        C 134        C 135        C 136        
 C 137        C 138        C 139        C 140        C 141        C 142        
 C 143        C 144        C 145        C 146        C 147        C 148        
 C 149        C 150        C 151        C 152        C 153        C 154        
 C 155        C 156        C 157        C 158        C 159        C 160        
 C 161        C 162        C 163        C 164        C 165        C 166        
 C 167        C 168        C 169        C 170        C 171        C 172        
                                                                               
                                                                               
                                                                               
                                                                               
 01  6/09/26 RW TMISC      Grocers Support Systems       Store maint mode
    4/19/25             Item adds/changes/deletions    ALL72    000412

 UPC number        4011 BANANAS
 Attr.zones 01                                                             

POS attributes
 16/12 ch desc BANANAS               

 Depts  4 45 Cls  39  Fds: 1  Tax 0  RstSle 0  Deposit     Tare 1  QtR 0  Cou    
                                       WIC 2  Cig 0  Liq 0  Dsc 0
Host attributes   0/00/00 126/06/09 IM
 Type 2  Inv:    Usr:        Rank 99999 RankMj 99999 RankSu 99999 RankMi
 Sup code              DC code  30960 Cat Mj 004 Cat Su 230 Cat Mi  23
 BANANAS                 Size PER LB   Link 432    Tag M Snd   St P
 BANANAS                UNM LB Units  1.0000 Cts      Prf/brn GR1     
                STYL:        PER LB                INV     1
                Rev.date  0/00/00 Primary SKU        4011
                Rcv.meth 0      Dpn    4 Pck   40
 BANANAS                  Bns typ 0 Pgm flg 0
                Dsc flg 0 LCpn flg 0 LCpn id    
 Attr. master exists  Item master exists       P Type  2 Core  
 F3=Exit  F4=Copy attributes  F8=Retrieve UPC master   F12=Previous screen
 01  6/09/26 RW  12/31/25 Price/cost inquiry/update  EF>  4/19/25   0/00/00
 UPC/EAN number                                  LnkA   Sugg   Prmt
     00000 04011 Brn:        Fds: 1 Tax:   Dps:      *NO    *GP    *NO   TITEM
 Long/short descriptions/UPC    Size/lnk   Categories/rank Lab  Prf  Depts  Cls
 BANANAS                       PER LB    004   230   23   M   GR1  4   4   39
 BANANAS                       432       99999 99999 99999  WhsItm>           
                                432      001 002 Calc G.P.
 Vendor Group  Item no. Comment     Scroll>   7   Net case/unit cost  Cat% Mth
 000412 000001  1086300                   18.9100        .4727
 Dl Ds Zone  Pack   Cost    Off inv. C  From      To        Gp%     Price Un Pc S
       01       40                      41925              40.16      .79  1   2
 Qt>       Lqd>             Dsc>         Mx>     DC>       DP         Q    
                                                            T      L    
┌──────────────────────────────────────────────────────────────────────────────┐
│P000412 Z01        19.6000             01/23          37.97      .79      2   │
│P000412 Z02        19.6000             01/23          37.97      .79      2   │
│P000412 Z03        19.6000             01/23          37.97      .79      2   │
│P000412 Z04        19.6000             01/23          37.97      .79      2   │
│P000412 Z05        19.6000             01/23          28.99      .69      2   │
│P099999 Z06        19.6000             02/03          28.99      .69      2   │
│P099999 Z07        19.6000             02/03          28.99      .69      2   │

 F3=Exit   F4=Link display   F5=Store movement   F6=Store pricing
 F7=Update item master   F8=Update price all linked items   F24=More keys

After

Bananas
Active
UPC
4011
Size
Per lb
Dept
4/45
Class
39
Link
432
Item no.
1086300
ItemAttributesAuthorizationCostPrice
Zone
Select zone
Effective
4/19/25
Ends
12/31/25
Price
GP %
37.0
Price
0.00
Units
1
Price code
 
Scale
No
Disc amt
0.00
Mix-match
0
LQD
Price
0.00
Unit
1
Limit
0
Digital coupon
Coupon id
0
Qty
0
Threshold
0
Limit
0
Add
ZoneEff.EndsGP %PriceUnitsP cdSclLQD prLQD unLQD limDiscMixDC idDC qtyDC thrDC lim
Z0101/2312/31/2537.970.7912N.0000.000
Z0201/2312/31/2537.970.7912N.0000.000
Z0301/2312/31/2537.970.7912N.0000.000
Z0401/2312/31/2537.970.7912N.0000.000
Z0501/2312/31/2528.990.6912N.0000.1004011207124
Z0602/0312/31/2528.990.6912N.0000.000
Z0702/0312/31/2528.990.6912N.0000.000
Applies to all 72 stores
Update linked itemsSave changes

See it side by side in the interactive demo →

When modernization makes sense

Modernization is most valuable when the existing system works but is difficult to maintain, extend, or connect to other systems. If the business logic is sound but the interface is outdated, the deployment is fragile, or the code is in a format that makes changes risky, that is a modernization conversation.

See the BI dashboard in action for an example of what happens when business data moves from a static spreadsheet into a modern, visual format.

Free modernization and legacy tools

Modernization starts with understanding what is already in place. These free browser-based tools make it easier to inspect legacy screens, record layouts, and numeric encodings before you decide what to replace and what to wrap.

Related capabilities

Modernization often connects with migration, custom application development, cloud and hybrid architecture, and reporting modernization. See modernization in action for a side-by-side comparison of legacy and modern interfaces.

Further reading

RPG Modernization: Options Beyond Java Migration: in-place free-format RPGLE, API wrapping, hybrid front ends, and when a full RPG-to-Java migration genuinely makes sense.

RPG: The Language Behind Your Business Logic: what lives in your RPG code and how to modernize it without losing business logic.

IBM i: The Platform Decision-Makers Should Understand: modernization context for the platform that many legacy systems run on.

Try the free tools for working with legacy and modern formats: DDS screen viewer, EBCDIC converter, packed decimal decoder, and format converters. Browse free tools →