Phased Legacy Modernization for a 20-Year Delphi and .NET Product
-
Industry
IT
-
Project type
Software modernization
Softacom in Numbers
months is the phased modernization roadmap planning horizon
was the version of Delphi used in the core system
weeks was the time simple customer requests started taking
years the platform has been evolving
Description
A US-based software company has been developing a transportation management platform for more than 20 years. The system is used by more than 120 regional logistics providers and field service teams. At its core, the product is built in Delphi 7, with additional internal tools and modules running on WinForms, WPF, ASP.NET Web Forms, and PostgreSQL.
The system was deeply integrated into day-to-day operations:
- dispatch workflows
- technician scheduling
- route planning
- customer reporting
- billing synchronization
- warehouse integrations
The platform worked, but the product team was struggling to move forward. Simple requests from customers started taking 2-3 weeks instead of a couple of hours. Also, releases became stressful. Developers became increasingly cautious around certain modules because their internal dependencies and business logic were difficult to fully trace quickly.
The company knew modernization would eventually be necessary but nobody wanted a full rewrite.
They turned to Softacom before committing to large-scale migration decisions.
- Client trust and fear of rewrite. The client’s customers are using the product daily to manage operational workflows. That made leadership cautious about aggressive modernization decisions. Preserving customer trust was a priority.
- Incomplete documentation. Some workflows were understood only by two senior developers who had worked on the product for years. Because of this, even relatively small changes created anxiety inside the engineering team.
One developer described it this way:
“You change one thing in scheduling, and two weeks later accounting reports stop matching.”
- Unclear modernization estimations. It was hard to estimate because of hidden dependencies. As a result, the company couldn’t plan modernization.
- Simple customer requests were taking 2-3 weeks instead of a couple of hours.
Solutions
Our legacy software modernization cooperation started with understanding the platform so that we could make safe decisions.
Mapping dependencies before modernization
We started with a technical and operational assessment of the system. The work included:
- Delphi and .NET codebase analysis
- PostgreSQL dependency review
- deployment flow analysis
- integration mapping
- identification of tightly coupled modules
- review of operational bottlenecks reported by support and engineering teams
During the application modernization assessment phase, the team analyzed more than 25 application modules, multiple PostgreSQL schemas, and over 15 external integrations.
One important discovery was that the system was not equally risky everywhere. Some modules that leadership considered “critical” were actually relatively isolated. At the same time, some seemingly minor components affected multiple workflows unexpectedly.
For example, a small reporting service turned out to contain business logic used indirectly by billing exports, customer dashboards, and internal reconciliation tools. Without mapping dependencies first, migrating that service independently would likely have created production issues later.
Separating “Needs modernization” from “Needs replacement”
One of the most useful outcomes for the client was realizing that not every legacy component required immediate replacement. Some parts of the platform were old, but stable. For those modules, the better short-term decision was:
- improve supportability with better monitoring and logging
- document workflows and dependencies
- isolate dependencies before larger architectural changes
Other parts required refactoring before migration could even be discussed safely. And a smaller group of modules became good candidates for early phased modernization because they had high business visibility and manageable integration complexity.
This changed the internal conversation significantly. This is how we turned the conversation into: “Which areas are safe to modernize first?”
Creating a phased modernization approach
After the assessment, the company moved toward a phased approach instead of a rewrite strategy. The first modernization phase focused on areas where improvements could be delivered without destabilizing the platform:
- selected customer-facing UI workflows
- reporting processes
- several internal support tools
- API-based integration improvements
At the same time, heavily coupled legacy areas remained operational while the team gradually reduced technical risk around them. This allowed the company to continue product development and move modernization forward in parallel.
We have already replaced 4 internal ASP.NET Web Forms tools with newer web-based interfaces and reduced direct database dependencies between older services.
CTO
The biggest value was understanding where the real risk was.
Outcome
- The company reduced modernization estimation uncertainty from “multi-year rewrite discussions” to a phased roadmap covering the next 12–18 months.
- The product team gained a clearer understanding of which modules could coexist with newer components, where refactoring was necessary first and which dependencies created the highest operational risk. This improved planning quality and reduced internal friction between engineering leadership and product management.
- The company finally had a realistic way to move forward without committing to a high-risk rewrite. Instead of trying to replace the entire platform at once, they established a phased modernization path.

This project is still ongoing.