Skip to main content
GullySystem
A practical guide

How to Integrate Modern Applications with Legacy Software

Ganesh HSStrategy and Technology, GullySystem
Practical advice · 5 min read

In this guide 6 sections
The short answer

Start by auditing what the old system offers: a documented API, a scheduled export file, a queryable database or only a terminal screen. Then pick the least invasive route that works, keep production access read-only, and treat screen automation as a temporary bridge and never as the foundation.

Inventory of interfaces, files and database constraints

Consider a textile unit running a mainframe-style billing and stock program installed almost two decades ago, with no vendor support left and no modern API. The first job is an audit of what it can really offer: a scheduled export, a working file format, a queryable database, or only a terminal screen.

That audit decides everything after it. A program that already drops a nightly export file is in a different position from one reachable only through a clerk’s keyboard, so one plan cannot fit both. Look in odd places too: an SFTP folder where a forgotten job drops fixed-width text files, or a spooled report that someone prints every night and nobody reads.

Supported APIs, exports, middleware and cautious RPA

Rank the options in this order. A documented API comes first, even a limited or old one, because the vendor designed it to be called by other programs. Next comes a reliable scheduled export, such as a nightly CSV of the day’s transactions, which middleware between the old and new systems can pick up and validate.

Robotic process automation is the last resort. It drives the legacy screen as a person would, clicking through menus, so a moved field, a renamed button or a patch can break it silently. It is also harder to monitor, since a clicked button returns no status code and a failed run may surface only when someone spots a missing record.

An unused export changes everything. For the textile unit, finding a nightly stock export that nobody had opened would turn what looked like a screen-automation project into a simple file-processing job.

Production access and data ownership

Old systems break easily. A badly built integration that queries the database directly can slow the clerks still using the system all day, or in the worst case corrupt live records. Use a dedicated read-only account for any direct database connection, and test every write on a copy of production long before it touches the real thing.

Take a backup before the first connection. Restore it on a spare machine, so experiments with queries and test imports happen away from the live billing system and nobody loses an afternoon’s invoices.

Ownership needs to be explicit too. If the old system owns stock levels or customer balances, the integration must respect that, or the new tool becomes the source while the old one drifts. Nobody notices until totals disagree.

Validation, reconciliation and failure recovery

Legacy interfaces behave inconsistently, so check every value leaving the old system, including date format, quantity range and item code, before anything downstream trusts it. Reject bad rows loudly. Old exports often arrive in a legacy charset, with long item names cut by truncation, so define one canonical record format on your side and convert everything into it.

Reconciliation is the second habit. Each week, compare a sample of invoices and stock movements in both systems to catch the slow drift that fragile connections produce. Catching a mismatch early costs an afternoon, while a mismatch found at year-end can mean rebuilding months of ledger entries by hand.

Keep a rollback path as well. If an import posts wrong quantities into the new system, you should be able to reverse that batch by its run number instead of editing rows by hand.

Incremental replacement of fragile connections

It is a bridge, not a destination. From the first day, the plan should name what replaces it, whether that is migrating the data into a modern system or obtaining a proper API from the vendor.

Until then, watch it closely. Give it a named owner, a daily success check and an alert for any morning the expected export file fails to arrive on schedule.

Agree the exit triggers early: the end of a support contract, a repeated failure of the automation, or the day the last clerk stops using the old screens. Whichever comes first starts the project.

Legacy integration options matrix

A ranked table of five options: documented API, scheduled file export, middleware over a database view, direct database access and screen-based RPA. Each row is scored on reliability, security risk and upkeep, so the choice rests on evidence rather than whichever route is quickest to build.

Open a blank worksheet to print

Questions owners ask

What if the old system has no API?

Look for a scheduled file export next. Exports are usually safer than direct database access or screen automation, because the old system produces them on its own terms, without anyone prodding its screens or tables. Fall back only if nothing else exists. Rehearse on a copy first.

Should we write directly to its database?

Avoid it where you can. If there is no alternative, use a dedicated account with the narrowest permissions needed, prefer read access over write, and rehearse every change on a non-production copy first. A mistake at database level can corrupt records that the old program’s own screens would have refused to accept, and nothing warns you.

How long should a legacy bridge stay in place?

Plan its retirement from day one. Write down what replaces the bridge, who owns that replacement and a review date, and revisit it whenever the old system is patched or its vendor announces changes.

Browse all guidesBack to top ↑
Next step

Have a specific situation to work through?

This article covers the general case. Tell us what you’re actually dealing with and we’ll respond directly.

Discuss Your Requirement