A successfully executed PowerBuilder modernization is not a destination. It is the moment everything that was structurally impossible becomes possible.
The API-first backend now serves multiple surfaces simultaneously ā a web application, a mobile app, a partner integration, a data pipeline. With the original PowerBuilder runtime, each of those would have required a separate architecture. Now they share one.
Performance becomes optimizable. The original application likely retrieved entire DataWindow result sets to the client before filtering at the display layer. The modernized system pushes filtering and aggregation into the database or a Redis caching layer. Expensive computed queries run once and are cached. Reports that took minutes take seconds.
Security posture transforms. The original system ran on a corporate network with implicit trust. The modernized system enforces OAuth 2.0 authentication at every API boundary, supports multi-factor authentication, generates a full audit trail at the service layer, and integrates with enterprise SIEM tooling. This is not a patch ā it is a structural improvement.
Recruiting becomes normal. Any competent .NET or React developer can maintain and extend the system. You are no longer searching for a specialist who remembers what PowerScript looks like. The talent pool goes from a handful of senior developers to every software engineer in your market.
None of this is an add-on. It is what you get when the business logic ā the actual asset ā runs in a modern runtime rather than a proprietary one.
The modernization is the foundation. The transformation is what you build on top of it.
You can find relevant information in the specific section: https://enable-dev.com/modernization
Follow us on LinkedIn.
You can find relevant information in the specific section: https://enable-dev.com/modernization
Follow us on LinkedIn.
You can find relevant information in the specific section: https://enable-dev.com/modernization
Follow us on LinkedIn.
The target architecture for a modernized PowerBuilder application is a clean three-tier system.
Tier 1 ā the frontend: A React or Angular single-page application, served from a CDN. Fully responsive ā works on a 375px phone screen, a tablet, and also a widescreen monitor. Furthermore communicates with the backend exclusively through HTTPS API calls. A React Native or Flutter app shares the same API surface for mobile.
Tier 2 ā the service layer: An ASP.NET Core application, containerized, deployed in Kubernetes or Azure App Service. Hosts a versioned REST API secured with OAuth 2.0. Each controller maps to a functional domain ā accounts, orders, reporting ā and internally uses .NET DataStore objects to execute the business logic originally contained in PowerBuilder DataWindows. Secured with JWT, fine-grained authorization via ASP.NET Core policies.
Tier 3 ā the database: Preserved as-is during the initial migration to ensure continuity. The existing relational database ā SQL Server, Oracle, DB2 ā continues as the system of record. Schema changes are introduced once the application layer reaches stability.
Three properties make this architecture compelling:
It is incremental ā individual DataWindow objects migrate one at a time while the rest continue running in the legacy application.
It’s verifiable ā the DataStore and the original app run against the same inputs, with outputs compared automatically.
It’s evolvable ā once logic runs in .NET, it can be refactored into handwritten C# service classes wherever business value justifies it.
You can find relevant information in the specific section: https://enable-dev.com/modernization
Follow us on LinkedIn.
The question every tech lead asks: “How do you actually preserve DataWindow logic in a .NET world?”
The answer is .NET DataStore ā a NuGet package that brings DataWindow semantics into the .NET runtime.
What it does:
-> Reads DataWindow definitions exported from the PB application
-> Executes the embedded SQL against the target database
-> Evaluates computed column expressions
-> Applies validation rules and formats output
From C#, it exposes Retrieve(), Update(), GetItemString(), SetItem() ā familiar to anyone who knows PowerScript, inside idiomatic C# code.
An ASP.NET Core API wraps the DataStore. A React frontend consumes the API. The frontend knows nothing about PowerBuilder.
The result: a modern web application backed by the same business logic that has served the organization for decades. Verified. Tested. Running in parallel until every output matches.
You can find relevant information in the specific section: https://enable-dev.com/modernization
Follow us on LinkedIn.