The right question is not “how do we cut the time?” It is “how do we cut the time on the right parts?”

AI is already changing parts of the modernization equation.

Reading DataWindow definitions. Generating API structures. Producing frontend components against a defined style. Work that was mechanical, exhaustive, and slow — AI handles a significant portion of it faster than any manual process.

That part of the timeline compresses. Meaningfully.

But there is a different kind of time in a PowerBuilder migration that AI does not touch.

The time it takes to run both systems against real production inputs and understand why the outputs diverge. The time it takes to trace a discrepancy back to a computed column expression modified in 2011 for a business reason nobody fully remembers. The time it takes to resolve it correctly — which requires understanding it correctly first.

This is not execution time. It is evaluation time.

And evaluation time is where the risk lives.

The organizations that compress this phase — for whatever reason, with whatever tools — are the ones that go live with a system that processes 99.9% of transactions correctly and discover the rest in a financial audit.

AI makes the build faster.
It does not make the validation faster.
Nor should it.

The right question is not “how do we cut the time?” It is “how do we cut the time on the right parts?”

 

You can find relevant information in the specific section: https://enable-dev.com/futurize-pb/

Follow us on LinkedIn.

The time problem that methodology alone doesn’t solve

The methodology is sound.

Preserve the business logic. Rehost it in .NET. Replace the presentation layer. Run both systems in parallel until every output matches.

Every serious PowerBuilder modernization practitioner knows this is the right approach.

The problem isn’t the methodology. The problem is the time.

Discovery alone — cataloguing every DataWindow, tracing every dependency, mapping every computed column — can take months on a complex application. Not because it’s intellectually difficult. Because it’s manual, exhaustive, and unforgiving. Miss one object, misread one expression, and you find out in production.

Then comes the conversion: window by window, business logic by business logic, API endpoint by API endpoint.

The methodology doesn’t compress. It requires what it requires.

Until AI changes the equation.

 

You can find relevant information in the specific section: https://enable-dev.com/futurize-pb/

Follow us on LinkedIn.

When did your PowerBuilder application last go through a security architecture review?

Your PowerBuilder application probably runs on implicit trust.

It was designed for a corporate network where users on the inside are trusted, database connections are direct, and there is no authentication boundary at the API layer — because there is no API layer.

That architecture made sense in 1998. In 2025 it is an attack surface, not a design choice.

Modern enterprise security requirements cannot be retrofitted onto a client/server PowerBuilder architecture without fundamental change:

Multi-factor authentication requires an identity layer the architecture doesn’t have. Token-based API authorization requires an API boundary that doesn’t exist. SIEM integration requires structured audit events at the transaction level — not available from a desktop client that talks directly to the database. Zero-trust network access requires every request to be authenticated at the service layer.

A properly executed modernization resolves all of this by design:

OAuth 2.0 with Azure AD or Okta issues JWT tokens. Every API call is authenticated and authorized by ASP.NET Core middleware. Fine-grained authorization — field-level visibility, transaction approval thresholds — is encoded in policy-based authorization. A full audit trail exists at the service layer, independent of the database.

The presentation layer replacement is what users notice. The security architecture improvement is what your CISO notices. The compliance exposure reduction is what your legal team notices.

When did your PowerBuilder application last go through a security architecture review?



You can find relevant information in the specific section: https://enable-dev.com/modernization

Follow us on LinkedIn.

The modernization is the foundation. The transformation is what you build on top of it.

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.

“How do we know the new system is correct?”

“How do we know the new system is correct?”
Ā 
That question gets asked in every modernization project. The wrong answer is: “We’ll test it.” The right answer is a methodology, not a promise.
Parallel running is that methodology.
Ā 
Here is how it works in practice:
Phase 1 — regression harness before migration begins. An automated test harness drives both the original PowerBuilder application and the new API with identical inputs and compares their outputs — retrieve results, computed column values, validation outcomes. Every divergence is a defect. No module moves forward until outputs match completely.
Phase 2 — shadow mode in production. As each module is migrated, a subset of real production transactions is processed by both systems simultaneously. The legacy system’s output is authoritative. The new system runs alongside it, silent, proving its behavior under conditions no test environment fully replicates.
Phase 3 — gradual promotion. Only when a module is demonstrably stable in shadow mode — with zero divergence over a meaningful transaction volume — does it get promoted to primary status and its legacy equivalent retired.
Ā 
The result: a cutover that is never a single event.
Each module earns its promotion individually.
No single night when everything is at risk
Ā 
Parallel running is not a precaution. It is the only systematic proof that the migration worked.

 

You can find relevant information in the specific section: https://enable-dev.com/modernization

Follow us on LinkedIn.

Before a single line of new code is written, you need to know exactly what you are dealing with.

Before a single line of new code is written, you need to know exactly what you are dealing with.
Not approximately.
Precisely.
Ā 
This is the discovery phase — and skipping it is the most expensive mistake a PowerBuilder modernization program can make.
Ā 
Here is what a rigorous discovery produces:
Step 1 — Export and parse all .pbl libraries. Every DataWindow object, window, function, and global variable catalogued programmatically. Automated tools do this in hours, not weeks.
Step 2 — Categorize by type and complexity. Standard retrieval DataWindows. Composite reports. Dynamic DataWindows that use Modify() at runtime. Nested structures. Each category carries a different migration risk profile.
Step 3 — Build the dependency graph. Which DataWindows are used by which windows. Which windows are called from which menus. This is the map that tells you which modules can migrate first and which must wait.
Step 4 — Identify high-risk objects. Computed columns with complex expressions. DataWindows that have been modified dozens of times. Objects whose behavior is inferrable only from institutional memory or production observation.
Step 5 — Produce the effort model. Module by module, based on actual complexity data. This is the document a project sponsor can plan against — not a guess, not a range, a structured estimate.
Ā 
Discovery is not overhead. It is the foundation that makes everything downstream reliable.

 

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

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.

How do you actually preserve DataWindow logic in a .NET world?

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.

The standard measure of a successful migration: does the new system produce the same results?

The standard measure of a successful migration: does the new system produce the same results?

The answer is almost always: “yes — for the transactions we tested.”
PowerBuilder applications accumulate edge cases over decades. A pricing condition for a contract signed in 2004. A regulatory format that applies only to one account type in one jurisdiction. A validation rule adjusted after an incident in 2011 by a developer who left three months later.

These cases are not in the test suite.
They surface when a financial auditor, a regulator, or a major client encounters them — in production.

A migration that processes 99.9% of transactions identically is not successful in any system where the remaining 0.1% touches money, compliance, or contractual obligations.

The 0.1% is not a rounding error.
It is the thing your organization will be held accountable for.

 

You can find relevant information in the specific section: https://enable-dev.com/modernization

Follow us on LinkedIn.

We've never lost a business rule. Not one.

Before you approve a rewrite budget, talk to us first. A free 30-minute technical scoping call could save you years.

Book a free scoping call →