Tests First
Tepia records how the current app behaves with characterization tests, so every rewritten module is checked against real outputs.
Read: Legacy System Modernization and Mobile MigrationTepia modernizes VB6 and legacy .NET Framework applications, moving WinForms, Web Forms, WCF services and COM components to current .NET, ASP.NET Core and React. Characterization tests are written before code changes, and modules are replaced one at a time so the old application stays in use until each replacement is proven.
Old Visual Basic and .NET Framework apps often run critical work reliably, so modernization has to keep that behavior intact while removing the risk around it.
Tepia records how the current app behaves with characterization tests, so every rewritten module is checked against real outputs.
Read: Legacy System Modernization and Mobile MigrationThird party ActiveX and OCX controls from vendors long gone are swapped for supported components or rebuilt as web screens.
Read: How to Modernize a Legacy System Without Stopping the BusinessA routing layer sends each screen to old or new code, so Tepia replaces one module at a time while users keep working as usual.
Read: Rebuild or Refactor Your App?Tepia targets .NET 10, the current long term support release, with ASP.NET Core APIs that run on Windows, Linux or containers.
Developer survey figures Tepia plans around in VB6 and .NET work.
Stack Overflow's 2024 survey found technical debt is the top workplace frustration for 62 percent of professional developers.
Stack Overflow's 2024 survey found about 25 percent of developers use modern .NET, the platform VB6 and Framework apps move to.
Stack Overflow's 2024 survey found about 27 percent of developers use C#, so a rewritten app has a large hiring pool behind it.
Many companies still run order entry, production scheduling or claims processing on a Visual Basic 6 desktop app written in the late 1990s, or on a .NET Framework app from the 2000s. They keep running because they work. The rules inside them reflect years of real cases, and the people who use them every day are fast with them. Tepia starts modernization by respecting that, not by declaring the old system broken.
The risks build up around the edges. The VB6 development environment has been unsupported since 2008, so every change depends on an old virtual machine and a developer who remembers the language. Apps rely on 32 bit ActiveX controls and Crystal Reports versions from vendors that no longer exist, and each Windows update is a small gamble. On the .NET side, Web Forms never moved to modern .NET and WCF server support lives on only through the community CoreWCF project, so those apps stay tied to Windows Server, IIS and a framework that gets security fixes but no new features.
The people risk is often the biggest. When the one developer who understands the code base plans to retire, the business suddenly has a deadline it did not choose.
Tepia chooses a target per module, not per application, because one legacy system often contains several of these patterns at once:
| Starting point | Typical target | How Tepia gets there |
|---|---|---|
| VB6 desktop app on Access or SQL Server | ASP.NET Core API with a React web front end | Module by module rewrite over a shared database, guarded by characterization tests |
| VB6 app that must stay on the desktop | WinForms or WPF on .NET 10 | Rewrite in C# with replacement controls and a modern installer |
| VB6 COM DLLs called by other systems | .NET class libraries or REST services | Wrap first, then move callers over one at a time |
| .NET Framework WinForms or WPF | The same UI framework on .NET 10 | Upgrade Assistant for project files, then manual fixes for unsupported APIs |
| ASP.NET Web Forms | ASP.NET Core with React, Razor Pages or Blazor | Incremental migration with a reverse proxy routing pages between old and new |
| WCF and ASMX services | REST APIs, gRPC or CoreWCF | Contract tests so existing clients keep working |
| Crystal Reports | HTML and PDF reports or SQL Server Reporting Services | Rebuild the reports in use and retire the rest |
The choice between a web front end and a modern desktop app depends on who uses the system. Plant floor stations with barcode scanners may stay on the desktop, while sales and management screens move to the browser.
Big bang rewrites of legacy systems have a poor track record, because the old app keeps changing during the rewrite and the new one inherits none of the hidden rules. Tepia uses an incremental approach often called the strangler pattern. A routing layer, such as a YARP reverse proxy for web apps, sends each page or screen to either the old or the new code. One module is rebuilt, tested against the old behavior and switched over, then the next one starts.
Characterization tests make this safe. Before rewriting a module, Tepia captures its actual outputs for a large set of real inputs, including the odd cases, and runs the new code against the same set. Differences are either bugs in the new code or long standing bugs in the old code that you decide whether to keep. Microsoft’s .NET Upgrade Assistant speeds up mechanical project conversion, but business logic is rewritten and reviewed by people.
Older applications usually exchange data through nightly flat files, shared database tables or an FTP folder. As modules move to ASP.NET Core, Tepia exposes them through documented REST APIs, so your CRM, ERP, ecommerce site or mobile app can read and write data directly. Events such as an order approved or a job closed can publish to a queue like Azure Service Bus or Amazon SQS, letting other systems react without polling.
Authentication moves too. Windows integrated login inside the office becomes single sign on through Microsoft Entra ID or Okta, which also lets remote staff and partners use the new web screens. Our API development and integration and event driven integration pages describe that work in more depth.
Tepia maps its six phase process onto release waves, so each group of modules goes through the full cycle under one US based project manager.
Typically Discovery runs 1 to 3 months, development and QA 2 to 6 months per release wave, and each launch about a month, with larger systems split into several waves. See our process.
Automated conversion tools can translate VB6 into C# or VB.NET, and they help with large code bases full of simple forms. The output often mirrors VB6 patterns that are hard to maintain, so Tepia uses conversion selectively and rewrites the modules where business logic lives.
Leaving an app alone is sometimes right. If it runs on an isolated network, changes rarely and has a developer who will be around for years, Tepia may recommend documenting it, adding tests and putting an API in front of it instead. A rewrite becomes the better call when security reviews flag the platform, the app blocks remote or mobile work, or the knowledge is about to walk out the door. Read rebuild or refactor your app and how to choose a legacy modernization partner, browse our work, then talk to Tepia.
A paragraph or two with information on your product/service or describes a problem your product/service is designed to solve.
CEO
Senior Project Manager
VP & Operations Manager