Excel groundwater monitoring fails regulatory expectations at five predictable points: trends become invisible until plotted manually, exceedance windows close before patterns surface, cross-station analysis becomes impractical at portfolio scale, audit reconstruction becomes a multi-day exercise, and data integrity gaps invite regulator scrutiny that compounds across reporting cycles. Each failure has a specific operational fix.
Excel works for groundwater monitoring up to the point where it does not. The inflection rarely arrives as a single event. It accumulates over several reporting cycles, until an EHS director notices that the regulator is asking sharper questions, that the team spends more hours assembling submissions, or that a trend the system should have surfaced earlier only became visible after a sampling result already crossed an action level. By that point, Excel is no longer a tool that supports the work. It is a vulnerability the operation is carrying into every regulatory interaction.1
Phoenix Consultants Group has built groundwater monitoring infrastructure for environmental compliance companies, industrial operators, and regulated sites since 1995, with environmental and regulatory compliance work representing approximately one-third of more than 500 production engagements across 31 years. This article describes the five failure modes EHS directors encounter most often when Excel-based groundwater data stops meeting regulator expectations, what each failure mode looks like in practice, and how PCG transitions an operation from spreadsheets to a custom monitoring database without losing the audit trail.2
Why do Excel groundwater reports stop passing regulator review around year three?
Three years is not a hard threshold. It is a pattern PCG observes across environmental engagements where the EHS operation grew during the period: more wells, more analytes tracked, more frequent sampling cycles, a second or third site added to the portfolio, or a regulatory framework that expanded its expectations for trend visibility. Each one of those changes on its own is manageable in Excel. Several of them compounded across two or three years exceeds the operational ceiling spreadsheets were designed for.
The first change is data volume. A single monitoring site producing 80 readings per year is tractable in Excel. The same operation at six sites producing 480 readings per year, accumulated across three years to 1,440 readings, requires multi-sheet structures that introduce manual error opportunities at every cross-reference. By year five, the same operation is managing 2,400 readings, and the spreadsheet becomes the bottleneck rather than the tool. At that scale, the spreadsheet is no longer reducing the EHS team's workload, it is creating new categories of work that did not exist when the data set was smaller.
The second change is regulator expectation. Regulators in 2026 expect operators to demonstrate continuous trend visibility, not periodic reporting after the fact. RCRA corrective action sites, NPDES permits, and state DEP frameworks each carry their own version of this expectation, and the trajectory across all of them is the same: regulators want to see that the operator identified the trend before it became reportable, not after.2
The third change is operational scale. An EHS director managing one site does the trend analysis personally. The same director managing six sites cannot review every analyte at every station every cycle without delegating the work, which introduces inconsistency in what gets reviewed and what gets missed. Excel does not solve that delegation problem because it does not surface the issues for the reviewer. It just presents the data.1
What are the five failure modes regulators flag most often?
The failure modes below come from PCG's engagement history. Each one is a specific operational pattern that produces a specific regulator-facing problem, and each one has a specific fix that a custom monitoring database addresses by design rather than by workaround.
Trends invisible in static data
Lab reports and spreadsheets contain the readings but do not surface contamination trends across time without manual plotting. By the point a problematic trend is visible in a static report, the regulatory notification window may already be closing.
Exceedance windows close before patterns surface
Regulators expect notification within defined windows after an exceedance is identified. When trends become visible only at quarterly review, the operator is notifying after the window the regulator considers acceptable for proactive identification.
Cross-station analysis becomes impractical
Plume movement, treatment system degradation, and new contamination sources reveal themselves as patterns across multiple stations. Excel portfolios force manual reconciliation across sheets, which is too time-consuming to perform routinely at portfolio scale.
Audit reconstruction takes days
Regulator requests for historical context, prior sampling decisions, and chain-of-custody documentation require assembling material from disconnected spreadsheets, lab PDFs, and email archives. Reconstruction work is itself a sign to the regulator that the operator does not have its data infrastructure under control.
A fifth failure mode deserves separate treatment because it compounds the other four. Data integrity gaps, including missing chain-of-custody entries, inconsistent analyte names across sheets, formula drift between spreadsheets that should match, and silently corrupted aggregation cells, create a foundation that the other four failures rest on. A regulator who identifies even one data integrity issue tends to expand the scope of the review, which surfaces additional gaps, which extends the regulator's interaction with the operator across multiple reporting cycles.2
Regulators do not penalize spreadsheets directly. They penalize the operational consequences spreadsheets produce: missed notifications, undetected trends, and audit gaps that the operator cannot close at the speed regulator review requires.
How does a missed exceedance window actually happen in spreadsheet-based monitoring?
The mechanism is consistent across PCG's environmental engagements. A specific analyte at a specific station produces a reading that is within range when considered in isolation. The same reading, plotted against the prior six months of readings at the same station, shows a clear trend toward the action level. That same reading also matches a pattern at an adjacent station that has been drifting in the same direction for two cycles. None of these signals is invisible in the data. They are invisible in the format the data lives in.
In a spreadsheet, the trend at a single station is visible only when someone manually plots the readings for that station and looks at the chart. The cross-station pattern is visible only when someone manually reconciles two sheets and looks for coordinated movement. Both of those manual steps require a human to actively go looking for the pattern. When the EHS team is managing multiple sites under multiple frameworks, the proactive review at the station level happens only at scheduled intervals, which means the trend can develop across multiple cycles before anyone looks at the right combination of charts.2
The exceedance window closes during that interval. By the time the EHS director runs the quarterly review, the reading that crossed the action level was already in the system for six weeks. The regulator views the gap between the reading and the notification as evidence that the operator's monitoring infrastructure is reactive rather than proactive. Penalty exposure is rarely financial in isolation. It compounds across the regulator's posture toward every subsequent submission the operator makes.1
What does cross-station trend analysis look like when Excel can no longer support it?
Cross-station analysis is the capability that separates a custom monitoring database from a sophisticated spreadsheet. A custom database identifies coordinated patterns across multiple wells automatically and surfaces them in the same interface the operator already uses for routine review. The pattern recognition does not depend on the analyst remembering to look.
PCG built this capability into the ground water monitoring system documented as a case study on the PCG site. The application produced time-series charts of well readings station by station and analyte by analyte, supported targeted searches that surfaced anomalies across monitoring stations, and made cross-station patterns visible as coordinated findings rather than isolated readings that each looked acceptable in isolation. Plume movement that would have remained undetected in disconnected spreadsheets surfaced as system output automatically.2
Excel-based cross-station review
Manual analyst-dependent
- Pattern recognition depends on analyst remembering to look
- Manual reconciliation between sheets for portfolio review
- Coordinated patterns missed unless someone specifically searches for them
- Review cadence determines what gets caught
- Time-consuming enough that portfolio review happens at scheduled intervals only
- Plume movement surfaces during investigation rather than monitoring
Custom database cross-station analysis
Automated system output
- Patterns surface continuously without analyst intervention
- Cross-station reconciliation happens at the database layer
- Coordinated patterns visible as standard system output
- Continuous monitoring rather than periodic review
- Portfolio-scale review is the default, not a special exercise
- Plume movement detected during routine monitoring cycles
The difference is not analytical capability. It is whether the analytical capability runs automatically or requires manual invocation. At portfolio scale, that distinction determines what the operator sees in time to act on.
Speak directly with the engineer who would scope your transition
A free 30-minute consultation to evaluate whether Excel is still adequate for your groundwater monitoring scope. No obligation, no sales handoff.
How does PCG transition groundwater data from Excel to a custom monitoring database?
The transition is a defined engagement designed to run alongside operational monitoring rather than interrupting it. PCG works in four phases, each producing a deliverable the operation owns regardless of whether the engagement continues to the next phase.
The first phase is discovery and source audit. PCG documents every Excel file the EHS team currently uses, every lab report archive the operation references, every chain-of-custody form the workflow depends on, and every regulatory framework the portfolio operates under. Phase one deliverable is a written audit of the current data infrastructure that the operation owns whether or not subsequent phases proceed. The audit document is itself a regulatory-facing asset that demonstrates the operation has its data infrastructure under documented review.3
The second phase is schema design and prototype review. PCG designs the SQL Server schema that will hold the groundwater data, designs the screens that EHS staff will use to review trends and exceedances, and builds a working prototype the team reviews before any production development begins. Workflows that the prototype does not match are corrected on the wireframe rather than after the application is built. Each correction at this phase saves multiple weeks of rework after deployment.2
Phase three is build and validation. PCG develops the production .NET Core 8 application on SQL Server against the approved schema and prototype. EHS staff review working demonstrations on a recurring cadence. User acceptance testing runs against representative samples of real monitoring data from the operation's portfolio. The application is not declared ready until the operation's team confirms it matches the regulatory workflow the EHS function depends on.
Phase four is migration and parallel operation. PCG migrates the operation's historical Excel data, lab PDFs, and chain-of-custody records into the new database with a reconciliation report confirming that every record left the source and arrived at the destination. Excel and the new database run in parallel during a verification period. The new system becomes the operational master only after the EHS team approves the reconciliation results and confirms that the new system reproduces the regulatory outputs the operation requires.2
What about the historical Excel data, lab PDFs, and chain-of-custody forms already accumulated?
Most EHS operations PCG works with arrive with years of monitoring data spread across spreadsheets, lab report archives, and disconnected files. The migration approach preserves the audit trail of the original material while consolidating the operational data into the structured format the new database uses.
Historical readings are migrated into the time-series structure that supports continuous trend visibility going forward. Lab report PDFs are stored as linked source documentation against the readings they support, preserving the regulator-facing audit trail. Chain-of-custody forms are captured both as source images and as structured event records in the new database, so the chain-of-custody is queryable rather than buried in image files. Original files remain accessible as references even after the operational workflow moves to the new database.
Migration approach is documented before any data movement begins, which means the audit trail of the migration itself is preserved as part of the deliverable. A regulator reviewing the operation's data infrastructure after migration can see exactly what was migrated from where, what transformation rules applied, and what records were flagged for manual review during the migration. The migration becomes a regulator-facing asset rather than a regulatory exposure.3
Can the new system align with multiple regulatory frameworks at the same site?
Yes. PCG has built groundwater monitoring infrastructure for sites operating under RCRA corrective action, CERCLA Superfund, NPDES discharge permits, EPA Title V air quality requirements that intersect groundwater monitoring, and state-level DEP frameworks. The architecture handles per-site configuration of analyte lists, threshold definitions, and reporting requirements rather than requiring separate systems per regulatory framework. Each framework brings its own analyte expectations, threshold logic, and reporting cadence into the same operational interface.2
The configuration approach means that an EHS director responsible for a portfolio of sites under different frameworks operates a single working environment. Each site's regulatory framework is captured as configuration data rather than as code. When the operation adds a new site, configures a new analyte to track, or adjusts a threshold based on regulator guidance, the change happens through the operational interface. No development cycle is required to accommodate a new regulatory requirement.
The cross-framework portfolio view is the operational benefit EHS directors notice most consistently after deployment. A single dashboard that shows exceedance risk across every site, with each site filtered by its specific regulatory framework, replaces the multi-spreadsheet portfolio review the operation previously performed manually. Routine monitoring becomes a working session rather than an assembly exercise.1
Find out whether your operation has crossed the Excel inflection point
A free 30-minute consultation, followed by a fixed-fee audit if it is the right next step.
The data volume, the regulatory expectations, and the operational scale all changed at different rates over the past decade. Excel handles a single site with a few wells well. It struggles with multi-site portfolios under varied frameworks, accumulated historical data that crosses thousands of readings, and regulator review processes that now expect continuous trend visibility rather than periodic reporting. The Excel itself did not fail. The operational reality it supports grew past what Excel can carry.
Regulators surface concerns at unpredictable intervals: inspections, complaint-triggered reviews, periodic compliance audits, or sudden enforcement actions following a peer facility's incident. The absence of a current complaint is not evidence that the underlying data infrastructure is adequate. EHS directors who act before the regulator surfaces a concern preserve the option of a planned transition. Those who wait act under regulatory pressure, which is the more expensive scenario.
Yes. PCG migrates historical groundwater data, lab report PDFs, and chain-of-custody forms into the new structured database with a reconciliation report confirming that every record left the source and arrived at the destination. The original Excel files and lab PDFs remain accessible during a post-cutover verification period. The migration approach is documented before any data movement begins so the audit trail of the migration itself is preserved.
The system architecture supports per-site configuration of analyte lists, threshold definitions, and reporting requirements rather than requiring separate systems per regulatory regime. A portfolio operating under RCRA corrective action, CERCLA Superfund, NPDES permits, and state-level monitoring obligations runs in a single working environment. Each site's regulatory framework is captured as configuration, not as code, which means the EHS team can add new sites without commissioning new development.
No. PCG builds the operational layer for EHS users who are not database administrators. Day-to-day operation requires no SQL knowledge, no schema editing, and no system maintenance beyond what any modern web application requires. PCG's monthly support retainer covers the database administration work for operations that prefer not to maintain that capability internally. The EHS team focuses on the environmental data, not on the database.
Allison Woolbert, CEO and Senior Systems Architect, Phoenix Consultants Group
Allison Woolbert is the principal of Phoenix Consultants Group, the custom software consultancy founded in 1995. PCG has delivered more than 500 production applications, with environmental and regulatory compliance work representing approximately one-third of that volume across 31 years. Her software development background extends to the early 1980s, including work as a data analyst for the U.S. Air Force before founding PCG.
PCG's environmental compliance engagements include ground water monitoring infrastructure, Superfund soil remediation tracking, EPA Title V air quality management, pesticide licensing compliance for state government, OSHA training and certification systems, and MSDS chemical management for production and shipping operations. Each one shares the same underlying pattern: regulatory expectations exceed what spreadsheet-based infrastructure can carry once the operation reaches portfolio scale, and the transition to a custom database removes the operational vulnerability rather than just adding a new tool.
1 Phoenix Consultants Group, Custom Field Data Collection for Environmental Consultants. phxconsultants.com
2 Phoenix Consultants Group, Case Study: Ground Water Monitoring and Charting System for Environmental Compliance. phxconsultants.com
3 Phoenix Consultants Group, Spreadsheet Trap: Ending the Manual Workaround Tax. phxconsultants.com
This article is informational and reflects PCG's experience building environmental monitoring infrastructure since 1995. It is not legal, regulatory, or compliance advice for any specific situation, framework, or regulator. EHS directors should consult with regulatory counsel and their applicable regulators on the specific requirements that apply to the sites they manage. For guidance tailored to a particular groundwater monitoring scope, contact Phoenix Consultants Group directly. PCG was founded in 1995.
VB6 to .NET desktop vs VB6 to web application is decided by five operational factors: hardware integration requirements, offline operation needs, user distribution geography, deployment infrastructure capacity, and the business workflow's natural form. Most VB6 applications migrate well to web. Specific use cases continue to require desktop. The right answer depends on the operational reality, not on technology preference.
Migration from Visual Basic 6 is no longer a question of if. Microsoft ended VB6 mainstream support in 2005 and extended support in 2008, and the runtime has degraded with each major Windows release since. The current question for IT directors and CEOs running a VB6 migration project is which target platform to migrate to. Two practical options exist: a modern .NET desktop application built on WPF or current WinForms, and a web application built on ASP.NET Core with Razor Pages. Both are .NET, and both run on supported Microsoft platforms that will outlive VB6 by decades. The choice between them is not technical fashion. It is operational fit.1
PCG has been migrating VB6 applications since VB6 was current software and has executed migrations to both desktop and web targets across more than 500 production engagements in 31 years of practice. The decision framework below comes from that engagement history. It identifies the five operational factors that determine which target fits a given application, and it documents the situations where the apparently modern choice produces a system that frustrates the team that has to use it every day.2
Why does the target platform decision matter when both are .NET?
Both targets share a runtime, a language, a tooling chain, and Microsoft's long-term support commitments. Technical foundations are identical. Operational behavior is profoundly different, and the difference shows up in how the application is used every day, how it is deployed and updated, what it can connect to, and how it survives infrastructure changes.
A web application runs on a server. Users access it through a browser. Updates happen in one place. New users join by visiting a URL. Hardware access is constrained by browser security models. Operation requires connectivity between the user's device and the server. A desktop application runs on each user's machine. Updates require deployment. New users require installation. Hardware access is direct through the operating system. Operation continues when network connectivity drops. Neither set of properties is universally better. They serve different operational realities, and matching the wrong set of properties to a business's reality is the migration mistake that costs the most to fix later.
The cost of choosing wrong is not the migration cost itself. It is the cost of running a migrated application that does not fit how the business operates: workarounds that staff invent to compensate for the architectural mismatch, integrations that have to be rebuilt because the chosen platform cannot reach the hardware the workflow requires, deployment burden that the IT team did not anticipate, or connectivity dependencies that fail at the worst possible moments. Choosing the right target during the audit phase eliminates that cost entirely.2
When does VB6 to .NET desktop (WPF or WinForms) still win?
Desktop targets win when the application's operational reality includes any of three conditions. Each condition is independently sufficient. A VB6 application that hits one of them is a candidate for desktop migration regardless of how appealing the web architecture might appear in isolation.
Direct hardware integration
The application controls or reads from devices connected to the user's machine: barcode scanners, label printers, balances and scales, serial port instruments, USB measurement devices, RFID readers, or proprietary hardware with vendor-supplied SDKs. Browser security models constrain hardware access in ways that often cannot match desktop reliability.
Unreliable or absent connectivity
Users operate in environments where network connectivity is intermittent, slow, or unavailable: loading docks, warehouse floors, remote sites, vehicles in motion, or facilities where IT has not extended reliable WiFi to the operational areas. Desktop applications continue running through connectivity gaps that would freeze a web application.
Data-entry intensive workflow with keyboard shortcuts
The application supports staff doing high-volume data entry where every keystroke matters: rapid form completion, keyboard-driven navigation, custom function key mappings, and immediate field-to-field movement. Desktop interfaces still outperform browsers on raw keyboard responsiveness and shortcut customization for power users.
The first condition is the strongest signal. When a VB6 application is the only software that knows how to read the calibration data off a specific industrial balance, talk to a vendor-specific scanner through a proprietary serial protocol, or print to a label printer with a custom command set, migrating to web breaks the integration. The browser cannot reach the hardware the way the desktop application can. PCG has seen this scenario regularly across manufacturing, environmental field operations, and inventory management work where the VB6 application accumulated hardware integration over years of specific equipment purchases.3
When does VB6 to web application (ASP.NET Core) win?
Web targets win when the application's operational reality does not require any of the desktop conditions, which is the case for most VB6 applications PCG sees in 2026. Migration to ASP.NET Core with Razor Pages, Blazor, or a Web API plus modern front-end framework produces an application that is easier to deploy, easier to maintain, easier to extend, and easier to access from anywhere the business needs it.
Distributed user base
Users access the application from multiple offices, remote locations, customer sites, or home offices. Web applications eliminate the deployment and version management overhead of supporting installed software across that distribution. One server, one URL, every user current with one update.
Reporting and consultative workflows
The dominant use of the application is reading data, building reports, analyzing trends, or making consultative decisions based on what the data shows. Browsers handle these workflows comfortably, and the visualization libraries available in modern web stacks exceed what desktop frameworks deliver without significant effort.
Integration with other web services
The application needs to exchange data with cloud services, SaaS platforms, partner APIs, or other web-based systems the business operates. Web architectures handle these integrations natively. Desktop applications can do this work too, but the integration patterns are more complex and less standardized than what web frameworks make available out of the box.
The deployment advantage of web is the one that most often tips the decision for distributed businesses. A VB6 application running on 200 desktops across five offices requires IT to coordinate updates, validate installations, handle support tickets from machines that fall behind, and verify that every user is on the same version of the software. The same application as a web target updates once on the server. Every user is current the next time they refresh their browser. The IT operational burden drops materially, and the business stops having "what version of the app are you running" conversations with users who have a problem.2
What about hybrid: desktop client connecting to web services?
Hybrid architectures exist and PCG builds them when the operational reality requires them. A modern .NET desktop client that reads from local hardware and writes through a Web API to a server-side database combines the desktop strengths (hardware access, offline tolerance, keyboard responsiveness) with the web strengths (centralized data, easier reporting, simpler partner integration). This setup gives the business a single source of truth on the server while the user-facing application maintains the desktop characteristics the workflow needs.
The hybrid pattern fits situations where part of the workflow requires desktop and part requires web. Field staff capture data through a desktop client running on a tablet or laptop, with offline tolerance built in. Office staff run reports and review the captured data through a web interface against the same server-side database. Mobile users may access a third interface optimized for their devices. All three connect to the same backend data layer through Web APIs that PCG builds during the migration.
Hybrid carries additional architectural complexity, and PCG only recommends it when the operational case requires it. A single VB6 application migrated to a single target (desktop or web) is simpler to build, simpler to maintain, and simpler for the business to operate. Hybrid is the right answer when the business genuinely has two or more distinct user populations with different operational needs from the same data. When the user population is uniform, a single-target migration produces a better outcome.3
The decision is not desktop or web in isolation. It is which architecture matches the operational reality of how the business actually uses the application. PCG's audit determines that reality before recommending a target.
How do hardware dependencies in the original VB6 application affect the choice?
Hardware dependencies are the single strongest determinant of target platform selection. PCG categorizes VB6 hardware dependencies into three tiers during the audit, and each tier carries a different implication for the migration target.
First tier dependencies are direct device control: the VB6 application uses COM components, ActiveX controls, or vendor SDKs to read from or write to hardware connected to the user's machine. These dependencies almost always force a desktop target. The hardware vendor's SDK was written for Windows desktop applications, not browsers. Recreating equivalent capability in a web target typically requires either browser-side helper applications that defeat the simplification web is supposed to provide, or hardware replacement that adds significant cost and risk to the migration scope.
Second tier dependencies are network-attached hardware: printers, scanners, or measurement devices that the VB6 application reaches through TCP/IP rather than through directly-attached hardware. These dependencies can migrate to either target. A web target reaches the network-attached device the same way a desktop target does, through standard network protocols. The decision between desktop and web for these applications falls to the other four factors rather than to the hardware dependency. Network protocols are sufficiently standardized that browser-to-device communication works reliably in either architecture.
Third tier dependencies are file system access: the VB6 application reads from or writes to specific file locations, watches folders for incoming data, or generates output files for downstream systems to consume. These dependencies migrate to either target, with the web target typically using cloud storage or a controlled server-side file system rather than user-machine local files. The migration involves redesigning the file flow, which is a scope item the audit identifies and documents.1
Speak directly with the engineer who would scope your VB6 audit
A free 30-minute consultation to evaluate which target platform fits your VB6 application. No obligation, no sales handoff.
What does the target platform decision actually cost the business?
The decision affects three categories of cost across the application's productive life: build cost, deployment and maintenance cost, and operational cost.
.NET desktop migration
WPF or modern WinForms target
- Build cost comparable to web for equivalent scope
- Per-user installation and update burden ongoing
- Hardware integration preserved without redesign
- Operates through connectivity gaps without failing
- Power-user keyboard performance preserved
- Server-side infrastructure not required
- IT support model focused on user machines
Web application migration
ASP.NET Core, Razor Pages, Blazor target
- Build cost comparable to desktop for equivalent scope
- One deployment serves every user instantly
- Hardware integration limited by browser security
- Requires reliable connectivity to operate
- Visualization and reporting libraries strong
- Server-side infrastructure required and maintained
- IT support model focused on server and access
The migration cost itself is comparable between the two targets for equivalent application scope. The ongoing operational cost diverges based on user distribution, deployment frequency, and hardware integration scope.
Web applications generally produce lower ongoing IT cost for distributed user populations because deployment happens once per release rather than once per user per release. Desktop applications generally produce lower ongoing operational cost for hardware-integrated workflows because the integration does not require browser workarounds or hardware replacement. The right comparison is total cost across the productive life of the application, not the migration cost alone. PCG's audit documents both for the specific application under review.2
How does PCG make the recommendation during the audit phase?
PCG's VB6 audit produces a written target platform recommendation as part of the audit deliverable. The recommendation comes from a documented evaluation of the application against the five operational factors above, not from a default preference for either architecture. Audit deliverables include the reasoning behind the recommendation, the alternatives considered, and the trade-offs the business accepts by choosing the recommended target.
An audit phase typically completes in 2 to 3 weeks for a single-module VB6 application and longer for multi-module systems. During the audit, PCG works with the application's current users, reads the existing codebase, identifies hardware dependencies, documents the workflows the application supports, and assesses the data layer the application connects to. The target platform recommendation is the final synthesis of that work, supported by the underlying findings.
Businesses that choose to proceed with the migration use the audit document as the project specification. Those that pause after the audit own the target platform recommendation as a planning asset regardless of when migration begins. The audit is a deliverable on its own, not a commitment to a subsequent project.3
Find out which target platform fits your VB6 application
A free 30-minute consultation, followed by a fixed-fee audit that produces a written target platform recommendation.
Web is the right answer for most VB6 migrations, but not all of them. Migrating an application to web that operationally needs desktop produces a system that frustrates the team that uses it. The correct framing is not modernity. It is whether the workflow actually fits a browser interface. PCG's audit determines the answer for each application rather than defaulting to the architecturally fashionable choice.
Direct hardware integration through serial port, USB device drivers, or proprietary SDKs is the strongest single signal that desktop is the right target. Browser security models limit hardware access in ways that often cannot be worked around without compromising the operational reliability the business depends on. PCG evaluates the specific hardware in scope during the audit and recommends the architecture that preserves the integration.
Web applications require reliable connectivity to the server hosting the application. In environments where connectivity is intermittent or unavailable, desktop applications continue working while web applications fail. The decision is operational, not technical. If the field reality includes loading docks, warehouse floors, remote sites, or mobile operations where connectivity cannot be guaranteed, desktop remains the safer target.
Modern .NET desktop applications built on .NET Core 8 with WPF or current WinForms run on a supported Microsoft platform that has a long lifecycle ahead. The compatibility problems that ended VB6 came from a runtime Microsoft stopped supporting in 2008. .NET Core 8 has a documented support lifecycle through November 2026 with long-term support releases following. Choosing desktop today does not commit the business to repeating the VB6 situation.
Yes. PCG's VB6 audit produces a written recommendation on the target platform as part of the audit deliverable. The recommendation is based on the application's actual operational profile rather than a generic preference. The audit stands on its own as a planning document. The business owns the recommendation regardless of whether PCG performs the subsequent migration.
Allison Woolbert, CEO and Senior Systems Architect, Phoenix Consultants Group
Allison Woolbert is the principal of Phoenix Consultants Group, the custom software consultancy founded in 1995. PCG has been migrating Visual Basic applications since VB6 was current software, including more than 500 production engagements across industrial, manufacturing, environmental services, and airport operations clients. Allison's software development background extends to the early 1980s, including work as a data analyst for the U.S. Air Force before founding PCG.
The consistent pattern in target platform decisions across 31 years of practice: the right answer comes from the operational reality of how the application is used, not from a preference for the more modern architecture. VB6 applications with deep hardware integration migrate to desktop. Applications serving distributed user populations migrate to web. The audit determines which pattern fits each business, and the recommendation is the audit's central deliverable.
1 Microsoft Visual Basic 6.0 support lifecycle documentation. Microsoft ended mainstream support in 2005 and extended support in 2008. learn.microsoft.com
2 Phoenix Consultants Group, Visual Basic 6 Migration to .NET. phxconsultants.com
3 Phoenix Consultants Group, Custom .NET Software Development for Mid-Sized Business. phxconsultants.com
This article is informational and reflects PCG's experience executing VB6 migrations to both desktop and web targets since 1995. It is not legal, regulatory, financial, or technical advice for any specific situation. For guidance tailored to a particular VB6 migration scope, contact Phoenix Consultants Group directly. PCG was founded in 1995.
Custom .NET beats off-the-shelf SaaS in four specific situations: when business logic is too specific for any vendor template, when integration cost exceeds the license cost, when SaaS pricing scales worse than custom ownership at the business's volume, and when data sovereignty or compliance requirements rule out shared cloud platforms.
Most CEOs encounter the SaaS-versus-custom question the same way: a department head is frustrated with the current SaaS product, a vendor proposal arrives for a custom build, and there is no framework for assessing whether the proposal addresses a real problem or whether a different SaaS subscription would solve the situation more cheaply. This choice is not theoretical. The wrong answer in either direction costs measurable money, and the right answer depends entirely on the specific business situation rather than on general claims from either category of vendor.
Phoenix Consultants Group builds custom .NET applications and has done so since 1995, across more than 500 production engagements. PCG also routinely recommends SaaS when SaaS is the right answer. The honest version of this article is the one a CEO needs: a framework for distinguishing the situations where each approach wins, written by a company that has no interest in selling custom development when SaaS would solve the problem.1
When does SaaS actually win the decision?
SaaS is almost always the right starting point. If a packaged product matches the work the business does, the recommendation is to purchase it.2 The conversation about custom development begins when commercial software no longer accommodates the operation, not before. CEOs evaluating the question should start by identifying whether their situation matches the standard SaaS pattern. Most situations do, which is why most businesses run on commercial software rather than custom applications.
Standard workflow is the first signal that SaaS is the right choice. When the business runs a workflow that hundreds or thousands of other businesses run in essentially the same way, a SaaS vendor has already built the application. Accounting, CRM, project management, helpdesk, payroll for businesses without compliance specifics, expense reporting, and similar functions have mature SaaS markets with multiple competing products. The CEO's job is to select the best product for the specific business, not to commission a custom build.
Small IT footprint is the second signal. SaaS shifts operational responsibility to the vendor: backup, patching, security updates, and hardware capacity are the vendor's problem. For businesses with small IT teams that cannot productively manage on-premise infrastructure, SaaS removes a category of work the business does not want to own. The recurring license fee is the cost of avoiding that operational burden. That trade is rational for many businesses and remains so for as long as the SaaS product fits the work.
Low user volume is the third signal where SaaS pricing remains favorable. Most SaaS products are priced per user per month. At small user counts, the monthly fee is materially lower than the upfront development cost of a custom application that would do the same work. The math changes at higher user volumes, which is where the custom case begins to surface, but it remains favorable to SaaS at the small end of the volume spectrum.
Fast implementation requirement is the fourth signal. SaaS products typically deploy in days to weeks. Custom development runs in weeks to months depending on scope. When the business needs an operational capability now, and the SaaS market has a product that approximates the requirement, the speed advantage of SaaS frequently outweighs the long-term cost difference. The custom rebuild can happen later if needed.
What are the four situations where custom .NET beats SaaS?
The custom case is not the inverse of the SaaS case. It does not surface when "SaaS is bad." It surfaces in four specific situations where the structural assumptions that make SaaS economical break down for a particular business. CEOs who recognize one or more of these situations in their operation have a real reason to consider custom development. Businesses that do not match any of them should remain with SaaS.2
Business logic too specific for any vendor template
The business operates on rules, calculations, or workflows specific enough that no SaaS template encodes them correctly. Staff end up working primarily in spreadsheets that sit alongside the SaaS product, doing the calculations the platform cannot.
Integration cost exceeds license cost
The business runs three to five SaaS subscriptions that were each purchased to fill a gap in another. The integration burden between them, measured in staff time and middleware fees, exceeds the recurring license cost of the SaaS portfolio itself.
SaaS pricing scales worse than custom at volume
Per-user, per-record, or per-transaction fees compound until the recurring cost of SaaS surpasses the amortized cost of a custom application that does the same work. The crossover point depends on the specific volume and vendor pricing.
Data sovereignty or compliance rules out shared cloud
Regulatory frameworks or contractual obligations require that the business data reside on infrastructure the business controls. SaaS architectures, which depend on shared cloud platforms operated by the vendor, are excluded by the underlying compliance requirement.
Each of the four situations is independently sufficient to make custom development the right answer. They do not need to compound. A business that hits any one of them has a legitimate custom case. Operations that hit two or more have a case so strong that the CEO who continues running SaaS workarounds is actively losing money the business could redirect.1
How does SaaS pricing scale compared to custom .NET ownership?
The pricing structures of the two approaches are fundamentally different, and CEOs who do not understand the difference make the comparison incorrectly. SaaS is a recurring operating expense that scales with usage. Custom .NET is a capital investment that amortizes across the application's productive life. The two are not directly comparable on a monthly basis, but they are comparable across a multi-year horizon if the analysis is done correctly.
SaaS pricing typically follows one of three models. Per-user fees charge a fixed amount per active user per month, which scales linearly with headcount. Volume-based pricing charges based on the records stored or processed, which scales with the business's operational activity. Transaction-based pricing charges based on specific actions taken in the platform, which scales with the throughput of whatever process the SaaS supports. Most SaaS products use one of these models or a combination, and the model determines how the recurring cost grows over time.
Custom .NET ownership has a different cost profile. The upfront development cost is significant. After deployment, the recurring cost is hosting infrastructure, periodic maintenance, and any feature additions the business commissions. For a business operating at low user volumes, the SaaS recurring cost is materially lower than the amortized cost of custom development across the same period. Higher user volumes or growing transaction throughput change the calculation: the SaaS recurring cost continues to grow while the custom asset remains fully owned at no incremental license fee.3
The CEO question is not which approach is cheaper today. It is which approach is cheaper across the application's productive life, given the specific business volume, integration scope, and compliance requirements. The honest answer depends on the audit, not on the brochure.
What hidden costs do CEOs underestimate when evaluating SaaS?
The SaaS license fee is the visible cost. Several hidden costs accumulate alongside it, and CEOs who budget only the license miss the real comparison against custom development. Four hidden costs recur across mid-market SaaS evaluations.
Integration cost is the first hidden component. When the business runs multiple SaaS platforms, each one needs to exchange data with the others to avoid manual re-entry. Some platforms provide native integrations, but the most useful integrations frequently require middleware platforms like Zapier, MuleSoft, or custom-built connectors. The middleware carries its own monthly fee, and the connectors require ongoing maintenance as either platform updates its API.
Customization workaround cost is the second hidden component. When the SaaS product does not match the business workflow exactly, staff develop workarounds: spreadsheets that hold data the SaaS does not capture, side processes that compensate for missing functionality, and manual approval workflows that bypass the platform's standard logic. The labor cost of these workarounds is invisible in the SaaS budget line but appears in productivity loss that CEOs notice without attributing to the cause.
Data lock-in cost is the third hidden component. SaaS vendors structure their terms of service to retain ownership and control of the data stored in their platforms. When the business decides to migrate away from a SaaS product, the export process is often incomplete, the data formats are proprietary, and the historical context that gave the data meaning is lost. The cost of recovering the business's own data from a SaaS platform exit can equal years of license fees.4
Vendor pricing risk is the fourth hidden component. SaaS vendors raise prices regularly, and the business has limited recourse once it has built operational dependence on the platform. A SaaS subscription that was economical at the original price may not remain economical after three or four annual price increases. The cost of switching to a different SaaS product, or to custom development, must be weighed against the cumulative cost of remaining on the original platform under its updated pricing.
Speak directly with the engineer who would scope your buy-or-build assessment
A free 30-minute consultation to evaluate whether SaaS or custom .NET is the right path for your business. No obligation, no sales handoff.
How does data sovereignty factor into the decision?
Data sovereignty is the fourth situation where custom .NET beats SaaS, and the only one where SaaS is excluded by the underlying requirement rather than out-economized over time. Businesses operating under specific regulatory frameworks, contractual obligations to large customers, or legal exposure that requires controlled data location cannot use SaaS for the affected business functions regardless of how favorable the pricing or integration is.
Three categories of business face this constraint regularly. The first is businesses operating under federal compliance frameworks that require data to reside on infrastructure controlled by the business, including specific government contracting requirements, defense-related obligations, and federally-regulated industries with strict data handling rules. A second category is businesses serving large enterprise customers whose security review processes prohibit vendor relationships that involve customer data passing through shared cloud platforms. Jurisdictions with data residency laws form the third category: those laws require specific physical storage locations for particular categories of data, which excludes shared cloud SaaS by definition.3
Custom .NET deployment supports all three scenarios because the deployment location is a buyer decision. The application can run on a Windows server in the buyer's facility, in a private hosting environment dedicated to the buyer, or on cloud infrastructure configured to meet the specific sovereignty requirements. SaaS architectures, which depend on shared cloud platforms operated by the vendor, do not provide that flexibility. The CEO who has data sovereignty as a constraint does not have a choice between SaaS and custom. That choice has already been made by the regulatory or contractual requirement.
What does the buy-or-build assessment actually look like at PCG?
PCG performs a buy-or-build assessment as a defined engagement designed to produce a CEO-grade decision document. The assessment is platform-neutral. When SaaS is the right answer, PCG recommends SaaS and identifies the specific products to evaluate. When custom is the right answer, PCG quotes the fixed-price engagement after the source audit. The assessment is the deliverable, not a sales pitch for custom development.
What the assessment evaluates
Buy-or-build inputs
- Current SaaS portfolio inventory and license costs
- Integration burden between SaaS platforms
- Business logic specificity against vendor templates
- User volume and projected growth trajectory
- Data sovereignty and compliance requirements
- Staff time spent on workarounds and manual processes
What the assessment delivers
Written CEO decision document
- Platform-neutral recommendation with reasoning
- SaaS product short-list if SaaS is the right answer
- Custom .NET scope and approach if custom is the right answer
- Identified hybrid options where mixed approach fits
- Multi-year cost comparison framework
- Migration pathway if existing SaaS is being replaced
The assessment phase typically completes in 2 to 4 weeks. The CEO ends the engagement owning a decision document the business uses regardless of which path is chosen.
PCG's approach to the assessment reflects 31 years of running custom software projects and recommending against custom development whenever SaaS would solve the problem. The platform-neutral framing is not marketing positioning. It is operationally how PCG has filtered engagements since 1995, because committing to a custom build that should have been a SaaS purchase produces a project that disappoints the buyer and damages the consultancy's reputation. Both outcomes are worse than recommending SaaS when SaaS is the right answer.1
Can a business start with SaaS and migrate to custom later?
Yes, and most businesses that end up on custom .NET arrived there through this path. The sequence is common enough that PCG treats it as the default expectation: businesses start with SaaS when their operational requirements are still emerging, encounter the specific situations where SaaS no longer fits, and migrate to custom when the case becomes clear. Migration is a defined engagement, and the SaaS data moves with the business rather than being abandoned.4
The transition typically happens in one of three patterns. The first pattern is replacement: a single custom .NET application replaces a single SaaS subscription that no longer fits. Consolidation is the second pattern: a single custom .NET application replaces three to five SaaS subscriptions that were purchased to cover gaps in each other, with the consolidation eliminating both license fees and integration burden. Hybrid is the third pattern: custom .NET handles the business-specific operations while SaaS continues to handle standard functions like email, accounting, or HR.
Each pattern carries different scope, timeline, and complexity. PCG's source audit determines which pattern fits the business and quotes the migration accordingly. The audit also identifies whether the migration should happen now, in phases, or be deferred until specific operational triggers occur. CEOs end the audit with a documented transition plan rather than a binary commit-now-or-not decision. That documented plan is itself a planning asset the business uses regardless of which path is ultimately chosen.
Find out whether SaaS or custom .NET fits your situation
A free 30-minute consultation, followed by a fixed-fee buy-or-build assessment if it is the right next step.
SaaS is almost always less expensive in the first 12 to 18 months because it carries no upfront development cost. The comparison changes after the third year as license fees compound while a custom asset is fully paid off. The crossover point depends on the specific business volume, the integration scope, and how often the SaaS vendor raises prices. PCG's source audit determines where the crossover falls for each business rather than relying on generic claims from either side of the debate.
Yes. Custom .NET applications frequently replace three to five SaaS subscriptions that were originally purchased to cover gaps in each other. PCG's source audit identifies the actual business functions performed across the existing SaaS portfolio and designs a single custom application that performs those functions in one working environment. The consolidation eliminates per-subscription license fees and removes the integration burden between previously disconnected SaaS platforms.
PCG migrates SaaS data into the custom .NET application as part of the build engagement. Each SaaS platform's data export is mapped to the destination schema, cleaned for quality issues identified during the audit, and loaded with reconciliation confirming that what left the source arrived at the destination. The buyer ends the migration owning the historical data outright, which is rarely the case under SaaS terms of service.
The decision typically takes 2 to 4 weeks once the source audit is underway. PCG's audit produces a written assessment of which SaaS platforms the business currently runs, what gaps drove their selection, what integration costs are accumulating between them, and where the custom .NET path produces a measurable improvement. The audit stands on its own as a planning document regardless of the final decision.
Yes. PCG performs a buy-or-build assessment that maps the business requirements against both SaaS and custom .NET options. The assessment is platform-neutral. When SaaS is the right answer, PCG recommends SaaS and identifies the specific products to evaluate. When custom is the right answer, PCG quotes the fixed-price engagement after the source audit. The assessment is the deliverable, not a sales pitch for custom development.
Allison Woolbert, CEO and Senior Systems Architect, Phoenix Consultants Group
Allison Woolbert is the principal of Phoenix Consultants Group, the custom software consultancy founded in 1995. PCG has delivered more than 500 production applications across industrial, manufacturing, environmental services, healthcare staffing, and airport operations clients. Allison's software development background extends to the early 1980s, including work as a data analyst for the U.S. Air Force before founding PCG.
PCG's buy-or-build engagements have produced SaaS recommendations as frequently as custom development quotes across 31 years. The consistent principle is platform-neutrality: the right answer is determined by the specific business situation, not by the consultancy's commercial interest. Committing a buyer to custom development when SaaS would solve the problem produces a project that disappoints. Recommending SaaS when SaaS is the right answer produces a buyer who returns when the custom case finally arrives.
1 Phoenix Consultants Group, Custom .NET Software Development for Mid-Sized Business. phxconsultants.com
2 Phoenix Consultants Group, Custom .NET Software Development service page. phxconsultants.com
3 Phoenix Consultants Group, What Drives Custom Software Migration Cost. phxconsultants.com
4 Phoenix Consultants Group, The Cost of Losing Your Business Software Source Code. phxconsultants.com
This article is informational and reflects PCG's experience building custom .NET applications and advising on SaaS-versus-custom decisions since 1995. It is not legal, regulatory, financial, or procurement advice for any specific situation. For guidance tailored to a particular buy-or-build evaluation, contact Phoenix Consultants Group directly. PCG was founded in 1995.
Phoenix Consultants Group builds custom field data collection software for environmental consultants managing remediation tracking, ground water monitoring, soil sampling, and regulatory compliance reporting. PCG has delivered environmental compliance applications since 1995, with this work representing approximately one-third of more than 500 production engagements across 31 years.
Environmental consultancies operate under a structural disadvantage that few other industries face: every site under management carries continuous regulatory exposure, and the data that defines that exposure is captured in field conditions where spreadsheets and paper forms fail to surface the trends regulators expect the consultant to identify before they become reportable. The sections below describe how custom field data collection software addresses that disadvantage, what kinds of environmental work PCG has supported across 31 years, and what the path from paper to database looks like for a small consultancy that has not previously commissioned custom software.
This article is written for the principal of an environmental consulting firm, the operations lead of an environmental services company, or the technical staff responsible for the data infrastructure that supports compliance work. The framing is not generic. Every example below comes from a production PCG engagement in environmental remediation, monitoring, or regulatory compliance work.1
What does custom field data collection actually solve for an environmental consultant?
Field data collection is not a single problem. It is a chain of related problems that compound when any one of them is unsolved. Custom software for environmental consultants addresses four specific failures that off-the-shelf tools and spreadsheet workflows leave unresolved.
Trends invisible in static data
Lab reports and spreadsheets contain the readings but do not surface contamination trends across time without manual plotting. By the time a problematic trend is visible in a static report, the regulatory notification window may already be closing.
Chain-of-custody at risk
Sample handoffs between field, transport, storage, and lab are tracked across paper forms and email threads. A single missed transfer record can invalidate the entire sample for regulatory or legal purposes.
Cross-station patterns missed
Patterns that develop across multiple monitoring stations or sample locations remain invisible until someone specifically looks for them. Plume movement, treatment system degradation, and new contamination sources go undetected.
The fourth failure deserves separate treatment because it carries the most direct regulatory exposure. Regulators expect environmental consultants to assemble historical context for any notification, additional sampling decision, or corrective action response. When the data lives in disconnected spreadsheets, lab report PDFs, and email archives, that context has to be reconstructed each time it is needed, which costs hours during the regulatory response window and increases the risk that something material is missed during reconstruction.1
Why do spreadsheets and paper forms fail when regulatory obligations grow?
Spreadsheets and paper forms work for the first year of a single site. They begin to fail in the second year, and they fail catastrophically by the time a consultancy is managing five or more sites under any combination of RCRA, CERCLA, NPDES, EPA Title V, or state DEP frameworks. Failure modes are not random. They follow a predictable pattern that environmental consultants encounter in the same order across most growing operations. Three failure points dominate the pattern, and each one tends to surface before the consultancy is fully prepared to address it.
Volume is the first failure point. A single monitoring site produces hundreds of readings per year across multiple wells, multiple analytes, and multiple sampling cycles. Five sites produce thousands. By the time a consultancy is managing a portfolio of sites, the total reading volume exceeds what any spreadsheet can hold without becoming slow, fragile, or vulnerable to silent corruption of formulas that aggregate across worksheets.
Cross-site comparison is the second failure point. Each site lives in its own spreadsheet because regulators want site-specific reporting, but the consultant needs to compare patterns across the portfolio: which sites are trending the same way, which analytes are showing up across multiple sites, which treatment approaches are working at which kinds of locations. Spreadsheet portfolios do not support that comparison without manual extraction and reconciliation that takes days for what should be a routine business question.
Audit reconstruction is the third failure point, and the one that most often forces the decision to commission custom software. When a regulator requests historical documentation for an investigation, an enforcement action, or a routine compliance review, the consultant must assemble the data trail from disconnected sources: lab reports, sampling logs, chain-of-custody forms, treatment system records, and field notes. The reconstruction effort is real labor, and during the reconstruction the consultant cannot demonstrate proactive monitoring because the proactive monitoring relied on the same disconnected sources.2
Environmental compliance is not a documentation exercise. It is a real-time data interpretation exercise. The consultant who cannot see the trend until the regulator surfaces it has already lost the credibility argument that justifies the engagement.
What kinds of environmental work does PCG support with custom software?
PCG has delivered environmental compliance applications across the range of regulatory frameworks and monitoring obligations that environmental consultants encounter in mid-market practice. Three production engagements illustrate the spectrum.
Time-series charting and anomaly detection
PCG built a ground water monitoring system for an environmental compliance company managing a regulated site. The application produced time-series charts of well readings and supported targeted searches that surfaced anomalies across monitoring stations, helping the client meet ongoing monitoring obligations and respond to potential exceedances before they became reportable violations.2
Soil sampling and EPA cleanup tracking
PCG developed a Superfund soil remediation tracking system that captured sampling data, mapped contamination across the site, and produced the documentation EPA cleanup oversight expected throughout the corrective action process.3
State regulatory compliance reporting
PCG built a pesticide licensing compliance system for a state government agency, handling license records, application history, and the reporting outputs required for the state's regulatory operations.4
Multi-source emissions tracking
PCG delivered an EPA Title V air quality management system for a Fortune 100 refinery, tracking emissions sources across the facility and producing the periodic reports the federal framework requires from major-source facilities.5
The four examples above are not exhaustive. PCG case studies also include OSHA training and certification tracking for Fortune 500 industrial operations, pest control central reporting for multi-office compliance, MSDS and SDS management for chemical production and shipping compliance, ISO 9000 documentation for multi-site oil manufacturing, and vineyard pest trap management for invasive species compliance. The pattern across all of them is the same: regulated environmental data captured in field conditions, structured for trend visibility, and assembled into the documentation format the relevant regulator expects.1
What does the path from paper to database look like for a small consultancy?
The path is not a single project. It is a sequence of four phases, each producing a deliverable the consultancy owns regardless of what happens next. The phases are designed so that a small consultancy can pause between any two of them without losing the value of what has already been built.
What the consultancy contributes
Discovery through deployment
- Operational staff time during discovery interviews
- Sample data set representing the consultancy's typical work
- Documentation of current regulatory frameworks the work falls under
- Review of wireframes and prototype before development
- User acceptance testing against real field workflows
- Field staff participation in training
What PCG delivers
At each phase milestone
- Phase 1: Source audit and data inventory document
- Phase 2: Schema design and approved wireframes
- Phase 3: Production .NET application on SQL Server
- Phase 4: Migration of existing data with reconciliation report
- Full source code transferred to the consultancy
- Documentation suitable for independent maintenance
The first phase is discovery and source audit. PCG works with the consultancy's principal and operational staff to document what the existing field data collection process actually does, what regulatory frameworks the work falls under, what reports the consultancy must produce, and what data quality issues need to be resolved before any migration. The deliverable is a written audit document the consultancy owns. If the engagement pauses here, the audit document still has value as an operational manual the consultancy did not previously have.2
The second phase is schema design and prototype review. PCG designs the SQL Server schema that will hold the field data, designs the screens that field staff and office staff will use, and builds a working prototype of the primary screens for the consultancy to review before any production development begins. This is the moment to identify workflows that the prototype does not match. Identifying that mismatch on a wireframe takes an hour. The same correction after the application is built and deployed takes weeks of rework.6
The third phase is build and validation. PCG builds the production .NET application against the approved schema and prototype. Field staff review working demonstrations on a recurring cadence. User acceptance testing runs against representative samples of real consultancy work. The application is not declared ready until the consultancy's team confirms that it matches the operational reality of the field work.
Data migration and cutover form the fourth phase. PCG migrates the consultancy's existing field data, lab reports, and historical records into the new system with a reconciliation report confirming that what left the source arrived correctly at the destination. The legacy spreadsheets and paper records remain accessible during a post-cutover verification period. A new system becomes the operational master only after the consultancy approves the reconciliation results.2
How does custom field data collection handle the chain-of-custody requirements regulators expect?
Chain-of-custody is a structural requirement, not an add-on. Regulators in environmental work expect that every sample taken from a field site can be traced from the moment of collection through every transfer, every storage condition change, and every lab analysis, with no gap in the documentation. A custom database makes that requirement enforceable at the data model level rather than treating it as a separate compliance exercise.
PCG's environmental data collection architecture captures chain-of-custody at the sample record level. Every sample is logged with the collection date and time, the field staff member responsible, the GPS coordinates or site grid reference, the collection method, the storage conditions, and the regulatory framework the sample falls under. Each subsequent event in the sample's history, including transfer to transport, storage at facility, handoff to the lab, lab analysis, and result return, is captured as a linked event that cannot be deleted or modified without an audit trail entry.3
The result is that chain-of-custody documentation is produced automatically as a byproduct of normal data capture, not assembled from paper forms and email threads during an audit response. When a regulator requests the chain-of-custody for a specific sample, the system produces the documentation in the format the regulator expects. The consultancy spends minutes on the response rather than hours, and the response is more complete than what manual reconstruction would have produced.
Speak directly with the engineer who would scope your environmental project
A free 30-minute consultation to evaluate the field data collection requirements specific to your consultancy. No obligation, no sales handoff.
What does PCG deliver at the end of an environmental data collection project?
The deliverables at project completion are designed so the consultancy owns a working application, a complete documentation package, and the ability to maintain the system independently. Each item exists because the absence of any one of them creates a future failure mode.
- Production .NET Core 8 application on SQL Server, deployed and configured for the consultancy's specific field data collection workflow, regulatory frameworks, and reporting requirements.
- Full source code transferred to the consultancy. No retained licensing rights, no usage restrictions, no requirement to return to PCG for modifications. Any qualified .NET developer can maintain the codebase independently.6
- Schema reference, transformation rules, and operational runbook covering every component the consultancy's staff or any future developer would need to maintain, extend, or audit the application.
- Migrated historical data with reconciliation report. Years of spreadsheet records and lab report PDFs consolidated into the structured time-series format the system uses, with documented confirmation that no data was lost in transit.2
- Chain-of-custody enforcement built into the data model. Sample lifecycle tracking, audit trails, and regulatory documentation produced automatically as a byproduct of normal data capture.
- Test coverage on the calculations and rules the application enforces. Unit tests on the threshold checks, the analyte comparisons, and the trend calculations that determine when regulatory action is required.
How is custom field data collection different from off-the-shelf environmental software?
Off-the-shelf environmental software products exist and they serve a real market. For consultancies whose work fits cleanly inside a vendor's template, an off-the-shelf product is often the right starting point. The conversation about custom development begins when the consultancy's work no longer fits the template, or when the workarounds required to make the template work cost more than the license itself.
Three situations recur in PCG's environmental engagements where custom development became the appropriate path. The first is when the consultancy operates across multiple regulatory frameworks simultaneously. A consultancy managing sites under RCRA, CERCLA, NPDES, and state DEP at the same time runs into off-the-shelf products that handle one or two frameworks but not the full combination. Custom development handles all of them in a single working environment.
The second is when the consultancy's specific analyte list, threshold definitions, or reporting requirements do not match what the vendor's templates support. Environmental work has long-tail requirements: a specific contaminant of concern at a specific site, a state-level threshold that differs from the federal one, a reporting format that a particular regulator requires. Off-the-shelf products typically support the common case and require workarounds for the long-tail. Custom development encodes the long-tail directly. That difference becomes material when the long-tail items are the ones the regulator examines most closely during compliance review.
The third situation is when the consultancy needs the field data collection system to connect to operational systems it already runs: accounting, time tracking, project management, or document management. Off-the-shelf environmental products often have limited integration with the back-office systems mid-market consultancies use. PCG builds the integrations directly as part of the custom development engagement, evaluated case by case based on what each connected system supports.6
Find out which framework fits your environmental consultancy
A free 30-minute consultation, followed by a fixed-fee source audit if it is the right next step.
Spreadsheets hold the data, but they do not surface trends, exceedances, or cross-station patterns until someone plots them manually. By the time a problematic trend is visible in a static spreadsheet, the regulatory notification window may have already passed. A custom database makes trends visible continuously and assembles the historical context required for regulatory response from live data rather than reconstructed from disconnected sources.
Yes. PCG has built environmental monitoring infrastructure for sites operating under RCRA corrective action, CERCLA Superfund, NPDES discharge permits, EPA Title V air quality, and state-level monitoring obligations. The system architecture handles per-site configuration of analyte lists, threshold definitions, and reporting requirements rather than requiring separate systems per regulatory framework. Multi-framework portfolios run in a single working environment.
Chain-of-custody is one of the structural requirements that custom field data collection systems are designed to enforce from the moment a sample is logged. Every transfer of custody, every storage condition change, and every lab handoff is captured as a tracked event linked to the original sample record. The audit trail is built into the data model, not added as a separate documentation exercise.
The architecture scales down as well as up. A single-site consultancy with state-permit monitoring obligations carries the same data interpretation risk as a multi-site environmental compliance firm: trends invisible in static data, anomalies detected only when someone looks, and exceedances that surface too late for proactive response. The engineering decisions that solve the problem at scale transfer directly to operations with as few as one monitored site.
Yes. Most environmental consultancies PCG works with arrive with years of monitoring data in spreadsheets, lab report PDFs, and disconnected files. The migration consolidates historical readings into the structured time-series format the system uses, preserves the source documentation for audit reference, and reconstructs station and analyte relationships where possible. Original files remain available. The migration approach is documented before any data movement begins so the audit trail of the migration itself is preserved.
PCG evaluates offline and mobile field capture case by case based on the specific field conditions, the sync requirements when connectivity is restored, and the device constraints the field team operates under. The specifics are scoped during the discovery phase rather than committed in advance, because field environments vary significantly across remediation sites, monitoring wells, and inspection operations. PCG does not promise generic mobile capability without first understanding the operational reality of the field work.
Allison Woolbert, CEO and Senior Systems Architect, Phoenix Consultants Group
Allison Woolbert is the principal of Phoenix Consultants Group, the custom software consultancy founded in 1995. PCG has delivered more than 500 production applications, with environmental and regulatory compliance work representing approximately one-third of that volume across 31 years. Allison's software development background extends to the early 1980s, including work as a data analyst for the U.S. Air Force before founding PCG.
PCG's environmental compliance engagements include ground water monitoring infrastructure, Superfund soil remediation tracking, EPA Title V air quality management, pesticide licensing compliance for state government, OSHA training and certification systems, and MSDS chemical management for production and shipping operations. The consistent finding across those engagements: environmental compliance is not a documentation exercise. It is a real-time data interpretation exercise that requires systems built specifically for the work, not adapted from generic templates.
1 Phoenix Consultants Group case studies index. phxconsultants.com
2 Phoenix Consultants Group, Case Study: Ground Water Monitoring and Charting System for Environmental Compliance. phxconsultants.com
3 Phoenix Consultants Group, Case Study: Superfund Soil Remediation Tracking for EPA Cleanup. phxconsultants.com
4 Phoenix Consultants Group, Case Study: Pesticide Licensing Compliance System for State Government. phxconsultants.com
5 Phoenix Consultants Group, Case Study: EPA Title V Air Quality Management System for a Fortune 100 Refinery. phxconsultants.com
6 Phoenix Consultants Group, Custom .NET Software Development service page. phxconsultants.com
This article is informational and reflects PCG's experience building custom environmental compliance software since 1995. It is not legal, regulatory, or compliance advice for any specific situation, framework, or regulator. Environmental consultants should consult with regulatory counsel on the specific requirements that apply to their work. For guidance tailored to a particular field data collection scope, contact Phoenix Consultants Group directly.
When the source code for business software is lost, the cost falls into four categories that compound over time: operational disruption when the system finally fails, the migration premium paid for emergency timelines, business continuity exposure during unplanned downtime, and the long-term erosion of institutional knowledge. Total financial impact depends on how long the exposure remains unaddressed.
Source code loss rarely arrives as a single event. It accumulates quietly across years of staff turnover, vendor transitions, lost backup tapes, and undocumented contractor work. By the time a CFO becomes aware of the exposure, the business is often already running production software that nobody on the current team can modify, audit, or recover from a major failure. This article presents a financial framework for evaluating that exposure before the system fails, when the cost of action is still controllable.
Phoenix Consultants Group has been recovering orphaned business software since 1995, across more than 500 production engagements covering Microsoft Access, Visual FoxPro, Visual Basic 6, Delphi, PowerBuilder, and early .NET applications.1 The categories below come from that engagement history and reflect the financial patterns CFOs encounter when source code recovery becomes urgent rather than planned. This framework is platform-agnostic, so the financial mechanics apply equally to any custom business software in production.
What does "source code is lost" actually mean for a business in 2026?
Source code loss is a spectrum, not a single condition. A CFO assessing exposure should understand which point on the spectrum applies to the business, because the financial implications differ at each point. Four scenarios recur across PCG engagements, ordered from least to most severe.
Source code exists, knowledge does not
The source files are accessible on company servers, but nobody on staff or in any active vendor relationship can productively read them. Financial exposure: moderate, recoverable through a documented application audit.
Source code exists, location is unknown
The source files were preserved somewhere by a former developer or vendor, but the current team cannot locate them. Financial exposure: elevated, requires source recovery work before assessment is possible.
Partial source code only
Some source files are recoverable but others are missing, often the most recently modified ones. Financial exposure: high, requires reconstruction of missing components alongside recovered material.
Compiled application only
Only the executable and the database remain. No source files can be located anywhere. Financial exposure: highest, requires reverse-engineering from the compiled application and the data structure.
The framework that follows applies across all four scenarios. Cost mechanics, however, scale with severity. A CFO who identifies the scenario early has significantly more options than a CFO who discovers the exposure during a production failure. Early identification preserves the planning window in which exposure can be quantified, recovery can be scoped, and budget allocation can occur on a deliberate schedule.2
What is the cost of operational disruption when the software finally fails?
The first cost category is operational disruption. Line items appear immediately and continue accruing until the business resumes normal operations. CFOs typically focus on direct staff productivity loss, which is the most visible component, but operational disruption includes several other measurable expenses that surface only after the failure begins.
Staff productivity loss is the headline figure. When the system that runs accounting, inventory, customer records, or compliance reporting becomes unavailable, the staff who depended on it cannot perform their normal work. Some shift to manual workarounds using spreadsheets and paper forms. Others wait. The cost is the fully-loaded labor expense for the affected staff during the entire disruption window, less any productive work they manage to complete through alternative means.
Customer-facing impact follows quickly when the affected software touches the customer experience. Order intake delayed by manual workarounds. Customer service responses extended because the agent cannot look up account history. Invoices delayed because the billing system is the affected platform. Each touchpoint absorbs a measurable cost in delayed revenue, customer service overhead, and reputational impact that compounds across the disruption window.
Downstream system failures are the cost category most often underestimated. Modern business software rarely operates in isolation. The affected application typically feeds data to accounting, reporting, regulatory submission, or partner integration platforms. When the source system fails, the downstream systems begin producing stale or incomplete output. The cost is the staff time required to identify, correct, and restore confidence in every downstream data flow after the source system returns.2
How does emergency-timeline migration cost compare to planned migration?
The second cost category is the emergency migration premium. A migration triggered by a production failure runs on whatever schedule the broken business can survive, against whatever vendor the business can engage on short notice, with whatever scope the business can articulate during emergency conditions. Each of those constraints translates into measurable additional cost compared to a planned migration of the same application.
Timeline compression is the largest premium driver. A planned migration spreads discovery, design, build, and cutover across a comfortable window that allows for testing, validation, and operational learning. An emergency migration compresses the same work into whatever window the business can survive without the original software. Compression typically requires additional engineering hours to maintain quality under reduced timeline, premium rates for accelerated turnaround, and additional risk reserves to handle issues that surface late in the compressed schedule.
Vendor selection power disappears when the business is in emergency mode. A planned migration allows the CFO to evaluate multiple vendor proposals, negotiate scope, and select the engagement that produces the best long-term value. An emergency migration eliminates that negotiating position. The business engages whichever qualified vendor can start immediately, at whatever rate that vendor proposes, with whatever scope the vendor is willing to commit to under the time constraint. Price differences between selected-vendor and available-vendor often exceed the difference between planned-timeline and emergency-timeline considered alone.
Scope inflation is the third driver. A planned migration begins with a documented source application inventory that defines exactly what must be replicated in the destination system. An emergency migration begins without that inventory, because the business has not had time to build it. The vendor is forced to estimate scope against incomplete information, which produces either an inflated estimate to cover unknowns or an underscoped commitment that requires expensive change orders during execution. Either outcome costs more than a planned migration with documented scope.3
The emergency premium is not a small percentage adjustment. Across PCG engagements, an emergency migration consistently costs significantly more than the same scope executed on a planned timeline, before counting the operational disruption cost incurred during the emergency window. The decision to delay assessment is the decision to pay the premium.
What is the business continuity exposure during unplanned downtime?
The third cost category is business continuity exposure during the downtime window itself. Operational disruption captures the staff and customer impact. Business continuity exposure captures the broader financial risks that surface when revenue, compliance, or regulatory obligations depend on the affected software.
Revenue at risk is the most measurable component. When the affected software is part of the revenue process, every hour of downtime carries a quantifiable opportunity cost. Manufacturing operations that cannot produce. Service businesses that cannot bill. Retail operations that cannot transact. The cost is the gross revenue normally generated during the affected window, less whatever portion the business successfully recovers through workarounds or post-recovery batch processing.
Compliance and regulatory exposure carries the highest tail risk. Industries operating under regulatory schedules, such as environmental remediation, OSHA reporting, ISO 9000 documentation, or industry-specific compliance frameworks, face penalty exposure when the supporting software fails during a reporting window. The cost includes any penalties assessed, the staff time required to demonstrate good-faith compliance during recovery, and in severe cases the cost of external counsel or regulatory negotiation.4
Audit failure is the related risk that surfaces during external review rather than regulatory deadline. A financial audit, a quality systems audit, an insurance audit, or a customer audit conducted while the affected software is unavailable produces findings that can extend significantly beyond the original audit scope. Auditors who encounter undocumented systems often expand the scope of their review to validate adjacent business processes, which carries its own cost in staff time and potential remediation findings.
What is the long-term cost of lost institutional knowledge?
The fourth cost category is institutional knowledge erosion. This category accrues continuously, not at the point of system failure, which makes it the easiest cost to underestimate in advance and the most disruptive cost to address after the fact. Three components compose institutional knowledge erosion.
Undocumented business rules are the first component. Custom business software accumulates rules over years of development: pricing calculations, approval workflows, validation logic, regulatory mappings, and workflow conditionals that reflect how the business actually operates. When the original developer leaves and the source code is lost, those rules exist only inside the compiled application. The business operates on rules nobody on staff can articulate, which means decisions that depend on those rules cannot be reviewed, updated, or audited without rebuilding the rule logic from scratch.
Training cost is the second component. New staff who join the team after the institutional knowledge is lost must learn the system entirely from its observable behavior, without access to documentation that explains why the system behaves as it does. Onboarding timelines extend accordingly. The risk of staff making decisions based on incorrect mental models of the software increases. Each new hire carries a higher onboarding cost than they would in an organization with documented systems.
Decision lag is the third component, and the one most directly measurable in CFO terms. When a business question depends on understanding what the software actually does, and nobody on staff can answer the question definitively, decisions either delay until investigation completes or proceed against incomplete information. Both outcomes carry cost. Pricing decisions made on misunderstood logic. Capacity planning based on incorrect assumptions about system limits. Compliance reporting that cannot be defended under audit because the underlying calculations cannot be explained.2
Speak directly with the engineer who would scope your exposure assessment
A free 30-minute consultation to evaluate which of the four cost categories apply to your situation. No obligation, no sales handoff.
What hidden financial risks do CFOs underestimate?
Beyond the four primary cost categories, three secondary risks recur across CFO engagements. Each one is invisible until it triggers, and each one can equal or exceed the primary cost categories in financial impact when it surfaces.
The first hidden risk is integration cascade failure. Affected software typically connects to other systems through APIs, scheduled data transfers, or shared databases. When the affected software fails, the integration connections fail with it. Each connected system then begins producing incorrect output, missing updates, or accumulating queued transactions that cannot process. The cost of restoring confidence in every downstream system after the primary failure resolves often exceeds the cost of the primary recovery itself.
The second hidden risk is vendor concentration. CFOs who have not assessed source code exposure often discover that a single former vendor or contractor was responsible for multiple business-critical applications. When one of those applications fails and recovery is needed, the same exposure profile applies to every other application that vendor built. A single recovery engagement may surface the need for parallel recoveries across the rest of the portfolio, each carrying its own cost.
The third hidden risk is talent market exposure. Pools of developers qualified to work on legacy platforms shrink every year. CFOs who plan to address source code exposure "eventually" face a continuously degrading talent market for the platforms in question. The same recovery engagement scoped today costs more next year, and significantly more in five years, simply because the developer talent capable of executing it becomes scarcer over time.1
How can a CFO quantify exposure before the system fails?
The exposure assessment is a defined engagement, not an open-ended investigation. PCG performs source code and application inventory assessments designed specifically to produce a CFO-grade financial exposure document. Each deliverable is a written report mapping operational functions to the cost categories described above, with the exposure level identified for each function.
Assessment phase work typically completes in 2 to 4 weeks for a mid-sized business application. PCG works against copies of the source code, the compiled application, and the production database. Production systems continue operating normally throughout the assessment. The deliverable stands on its own as a planning document, regardless of whether the business subsequently chooses to proceed with source recovery, migration, or continued operation under the existing application.3
Without an exposure assessment
CFO operates on assumption
- Total financial exposure unknown
- Cost categories not separated by operational function
- Vendor concentration risk undocumented
- Recovery cost can only be estimated after system failure
- Budget planning happens reactively, under timeline pressure
- Compliance and audit exposure unquantified
After the exposure assessment
CFO has a planning document
- Written exposure profile organized by business function
- Cost categories quantified for the specific application
- Vendor concentration risk mapped across the portfolio
- Recovery engagement scope and timeline documented
- Budget allocation can happen on a planned schedule
- Compliance and audit exposure included in the assessment
A planned exposure assessment costs measurably less than the operational disruption of a single production failure. CFOs who have completed the assessment own a planning document the business uses regardless of next steps.
PCG's exposure assessment connects naturally to subsequent engagements when the business chooses to proceed. Recovery work begins with the inventory already in hand. Migration scoping begins with the financial categories already documented. A continued-operation path also becomes possible because the business now has the documentation it never previously had. The assessment is the foundation, not a commitment to any particular next step.1
Quantify your source code exposure before the system fails
A free 30-minute consultation, followed by a fixed-fee exposure assessment if it is the right next step.
The system works until a Windows update, a server replacement, or a compliance audit forces the issue. By the point of failure, the CFO has no control over timeline, vendor selection, or scope. Financial exposure is highest when the business is forced to act under emergency conditions. CFOs who assess exposure before the system fails preserve the option to act on a planned schedule, which materially reduces total cost.
PCG performs a source code and application inventory engagement that produces a written assessment of what exists, what is recoverable, and what is at risk. The deliverable includes an exposure profile organized by business function, so the CFO can match financial risk to operational dependency. The engagement does not require migration commitment. The assessment stands on its own as a planning document.
The classification depends on the scope. A pure assessment and inventory engagement is typically an operational expense. A full source recovery followed by migration produces a new application asset that qualifies for capital treatment under standard accounting practice. PCG provides documentation suitable for either treatment and recommends consulting with the business accounting team on classification specific to the engagement.
A developer being unreachable means the knowledge in their head is gone, but the source code may still exist on company servers or backup media. Source code loss is more severe: the source files themselves cannot be located, and only the compiled application remains. Both situations are recoverable through PCG's discovery process, but source code loss extends the timeline and requires more reverse-engineering work to reconstruct the business logic.
The exposure assessment phase typically completes in 2 to 4 weeks for a mid-sized business application. The deliverable is a written report mapping each operational function to its associated financial risk if the supporting software fails. The assessment runs independently from any subsequent recovery or migration engagement. The CFO ends the assessment owning a planning document the business can use regardless of next steps.
Allison Woolbert, CEO and Senior Systems Architect, Phoenix Consultants Group
Allison Woolbert is the principal of Phoenix Consultants Group, the custom software consultancy founded in 1995. PCG has executed source code recoveries and orphaned system rescues for industrial, manufacturing, environmental services, and healthcare staffing clients across more than 500 production engagements. Allison's software development background extends to the early 1980s, including work as a data analyst for the U.S. Air Force before founding PCG.
The financial pattern is consistent across decades of legacy rescue work: businesses that assess source code exposure before a production failure preserve options the business cannot recover once the system breaks. PCG's assessment engagements are designed to produce the planning document CFOs need to make that decision while options still exist.
1 Phoenix Consultants Group, My Developer Disappeared: What Do I Do? phxconsultants.com
2 Phoenix Consultants Group, Visual FoxPro Rescue When Your Developer Is Gone. phxconsultants.com
3 Phoenix Consultants Group, Conversion, Migration and Integration service page. phxconsultants.com
4 Phoenix Consultants Group, True Cost of Technical Debt: An Executive Guide. phxconsultants.com
This article is informational and reflects PCG's experience executing source code recoveries and orphaned system rescues since 1995. It is not legal, regulatory, financial, or accounting advice for any specific situation. CFOs should consult with their accounting team on expense classification and with legal counsel on contractual matters specific to their business. For guidance tailored to a particular source code exposure assessment, contact Phoenix Consultants Group directly.
When the original Visual FoxPro developer is gone and the application is still running the business, the immediate priority is preserving access to the source code, the database, and any documentation that exists. PCG performs an emergency source recovery and a written application inventory, typically within the first 2 to 4 weeks, before any migration decision needs to be made.
This situation arrives in a predictable way. Nobody currently on staff can answer a real question about how the application works. The source code lives on a network share that nobody has touched in years. Yesterday a Windows update made a report fail, and now the operations team is asking what happens next.
This article is for the business owner, CEO, or operations leader who is in that situation right now. It does not address the strategic evaluation of a planned migration. The audience here is someone who has woken up to a problem and needs to know what to do this week. If your situation has not yet reached emergency, the strategic version of the conversation is in Visual FoxPro Migration in 2026. This piece focuses on what happens when the planning window is already closed.
What does "developer is gone" actually mean for the business right now?
There are three operational realities behind the phrase, and each one has different consequences. Knowing which one applies to your situation determines what the rescue actually requires.
Developer unavailable but reachable
The original developer retired, changed careers, or moved on. They are still alive and possibly willing to answer questions, but they are not actively maintaining the application.
Developer entirely unreachable
The original developer has passed away, gone out of business, or cannot be located. Whatever knowledge they had about the application is no longer recoverable from them directly.
Developer never properly engaged
The application was built by a contractor or vendor that the business has no current contract with. Source code ownership may be unclear, and documentation may never have existed.
The rescue path is similar across all three situations because the technical work is the same: PCG reads the Visual FoxPro source code and the database schema directly. Documentation that exists in the developer's head is helpful when accessible, but it is not the primary input. The compiled application, the source code, and the production database together describe what the system actually does, and that is what gets inventoried during the rescue phase.1
If your situation goes beyond Visual FoxPro specifically (any business-critical system left behind after a developer quit or disappeared) start with what to do when your developer disappeared.
What are the first three actions to take this week, before anything else?
The actions below are not about migration. They are about preserving the option to do anything at all. Each one can be completed within the first week, and each one significantly reduces the risk that the rescue becomes harder later.
First, locate every copy of the source code and back it up to a controlled location. Visual FoxPro source files are typically PRG, SCX, FRX, and VCX files in directories scattered across old development machines, network shares, and possibly a backup tape from 2014. Make a full copy to a current storage location that the business controls. If the source code lives only on the original developer's old workstation, image that machine before anything else happens to it. A workstation that boots today may not boot next month.
Second, identify and back up the production database. Visual FoxPro applications typically store data in DBF files alongside compiled executables, or in a separate data directory on a Windows file share. The DBF files are the actual business data. Take a current backup. Verify the backup is readable. If the application uses a SQL Server back-end accessed through ODBC, also take a current database backup using SQL Server tools. The data is significantly more valuable than the application that reads it, and the data is what enables any rescue scenario.
Third, document what is currently working, what is not, and who depends on each piece. A short written list of the application's main functions, the reports staff run on what schedule, the external systems it connects to, and the regulatory or compliance use cases it supports. This document does not need to be exhaustive. It needs to exist. PCG's discovery phase will produce the complete inventory, but the initial list helps prioritize which modules carry the highest business risk if the application fails.2
Visual FoxPro lost Microsoft extended support on January 13, 2015. In 2026, every VFP application is running on borrowed time. The window to act is not when the application fails. It is now, while the source code and the data are still available to recover.3
How does PCG recover the source code when nobody on staff has access?
Source code recovery is the first technical step of the rescue. PCG begins by inventorying every possible location where the source code might exist. Old development workstations, network shares, backup tapes, cloud storage accounts associated with the original developer, vendor archives, and any version control system that may have been used. PCG works with the buyer's IT team to access these locations and retrieve whatever source files can be found.
When the source code is incomplete or partially missing, PCG reconstructs what is recoverable. Visual FoxPro source files have predictable structures that PCG reads directly. PRG files contain procedural code. SCX files describe forms. FRX files describe reports. VCX files describe class libraries. Each file format is documented and readable without the original developer's interpretation. The compiled APP or EXE file also contains useful information about what the application does at runtime, even when corresponding source is unavailable for parts of the codebase.1
The output of source recovery is a controlled archive of every recoverable source file, indexed by module and function, with a written assessment of what was found and what could not be located. This archive becomes the input to the application inventory phase. The buyer ends source recovery with a definitive answer to the question of what source code the business actually possesses, which is more than many businesses had at the start of the rescue.
What happens during the application inventory phase?
The inventory phase produces a written document describing what the Visual FoxPro application actually does. What you receive is not a code-level walkthrough. It is an operational description written for the business owner, the operations team, and any future development engagement that needs to understand the system. The inventory has five components.
Functional module map
Every screen, form, and operational function the application provides, organized by business area. Staff who use the application can verify that the map matches their daily work.
Data model
Every DBF table or database object, the fields each contains, the relationships between them, and the volume of data currently stored. The data model often reveals undocumented business entities that staff did not know existed.
Business rules inventory
Validation rules, calculation logic, approval workflows, and conditional behaviors embedded in the source code. This is the component most often missing from existing documentation, and the most valuable to recover.
Reports catalog
Every report the application produces, who runs it, on what schedule, and what data sources feed it. Reports are often the most visible part of the application to non-technical staff, and their inventory has immediate operational use.
External connections
Every system the application connects to: accounting platforms, payroll, EDI partners, hardware devices, regulatory reporting systems. Each connection becomes a dependency the business must plan around.
The five components together form a deliverable the business owns regardless of what happens next. Should the decision be to migrate, the inventory becomes the foundational scope document. When the choice is to continue running the existing application for another two years, the inventory becomes the operational manual that the business never had. If the application fails before any decision is made, the inventory is the document that allows a replacement to be built without losing the embedded business knowledge.2
Speak directly with the engineer who would lead your rescue
A free 30-minute consultation to assess the urgency of your situation. No obligation, no sales handoff.
How urgent is the migration decision once the inventory is complete?
Once the inventory exists, the urgency of migration changes. The business now knows what it owns. A choice between migrating, integrating, or continuing to run the existing application becomes strategic rather than reactive. Most buyers who complete the rescue phase find that the migration question has a clearer answer than they expected, because the inventory reveals which parts of the application are truly business-specific and which parts could be served by an off-the-shelf replacement.3
The strategic version of this decision is described in detail in Visual FoxPro Migration in 2026. That article walks through the three real options of migration, integration, and replacement, and describes how each one fits a different situation. The rescue inventory is the input that allows that conversation to be productive rather than speculative.
What does not change after the inventory: the underlying technical risks of running on Visual FoxPro in 2026. Microsoft ended extended support on January 13, 2015.3 The 2 GB per-table ceiling continues to limit database growth.4 The 32-bit compatibility layer in Windows 11 continues to be a source of fragility with every feature update. The talent pool of developers who can productively work on Visual FoxPro applications continues to shrink. These conditions argue for some form of migration on a planned timeline, not on the timeline forced by the next system failure.
Before the rescue
Business is reactive
- No documented inventory of what the application does
- Source code location and completeness unknown
- Database backup status uncertain
- Business rules embedded in code that nobody can read
- Migration scope cannot be quoted without weeks of investigation
- System failure forces emergency response with no plan
After the rescue
Business has options
- Written inventory of every functional module and business rule
- Controlled archive of all recoverable source code
- Current database backup verified and stored
- Operational manual for staff and future engagements
- Migration scope quotable on real numbers from the codebase
- Decision to migrate, integrate, or continue made on the business timeline
What does emergency support cost compared to a planned migration?
Emergency support and planned migration are different engagements with different cost structures. PCG provides a fixed-fee quote for the rescue phase, including source recovery and application inventory, after a free initial consultation that assesses the situation. This quote is independent of any subsequent migration commitment. Buyers can complete the rescue phase, receive the inventory deliverable, and pause the engagement before deciding whether to proceed with migration.
The cost comparison that matters for the business owner is rescue-now versus rescue-after-failure. A planned rescue completes on a predictable schedule with the existing application still operational, staff still able to use the system, and the IT team able to support the engagement during normal business hours. When a rescue is triggered by a production failure, it runs on whatever schedule the broken business can survive. Staff who normally would contribute to discovery are instead doing manual workarounds for a system that is not working. The technical work is similar, but the operational cost of running the business during the rescue is significantly higher.2
The cost of waiting is not theoretical. It is the cost of running a rescue under emergency timeline pressure instead of a planned timeline.
PCG has been executing legacy software rescues since the late 1990s. The pattern is consistent across hundreds of engagements: businesses that initiate the rescue before a system failure spend less, lose less staff time, and arrive at the migration decision with better information. Businesses that wait until the application has broken pay a premium for compressed timelines and reduced operational flexibility. The technical work is the same. The business cost is not.
How does this differ from a planned Visual FoxPro migration?
Both engagements end with the buyer owning a clear path forward. The starting point is different. A planned migration starts with the strategic question of whether to migrate, integrate, or replace, because the business already understands what the existing application does. An emergency rescue starts earlier in the process, because the business does not yet have that understanding and cannot answer the strategic question without it.
The deliverables also differ. A planned migration produces a migrated application, the documentation package, and a reconciliation report. An emergency rescue produces a source code archive, a written application inventory, and an assessment of the next-step options. The rescue deliverable can stand on its own. Buyers who complete the rescue and decide not to proceed to migration still own a document that allows them to operate the existing system more reliably than they could before.
The two engagements connect naturally. A buyer who completes the rescue phase has, in effect, completed the discovery phase of a future migration. If the decision is to migrate, the migration engagement begins with the inventory already in hand, which compresses the overall timeline and reduces the total cost compared to a migration that includes its own discovery work from scratch.1
Find out what your Visual FoxPro application actually contains
A free 30-minute consultation, followed by a fixed-fee rescue phase if it is the right next step.
The application runs until it does not. Visual FoxPro lost Microsoft extended support on January 13, 2015, and any Windows feature update, server replacement, or compliance audit can break it without warning. The urgency is not that the system has failed. The urgency is that the business has no path to fix it when it does fail, and no documented inventory of what the application is actually doing. Building that inventory before the system breaks is significantly less expensive than building it under emergency timeline pressure.
Yes, the source code is the single most valuable asset in a rescue situation. PCG reads Visual FoxPro source directly and reconstructs what the application does without needing the original developer's interpretation. The audit phase produces a written inventory of forms, reports, business rules, stored procedures, and external integrations. The buyer ends the audit knowing what they own, which is the foundation for any decision about migration, replacement, or continued operation.
The inventory phase typically completes in 2 to 4 weeks for a mid-sized Visual FoxPro application with the source code available. Larger applications, applications with hundreds of reports, or situations where the source code must be retrieved from old backup media extend that timeline. PCG provides a fixed-fee quote for the inventory phase based on the initial assessment, separate from any subsequent migration decision.
Nothing changes in the production system during the inventory phase. PCG works against copies of the source code and the database, not the live system. Operational staff continue using the application exactly as they did before the rescue began. The first time the live system is touched is during migration cutover, and even then PCG runs in parallel rather than replacing the production system in a single weekend.
An emergency rescue starts with source code recovery and application inventory because the business does not yet know what it owns. A planned migration starts with the strategic question of whether to migrate, integrate, or replace, because the business already understands the existing application. The rescue is the first deliverable. The migration decision comes after. Buyers who go through the rescue phase often discover that they have a clearer migration scope than they would have with months of internal investigation.
Allison Woolbert, CEO and Senior Systems Architect, Phoenix Consultants Group
Allison Woolbert is the principal of Phoenix Consultants Group, the custom software consultancy founded in 1995. PCG has executed legacy software rescues across Microsoft Access, Visual FoxPro, Visual Basic 6, dBase, Clipper, and other discontinued platforms for industrial, manufacturing, environmental services, and healthcare staffing clients since the late 1990s.
Allison leads PCG's discovery and architecture practice, where the first deliverable on every legacy engagement is an honest inventory of what the existing application actually does and what it should do next. The principle is consistent across hundreds of rescues: businesses recover their options when they recover their documentation, not when they commit to a migration.
1 Phoenix Consultants Group, Visual FoxPro Migration in 2026: The Real Risks and Real Path Forward.
2 Phoenix Consultants Group, My Developer Disappeared: What Do I Do?
3 Microsoft, Visual FoxPro 9.0 product lifecycle: mainstream support ended January 12, 2010; extended support ended January 13, 2015. learn.microsoft.com/en-us/lifecycle/products/microsoft-visual-foxpro-90
4 Microsoft Learn, Visual FoxPro Frequently Asked Questions: confirmation of 2 GB per-table limit and 32-bit architecture.
This article is informational and reflects PCG's experience executing emergency legacy software rescues since the late 1990s. It is not legal, regulatory, or financial advice for any specific situation. For guidance tailored to a particular Visual FoxPro application, contact Phoenix Consultants Group directly. PCG was founded in 1995.
Custom software migration cost in 2026 is driven by four compounding variables: source data complexity, target platform choice, integration scope, and historical data volume. PCG provides a fixed-price estimate after a source audit, not before. The free initial consultation determines whether the audit is the next sensible step.
Most CFOs encounter the question of migration cost the same way: a legacy system is failing, a vendor proposal arrives with a number attached, and there is no framework for assessing whether that number reflects the actual work required. The number itself is not the problem. What CFOs lack is a framework to evaluate it. This article describes the four variables that move a migration cost up or down, how a CFO should think about each one, and how PCG arrives at a fixed-price estimate after the source audit phase.
Phoenix Consultants Group has executed conversion, migration, and integration projects since 1995, with zero data loss on record across hundreds of completed engagements.1 The patterns described below come from that production history. The framework applies equally to a Microsoft Access database moving to SQL Server, a Visual FoxPro application replaced by a custom .NET Core 8 build, an Excel-based operational system consolidated into a relational database, or a legacy ERP migration to a modern platform.
What are the four variables that drive custom software migration cost?
Every custom software migration cost decomposes into four categories. A change in any one of them moves the total project number. CFOs who understand the four can interpret a vendor proposal, identify what assumptions the vendor has made, and ask the right questions before signing. The categories are not theoretical. They map directly to the work a migration team performs from the source audit through to post-cutover reconciliation.1
Source data complexity
Schema documentation, data quality, referential integrity, undocumented relationships, and the number of source systems involved.
Target platform choice
SQL Server on-premise, Azure SQL, AWS RDS, or another destination. Each carries different schema, security, and operational requirements.
Integration scope
How many systems must connect to the destination, whether APIs exist, and whether the connection is real-time or batch.
Historical data volume
Record counts, years of history retained, physical storage size, and the number of fields requiring transformation per record.
The four variables are not independent. They compound. Higher source complexity increases the time required to map fields to the target platform. Larger integration scope extends the testing window. A bigger historical data volume amplifies the impact of every transformation rule that must run against every record. Any vendor estimate that addresses only one or two of the four is incomplete by definition.
How does source data complexity change the cost equation?
Source data complexity is the single variable that most often determines whether a migration estimate proves accurate. The first signal of complexity is whether the source schema is documented. A SQL Server database with current entity-relationship diagrams, defined foreign keys, and a consistent naming convention is materially less expensive to migrate than an Access database where relationships exist only as conventions inside application code that has been modified by three developers over fifteen years.
Data quality is the second signal. Source systems that enforce required fields, constrained value lists, and referential integrity at the database level produce migration-ready data. Legacy systems that allowed users to type free text into fields that were supposed to be controlled vocabularies produce data that must be cleaned before migration. The cleaning is part of the migration work, and it is unavoidable: data that arrives at the destination without cleaning behaves incorrectly in the new system because the new system does enforce the rules the old one did not.1
The third signal is the number of source systems. A migration from one consolidated Access database is simpler than a migration that must integrate three departmental spreadsheets, an Access database, and a legacy desktop application into a single destination schema. Each source system requires its own audit, its own mapping, and its own transformation rules. The total work does not scale linearly with the number of sources because conflicts between sources must also be reconciled.
Documented and clean
Current schema documentation, defined foreign keys, enforced data types, consistent naming, single source system, controlled vocabularies for code fields.
Undocumented and inconsistent
No schema documentation, relationships embedded in application code, free-text fields where structured data was expected, multiple source systems with overlapping data, original developer unavailable.
How does the target platform choice affect total project cost?
The destination platform sets the upper bound on what the migration can achieve and the lower bound on what the migration must build. PCG currently builds on .NET Core 8 with SQL Server as the default stack, with deployment options that include on-premise SQL Server, Azure SQL Database, and AWS RDS. Each option carries different operational and cost implications that the CFO should evaluate as part of the migration planning, not after it.
SQL Server on-premise places the data inside the buyer's infrastructure. There are no recurring per-database hosting fees, and the data location decision is fully controlled by the organization. The tradeoff is that the buyer remains responsible for backup, patching, and hardware capacity planning. For organizations with existing Windows server infrastructure and IT staff already managing SQL Server, on-premise often produces the lowest total cost of ownership over a 5 to 10 year horizon.
Azure SQL Database and AWS RDS shift operational responsibility to the cloud provider. Backup, patching, and hardware capacity are handled by the platform. The tradeoff is a recurring monthly cost that scales with database size and compute capacity. For organizations without existing Windows server infrastructure, distributed teams that need multi-location access, or businesses scaling rapidly enough that hardware procurement becomes a constraint, cloud hosting often justifies the recurring cost.2
The target platform choice also determines the schema constraints the migration must satisfy. A SQL Server destination enforces referential integrity, data types, and constrained value lists that the source system may not have enforced. The migration must conform every source record to the destination schema before loading. This conformance work is part of the migration cost, and it varies with how far the source diverges from the destination requirements.
How does integration scope move the number up or down?
Integration scope is the variable most often underestimated in vendor proposals. The relevant question goes beyond whether the destination will receive data from the source. Buyers must also define which other systems must exchange data with the destination after migration is complete, on what frequency, in which direction, and under what reliability requirements.
A migration that produces an isolated destination database, with no ongoing connection to other systems, carries no integration scope. The migration completes, the new application runs, and operations continue. This is the simplest scenario. It is also the least common in 2026, when most mid-market businesses operate with multiple connected systems that exchange data continuously.
A migration that requires connection to one external system through a documented REST API carries moderate integration scope. PCG's work is to write the connector, define the data flow direction and schedule, build the error handling for connection failures, and document the integration for ongoing support. Modern systems with current API documentation produce predictable integration timelines.
A migration that requires connection to a legacy system without an API, or that requires PCG to build an API for the new system to expose data externally, carries the highest integration scope. PCG accesses the underlying database directly using ODBC or native drivers when no API exists, or builds custom extraction layers for systems that expose no programmatic interface at all. Legacy applications built before REST APIs existed are not a barrier to integration, but the work of building the integration layer is part of the migration cost.1
The four variables compound. A migration with high source complexity, a cloud destination, three integrated systems, and twenty years of historical data is not four times as expensive as a simple migration. The interactions between variables produce a multiplier effect that only a source audit can quantify.
How does historical data volume influence the cost of a migration?
Historical data volume affects migration cost through three mechanisms that compound. The first is processing time. Every record in the source system must be read from the source, run through validation and transformation rules, and then loaded into the destination. A migration of one million records runs longer than a migration of ten thousand records, and the longer the migration runs the more rigorous the parallel testing must be to confirm the production cutover will complete within the available maintenance window.
The second mechanism is data quality remediation. Larger historical datasets carry more accumulated data quality issues simply because they contain more records, more years of variation in how data was entered, and more legacy decisions about field meanings that have changed over time. A migration that retains twenty years of history carries more cleaning work than a migration that retains five.
The third mechanism is reconciliation. Post-migration reconciliation compares source record counts and key field values against destination records.1 The reconciliation effort scales with data volume because the reports must produce meaningful comparisons across the full dataset, not against a sample. Reconciliation surfaces silent failures that pre-migration validation missed, and the time required to investigate and resolve any discrepancies scales with the size of the dataset being reconciled.
A CFO who is planning a migration should ask the operational team a specific question before requesting a vendor estimate: how many years of historical data must move, and how many years could remain accessible in read-only archive without active migration? Retaining only the active operational window in the new system, while preserving the historical archive in a read-only location, often produces a meaningful reduction in migration cost without compromising business continuity.
What hidden costs do CFOs underestimate when scoping a migration?
The line items that appear in a vendor proposal are the visible costs. Hidden costs are the operational realities that the proposal does not invoice but that absorb staff time, defer revenue, or extend the project beyond the contracted window. Four hidden costs recur across migration projects.
The first hidden cost is internal staff time during discovery and validation. A migration project requires operational subject matter experts to answer questions about field meanings, business rules, and data quality decisions. The time spent in interviews, mapping reviews, and user acceptance testing is real labor that the vendor proposal does not charge for. CFOs who budget only the vendor cost miss the internal cost, which is typically 15 to 30 percent of the project effort when measured in hours.
The second is data quality remediation. Source systems that have been running for years without enforced rules accumulate quality issues. The migration surfaces every issue. Some are minor and can be corrected during transformation. Others require operational decisions: which value is correct when the same customer record exists twice with slightly different addresses, or which date is authoritative when two systems disagree. These decisions require operational judgment and absorb time.
The third is integration recertification with downstream systems. If the destination system feeds data to a reporting platform, a regulatory submission, or a partner system, those downstream consumers must validate that the post-migration data still meets their requirements. This validation is sometimes documented as a separate compliance task, and it carries its own timeline.
The fourth is post-cutover operational learning. New systems behave differently from the old one. Staff who have used the legacy system for years will need time to adapt to new workflows, even when the new system is objectively better. Training is part of the vendor cost, but the productivity dip during the first weeks of operation is not. CFOs who account for this learning curve in their financial projections see fewer surprises in the first quarter after cutover.
Speak directly with the engineer who would scope your migration
A free 30-minute consultation to evaluate which of the four variables apply to your situation. No obligation, no sales handoff.
How does PCG estimate a migration project, and when in the process does the number get fixed?
PCG does not quote a fixed price before the source audit. The reasoning is operational, not commercial. A migration estimate produced before the source audit is either inflated to cover unknown risks or committed against assumptions that may not match the actual source system. Neither outcome serves the buyer. Information gathered during the source audit is what makes a fixed-price estimate accurate.
PCG's process moves through five phases. Each phase produces a deliverable the buyer reviews before the next phase begins, and the fixed-price commitment for the full migration is made at the end of the second phase, not at the beginning of the first.1
Before the fixed price is set
Source audit phase
- Free initial consultation with the engineer who would scope the project
- Complete source schema inventory: tables, fields, relationships, constraints
- Data quality assessment with identified remediation requirements
- Source-to-destination field mapping specification
- Estimated transformation rule count and complexity
- Documented integration scope with named external systems
After the audit completes
Fixed-price commitment
- Fixed-price estimate for full migration based on actual measured scope
- Project timeline with phase-by-phase milestones
- Defined acceptance criteria for each milestone
- Documented assumptions and dependencies
- Change order process for scope additions identified later
- Reconciliation report deliverable at project completion
A vendor who quotes a fixed price without conducting a source audit is quoting against assumptions, not against the actual system. CFOs should treat that quote as preliminary, not committed.
PCG has been executing migrations on this methodology since 1995. Hundreds of Microsoft Access to SQL Server migrations, dozens of legacy ERP transitions across Sage, Great Plains, and Peachtree platforms, and operational system replacements for industrial, environmental, healthcare staffing, and airport operations clients all follow the same audit-first sequence. The fixed-price commitment is the output of the source audit, never the input to it.1
Find out which variables apply to your migration
A free 30-minute consultation, followed by the source audit if it is the right next step. The fixed-price estimate comes after the audit.
A migration estimate depends on what the source system actually contains, not on what the documentation claims it contains. The source audit measures real data volume, identifies undocumented relationships, and surfaces data quality issues that need correction before migration. A price quoted before the audit either includes a large risk premium to cover unknowns or commits PCG to a scope that may not match reality. After the audit, PCG provides a fixed-price estimate based on the actual work required.
PCG reverse-engineers the source schema directly from the database structure rather than relying on documentation. The audit maps every table, field, relationship, and constraint from the database itself. The absence of the original developer extends the audit phase but does not prevent a complete and accurate migration.
Yes. PCG's methodology runs the migration against a parallel destination environment while the source system remains the operational master. The team continues working in the existing system during migration and validation. Cutover happens only after reconciliation confirms accuracy and the buyer's team approves the results.
A fixed-price quote commits the vendor to deliver the agreed scope for a defined number. A time-and-materials quote charges by the hour with no upper bound. Fixed-price is preferable for migration projects because it forces the vendor to do the source audit work upfront. PCG provides fixed-price estimates after the source audit so the buyer knows the cost before committing to the migration.
Three safeguards prevent data loss. Pre-migration validation catches records that would fail destination schema rules before they move. A quarantine log holds failed records for review rather than silently dropping them. Post-migration reconciliation compares source record counts and key field values against destination records. No migration is considered complete until reconciliation confirms zero unresolved discrepancies.
Three deliverables: the migrated data in the destination system, the migration documentation package, and a reconciliation report confirming data integrity. The documentation includes the source audit results, the field mapping specification, the transformation rules applied, the quarantine log with resolution notes, and the post-migration reconciliation report. The package provides a complete audit trail of what moved and how it was transformed.
Yes. PCG's phased methodology produces stable checkpoints at the end of each phase. The source audit deliverable is usable on its own. The schema mapping and transformation rules document remains valid for later resumption. The parallel environment can be paused and reactivated. A pause adds re-validation time when work resumes but does not invalidate earlier phases.
Allison Woolbert, CEO and Senior Systems Architect, Phoenix Consultants Group
Allison has been executing data conversions, migrations, and integrations since the early 1980s, predating PCG's founding in 1995. Her migration work spans legacy database transfers for ExxonMobil, Nabisco, and AXA Financial, EPA compliance system deployments, healthcare staffing platform migrations, and hundreds of Access-to-SQL-Server migrations across 30 years of database work.
The consistent finding across those engagements: migrations that fail do so at the validation stage, not the transfer stage. Data that arrives at the destination without pre-migration validation and post-migration reconciliation looks complete until something downstream breaks because a required field was silently dropped. PCG does not skip those steps.
1 Phoenix Consultants Group, Conversion, Migration and Integration service page. phxconsultants.com
2 Phoenix Consultants Group, Custom .NET Software Development service page. phxconsultants.com
This article is informational and reflects PCG's experience executing custom software migrations for mid-market businesses since 1995. It is not legal, regulatory, or financial advice for any specific situation. For guidance tailored to a particular migration scope, source system, or compliance context, contact Phoenix Consultants Group directly.
Custom .NET software development means building a business application from scratch on Microsoft's .NET Core 8 platform with SQL Server, designed around your operational workflow rather than forcing that workflow into an off-the-shelf product. For a mid-sized business, it is the path chosen when commercial software cannot match real operational requirements without expensive workarounds.
Most mid-market CEOs and CFOs first encounter .NET as a line on a developer's resume or a checkbox on a vendor's capability list. What they rarely receive is a plain answer to what the technology actually does for a business, when it makes sense to commission a custom application instead of purchasing an off-the-shelf product, and what the project looks like from the buyer's perspective. This article addresses those three questions in the order a buyer typically raises them.
PCG has been building .NET applications since the platform's first public release, with project records dating to 1995 when Phoenix Consultants Group was founded. The firm has delivered more than 500 production applications across industries that include environmental remediation, industrial operations, healthcare staffing, and airport ground operations.1 The observations below are drawn from that production history rather than from theoretical analysis.
What does custom .NET actually mean when you are not a developer?
.NET is a software platform built and maintained by Microsoft. It functions as the foundation on which a developer constructs your application. The current production version is .NET Core 8, released in November 2023 as a long-term support build with security and feature updates committed through November 2026.2 When a business owner hears that an application is built on .NET, the practical translation is a specific set of tradeoffs: mature tooling, a broad pool of available developers, native integration with Microsoft products, and the ability to run on Windows, Linux, or macOS servers depending on the deployment.
The word "custom" is what makes this category different from buying QuickBooks or signing up for a SaaS subscription. A custom .NET application is written specifically for your business: your workflows, your terminology, your reporting requirements, your integrations with the other systems you already run. The application is not configured from a template. Every screen and every rule is designed and built from the requirements your operational team writes down during discovery.
For a mid-sized business, the .NET stack typically includes four components working together. ASP.NET Core handles the application layer, the code that determines what happens when a user clicks a button or submits a form. SQL Server stores the operational data: customers, orders, inventory, audit logs, and the records the business runs on. Razor Pages produces the screens the user sees in the browser. JavaScript enhancements add the interactive behavior, such as live form validation and real-time filtering of data grids, that keeps the application responsive under normal use.1
Platform
Microsoft .NET Core 8, the long-term support release. Backed by Microsoft's published roadmap through November 2026.
Database
SQL Server on premise for single-site deployments, Azure SQL or AWS RDS for multi-location applications.
Interface
Razor Pages server-rendered HTML with JavaScript enhancements for the interactive parts of the screen.
When does a mid-sized business need custom .NET instead of off-the-shelf software?
Off-the-shelf software is almost always the right starting point. If a packaged product matches the work, the recommendation is to purchase it. The conversation about custom development begins when commercial software no longer accommodates the operation and the workarounds begin costing more than the original license. Four recurring situations lead mid-sized businesses to commission a custom .NET application.
The first is when the business operates on rules that no commercial product understands. An environmental remediation firm tracking soil samples against a state DEP audit schedule, a physician staffing company managing credentials across multiple facilities, an airport operator tracking ground support equipment across terminals: each of these has compliance, reporting, or operational rules specific enough that no general-purpose platform encodes them correctly. Operational staff end up working primarily inside spreadsheets that sit alongside the supposedly central system, performing the calculations the platform cannot.
A second pattern is when integration cost exceeds the cost of the software itself. Three or four operational systems run alongside each other without exchanging data. Staff re-enters the same data into each one. Reports take a week to compile because the underlying numbers reside in separate systems. Off-the-shelf middleware can sometimes bridge this gap. When it cannot, or when the middleware vendor's pricing exceeds the cost of developing a connected application, custom becomes the more economical path.
A third scenario is when the existing legacy system is failing and no commercial replacement exists. Visual Basic 6 applications, Microsoft Access databases, Visual FoxPro systems, and custom Delphi or PowerBuilder tools built in the 1990s and early 2000s continue to run mid-market production work in 2026. When the original developer is no longer available, the source code is missing, or the platform itself has reached the end of its development runway, rebuilding on .NET is often the only path forward.3
A fourth situation, increasingly common in 2026, is when a business requires AI-driven reporting against operational data and commercial products cannot connect to the database that runs the business. PCG's FireFlight Data Framework, built on .NET Core 8 with SQL Server, provides AI natural language reporting in which staff query live operational data in plain English without exporting to a separate analytics tool.1
The decision is not buy or build. The decision is whether the cost of working around a packaged product has grown larger than the cost of building software that fits the operation. By the time leadership reaches this question, the answer is typically already evident in the daily workarounds.
What does the .NET technology stack include and why does it matter for the buyer?
Most buyers do not need to understand what ASP.NET Core does at the code level. They do need to understand what choosing this stack commits them to over the next 5 to 10 years. The decisions made now about platform, database, and hosting determine which future changes will be straightforward and which will be expensive. The section below presents a non-technical view of the four components, what each contributes to the business, and what would change under a different stack.
ASP.NET Core 8
The framework that handles requests from the browser, executes business logic, and returns responses. Cross-platform and maintained by Microsoft. The practical result for the buyer is that the application can run on Windows or Linux servers without rewriting code.
SQL Server
The repository for all business data. Provides full transaction logging, rollback capability, row-level security, and complex reporting. Audit and compliance reviews proceed faster because the database itself can respond to the auditor's queries.
Razor Pages
The screens the user interacts with. Server-rendered for performance and accessibility. The application loads quickly, performs well on older devices, and remains functional when network conditions are degraded. No heavyweight JavaScript framework subject to breakage on browser updates.
On-premise or cloud
The application can be deployed on a Windows server in your facility, on Azure, on AWS, or on a private hosting provider. Data location remains a business decision driven by compliance and operational requirements, not by vendor constraint.
The combination matters because it determines what is easy to change later and what is expensive. A .NET Core 8 application with a clean separation between data access, business logic, and presentation can have its interface rewritten in five years without touching the database. The SQL Server schema, designed during the discovery phase, can absorb new fields and tables without breaking the screens that already query it. These are not abstract architectural virtues. They are the reason a custom application built in 2026 should still be running, with sensible updates, in 2036.1
What does a custom .NET project actually look like from the buyer's perspective?
The single largest source of disappointment in custom software engagements is rarely the technology itself. It is the gap between what the buyer anticipated the project would require and what the project actually demanded of the buyer's team. PCG conducts every .NET engagement through four phases. Each phase produces visible deliverables the buyer reviews before the next phase begins.
The first phase is discovery. PCG works with operational staff and technical leadership to document what the application must do, what systems it must integrate with, and what is explicitly out of scope. Discovery is conducted as a working session, not a questionnaire sent for the client to complete in isolation. The deliverables are a requirements document and a scope definition that both teams sign before any architecture work begins.1
Architecture and design review is the second phase. PCG designs the SQL Server schema, the application architecture, and the screen wireframes. A working prototype of the primary screens is built and reviewed by the buyer's team before any production code is written. This is the moment to find out that the workflow on the screen does not match how the business actually operates. Catching that mismatch on a wireframe takes an hour, while the same correction after the application has been built and deployed takes weeks of rework.
Development is the third phase and the longest part of the engagement. PCG builds the application in regular milestones, sharing working demonstrations on a recurring cadence with the buyer's team. The buyer's operational staff provides feedback during the build, not at the end. Source control, peer code review, and documented development standards are in place from day one.1
Testing, deployment, and post-launch support is the fourth phase. The application is tested against production-representative data volumes, reviewed for security, validated against the original requirements document, and deployed. Training is delivered by the engineering team. Post-launch support is provided by the same engineers who built the application.
What the buyer commits to
From discovery through launch
- Operational staff time during discovery interviews
- Review of wireframes and working prototype before development
- Feedback during milestone demonstrations
- User acceptance testing against real workflows
- Training participation from the team that will actually use the application
What PCG delivers
At project completion
- Production .NET Core 8 application on SQL Server
- Full data ownership with export capability
- Schema reference and architecture notes
- Operational runbook for ongoing administration
- Test coverage on critical business logic
- Trained operational team and a deployment that runs
A concrete example illustrates the pattern. PCG's Ground Support Equipment (GSE) management system was developed for an airport operator running fleets of tugs, belt loaders, air starters, and ground power units across multiple terminals. The previous tracking method consisted of whiteboards, spreadsheets, and manual check-in logs distributed across departments. The custom .NET Core application consolidated all of that into a centralized command center for fleet status, parts inventory, preventive maintenance scheduling, and personnel assignment. Maintenance-related downtime declined by 40 percent through predictive scheduling. Inventory visibility moved from fragmented records to 100 percent coverage across the equipment fleet.4
Speak directly with the engineer who would build it
A 30-minute consultation to assess whether custom .NET is the right fit for your situation. No obligation, no sales call.
What goes wrong when custom .NET is done badly?
Credibility on this topic comes from naming the failure modes openly, not from listing features. Four common failure patterns appear in custom .NET projects that go poorly, and each carries a recognizable signal a buyer can identify before signing the contract.
The first failure is skipping discovery. A vendor quotes a fixed price from a one-page intake form, the contract gets signed, and development begins against assumptions that were never validated with the people who will actually use the application. Six months later the system goes live and the operational team rejects it because the workflow on the screen does not match how the work is actually performed. Recovery from this point costs more than the original budget. The signal to recognize in advance: a vendor proposal with no discovery phase line item, or one that compresses discovery into a single week before development starts.
Tightly coupled architecture is the second failure mode. A developer builds the application as one large block of code where the database access, business rules, and screen rendering are intermingled. The application works when it ships. Two years later, adding a single new report requires changes across the entire codebase, and any modification carries a high risk of breaking something else. What to look for in advance: no architectural documentation in the proposal, no mention of layered design, no commitment to separating data access from business logic.
Data lockout is a third common failure. The application ships, the buyer pays the invoice, and there is no clean way to get the operational data back out. Migrating to another system later means manual re-entry or expensive custom export work, and in the worst cases the data is held hostage against renewal. To spot this in advance: no explicit clause stating that the buyer's data is exportable in standard formats at any time, with documentation of how it is structured.
Absent test coverage on critical business logic is the fourth pattern. The application calculates payroll, compliance reports, inventory levels, or any other figure where an incorrect result carries real consequences. No automated tests verify that the calculations remain accurate as the codebase evolves. A change to one part of the application silently breaks a calculation elsewhere, and the error often goes undetected until a customer or regulator identifies it. The warning signal in a proposal: testing treated as a phase at the end of the project rather than a practice running throughout development.5
What does PCG deliver at the end of a custom .NET engagement?
The technology platform is a means. What matters at delivery is the business outcome.
A PCG custom .NET engagement closes with a defined set of deliverables. Each one exists because the absence of any one of them is what creates the failure modes described above.
- Production .NET Core 8 application on SQL Server, deployed and running in the buyer's environment, configured for the workflow the discovery phase documented.
- Full ownership of your data, with export capability. Your operational data is yours and can be exported in standard formats at any time. There are no usage restrictions on your own data and no barrier to getting it out.1
- Modular architecture with layered design. Data access, business logic, and presentation separated so changes to one layer do not require rebuilding the others. New features can be added as modules without touching existing functionality.1
- Secure authentication and role-based authorization with audit trails. A login system with role-based controls that enforce what each user can see and do. Sensitive operations logged with user identity, timestamp, and before/after state.1
- Schema reference, architecture notes, and operational runbook. Documentation written to give you full visibility into how your data and workflows are structured.1
- Test coverage on critical business logic. Unit tests on the calculations the application's correctness depends on. Integration tests verifying that workflow transitions produce expected results.1
- Version-controlled source and documented deployment process. Releases are reproducible and reversible, so updates and rollbacks are reliable.1
A custom .NET application is a capital asset. Treating it as anything less, at any phase of the engagement, is how a project that starts as a 12-month investment turns into a 5-year recurring cost.
Determine whether custom .NET is the right path for your business
A free 30-minute consultation with the engineer who would scope the project. No obligation, no sales handoff.
Low-code platforms work well for simple forms, approvals, and lightweight workflows that fit a vendor's template. Custom .NET is the right path when business logic is complex, integrations are deep, data volumes are high, or the application has to operate offline or against industrial hardware. Low-code platforms also carry per-user licensing and vendor lock-in that custom .NET avoids.
No. .NET Core 8 is cross-platform and runs on Windows, Linux, and macOS servers. Web-based .NET applications are accessed through any modern browser regardless of operating system. Desktop .NET applications still target Windows, but the majority of mid-market PCG deployments are browser-based and platform-independent for end users.
Your data is yours and fully exportable at any time. The application is delivered with a schema reference, architecture notes, and an operational runbook documenting how your data and workflows are structured. PCG hosts and maintains the application as an ongoing support relationship rather than a dependency, so you always retain access to and control of your own data.
Yes. PCG builds .NET applications with direct integrations to QuickBooks, Sage, Microsoft Dynamics, and other ERP platforms through their native APIs or database connections. Integration scope is defined during the requirements phase: which data flows between systems, in which direction, on what schedule, and with what validation rules.
Timeline depends on scope, integrations, and how well the existing process is documented before development starts. Discovery typically runs 2 to 4 weeks. A focused departmental application with a single integration moves through development faster than a multi-module operational platform with five external systems connected. PCG provides an estimate after the discovery phase, when the requirements are known, rather than committing to a number before the work has been scoped.
The engineer assigned to your project handles your technical questions directly. There is no account manager translating between your team and a remote development pool. PCG has been building .NET applications since the platform's initial release and has delivered more than 500 production applications since the firm was founded in 1995.
Modular architecture is one of the quality standards PCG applies to every .NET codebase. Applications are built in layers and modules so new functionality can be added without rebuilding existing features. A common pattern is launching with the core operational module first and adding integrations, reporting, and adjacent workflows in subsequent phases.
Allison Woolbert, CEO and Senior Systems Architect, Phoenix Consultants Group
Allison has been building .NET applications since the platform's initial release, with a broader software development background extending to the early 1980s. Her work includes enterprise operational systems for ExxonMobil and Nabisco, compliance platforms for environmental regulatory operations, healthcare staffing applications, and the FireFlight Data Framework, PCG's proprietary .NET Core 8 platform deployed across active client engagements.
Phoenix Consultants Group was founded in 1995 and has delivered more than 500 production applications. The principle behind every PCG engagement: the technology platform is a means, and what matters at delivery is the business outcome.
1 Phoenix Consultants Group, Custom .NET Software Development service page. phxconsultants.com
2 Microsoft, .NET 8 release notes and support policy. .NET 8 is a Long Term Support release with support through November 2026.
3 Phoenix Consultants Group, Visual Basic 6 Migration to .NET (Tech Wisdom). phxconsultants.com
4 Phoenix Consultants Group, Case Study: Ground Support Equipment (GSE) Management System for Airport Operations. phxconsultants.com
5 Phoenix Consultants Group, True Cost of Technical Debt: An Executive Guide. phxconsultants.com
This article is informational and reflects PCG's experience building custom .NET applications for mid-market businesses. It is not legal, regulatory, or technical advice for any specific situation. For guidance tailored to a particular operational, compliance, or procurement context, contact Phoenix Consultants Group directly. PCG was founded in 1995.
Is Corel Paradox really still in maintenance mode in 2026?
Yes, and the timeline is longer than most buyers realize. Corel Paradox was last updated in any meaningful way with the Hot Fix 1 for X4 release in 2009. Every subsequent Paradox release bundled with WordPerfect Office, including the X5, X6, X7, X8, X9, and 2020 editions, ships with the same internal build number 11.0.0.6761. The product is still sold. It just has not been developed for over fifteen years.
Why does Corel keep selling it? Because there is a long tail of customers who built business applications on Paradox in the 1990s and need access to their data. Keeping the product available is cheaper than supporting the migration. The result is that buyers paying for WordPerfect Office Professional 2020 are running the same Paradox engine that shipped in 2009.
Software does not stop working on the day development halts. The risk profile changes that day, and it keeps changing every year afterward.
What is the Borland Database Engine and why does Paradox depend on it?
The Borland Database Engine, known as BDE, is the runtime layer that every Paradox application uses to read and write .DB files. It was originally built by Borland in the early 1990s as a unified interface for desktop databases, then carried forward through Inprise and Embarcadero ownership of the Delphi and C++Builder tools that depended on it.
In 2014, Embarcadero removed the BDE installer from RAD Studio XE7 and reclassified it as a separate legacy download to make clear that the engine had been deprecated2. The official guidance was to move to FireDAC for new development. BDE was not killed outright, because too many production Paradox applications still depended on it, but it stopped receiving any meaningful updates.
Three properties of BDE matter for buyers thinking about migration:
- 32-bit only. BDE was designed for a 32-bit world and cannot be extended to 64-bit3. Modern Windows runs 32-bit applications through the WOW64 compatibility layer, which is functional but not native.
- No Unicode support. BDE predates the Unicode shift in Windows. Applications that need to handle non-ASCII characters in modern business contexts hit hard limits.
- Concurrent user ceiling. Paradox tables accessed through BDE support a maximum of 255 concurrent users per table3. A growing business eventually hits that ceiling.
What actually breaks first when you stay on Paradox?
Three failure modes show up in the field, in roughly this order. None of them announce themselves before they happen.
BDE configuration drift
Running Paradox on Windows 11 requires moving the IDAPI32.cfg file out of the Program Files directory, setting a NetFile location outside the protected paths, and running BDE Administrator as administrator4. Each Windows feature update can change permission models and break the configuration.
Shared folder lock corruption
Paradox multi-user access depends on a NetFile lock mechanism in a shared folder. When network paths change, antivirus tools quarantine the lock file, or a user reboots mid-write, the lock files corrupt and the database becomes unusable until the locks are cleared manually.
The ObjectPAL talent cliff
Developers fluent in ObjectPAL, the Paradox scripting language, are now in their sixties or retired. Finding someone who can read several thousand lines of ObjectPAL and tell you what the application actually does is a real recruiting problem, and the rate per hour reflects scarcity.
How big is the Paradox installed base in 2026?
There is no clean public count of Paradox installations the way there is for newer platforms, partly because Paradox is bundled with WordPerfect Office and many customers do not separate the two when they report what they use. What is documented is the pattern of buyers actively planning to leave it.
A useful public data point: in 2016, the Queensland Government issued a public tender for Paradox support services covering 12 production databases, with the explicit goal of maintaining them while progressing a program of work to decommission or replace each one5. Public-sector procurement is years behind private-sector pain, which means buyers in industry have been quietly running the same decision tree, just without a public tender to make it visible.
The pattern PCG sees when buyers reach out matches this. A Paradox application built in 1997 or 1998 by one developer is now running a 30-person specialty manufacturer or a 25-person environmental services firm. The application works. Nobody has touched the ObjectPAL code in over a decade. The Windows server it runs on is older than several of the employees who use it daily.
Migrate, integrate, or replace: which path fits your application?
There is no single right answer. The three real options each fit a different situation, and the wrong choice wastes time, budget, and team capacity that the business needs elsewhere.
Migrate the existing application
- ObjectPAL business rules rewritten in C# .NET with SQL Server backing
- Validation logic and referential integrity preserved where they still match the business
- Forms and reports rebuilt in modern reporting tools, not pixel-for-pixel copies
- Cutover module by module, no big-bang weekend
- Right answer when the application does something no off-the-shelf product covers
Replace with a platform
- FireFlight Data Systems modules configured to the workflow
- Data migrated from Paradox .DB files into the platform database
- Deployment measured in weeks, not months
- Right answer when the Paradox system mostly replicates what a configured platform already does
- Best fit when the workflow matches a packaged module rather than a one-off process
A third path, integration, is sometimes the realistic short-term move. Wrap the Paradox system in a modern API layer so new applications can read and write its data without depending on the BDE runtime directly. This buys time but does not retire the risk. It is a bridge, not a destination.
What does a real Paradox to SQL Server migration look like?
PCG has been running custom software projects since 1995. The migration pattern we use on Paradox work has been refined across a long list of legacy rescues. Its shape is consistent across projects. How long each phase takes depends entirely on the application being migrated.
Phase 1: Discovery
Read the .DB files. Read the ObjectPAL scripts. Read the BDE configuration. Inventory every form, report, query, secondary index, referential integrity rule, and external integration. The deliverable is a written inventory of what the application actually does, not what it was supposed to do. This is also where undocumented business rules surface, because they show up in the ObjectPAL code.
Phase 2: Architecture and quote
Decide the target stack, the SQL Server schema redesign, the integration points, the reporting tool, and the cutover sequence. PCG quotes a fixed price on the migration scope at this point. Not time and materials. Fixed scope, fixed price, with explicit assumptions documented.
Phase 3: Build in parallel
The new .NET application is built alongside the running Paradox system. Data flows are mirrored through BDE so the new system can be validated against current production results. Users are not asked to test anything until the team can stand behind the numbers.
Phase 4: Module-by-module cutover
Each functional area moves to the new application with a documented rollback path. Reports run in both systems for a defined period and outputs are compared. The Paradox application stays live until every module has cleared its checkpoint.
Phase 5: Decommission
Final data export, archive of the .DB files and the IDAPI32.cfg configuration for compliance retention, retirement of the BDE runtime. The decommission step is where compliance officers want documentation, and where the migration provides it.
What gets migrated and what gets rebuilt from scratch?
Not every piece of a Paradox application deserves to move. A careful migration is honest about which parts of the legacy system reflect business value and which parts reflect 1998 workarounds.
Business rules
Validation logic, pricing formulas, regulatory calculations, and approval workflows from ObjectPAL that still match how the business operates.
Data
Paradox .DB files convert cleanly to SQL Server via SSIS or scripted ETL through BDE. The schema gets redesigned with real constraints, not just copied.
Reports
Paradox reports rebuilt in SQL Server Reporting Services or a modern reporting tool. Visual parity is the goal where the user community depends on the layout.
UI forms
Form by form rebuild in Blazor, WPF, or a web front end. The new forms match the workflow, not the pixel layout, of the originals.
What if the original Paradox developer is gone?
Most Paradox migrations PCG quotes start exactly this way. The original ObjectPAL developer retired, moved on, or passed away years before anyone thought to capture what they knew about the system. Source files live on a network share that nobody has touched since the last meaningful change, which is usually dated somewhere between 2008 and 2015. Nobody currently on staff can answer a real question about how a particular calculation works.
This is a discovery problem, and it is solved by reading rather than interviewing. The .DB files, the ObjectPAL scripts, the BDE configuration, and the production data together describe what the application does. PCG works through this systematically during Phase 1 and produces a written inventory that the business can sign off on before any rewrite begins. The buyer ends Phase 1 knowing what they own, regardless of whether the migration moves forward.
Talk through your Paradox application with PCG
A 20-minute call. No slide deck. PCG asks about your application, your timeline, and your constraints, then tells you whether migration, replacement, or integration fits.
What drives the scope of a Paradox migration?
Every migration timeline and quote depends on the specific application. Generic answers do not exist in this work, and any quote given before a discovery phase is a guess. Five measurable inputs determine the actual scope of the project.
- Table count and schema complexity: A 15-table Paradox schema with light referential integrity is a different project from a 90-table schema with extensive secondary indexes and validity checks.
- ObjectPAL line count: Total scripting size across all forms, reports, and library files. Some Paradox applications carry thousands of lines of ObjectPAL, others almost none.
- Report count and complexity: Each Paradox report is a small project of its own. Forty reports take longer than ten.
- Integration count: Each external system the application talks to (accounting, payroll, EDI, hardware, file imports) adds discovery and rebuild time.
- BDE deployment footprint: Whether the application runs single-user on one machine or multi-user across a shared NetFile drives both the migration scope and the cutover plan.
PCG runs a fixed-fee discovery phase before quoting the migration itself. The deliverable from discovery is a written inventory of what the application does, the migration approach, and a fixed scope and timeline based on real numbers from the codebase and the BDE configuration. Buyers who go through discovery keep the deliverable whether or not they proceed to migration.
How do you avoid breaking the business during the migration?
Parallel operation is non-negotiable. The Paradox system stays in production while the new SQL Server application is built and validated. Data is synchronized between the two systems during the build phase so the new application can be tested against current production results, not stale snapshots.
Cutover happens module by module. Each module clears a defined checkpoint before the next one moves. A documented rollback path exists at every step. If something fails in the new system, the team rolls back to Paradox in minutes, not in a weekend war room. Big-bang cutover, where a business migrates everything in one weekend, fails often enough that PCG no longer offers it as an option.
31 years of running custom software projects has taught us one thing about legacy migrations: the technical risk is manageable, and the business continuity risk is what actually sinks projects.
Ready to talk specifics?
If your team is weighing a Paradox migration in the next 12 months, PCG can run a fixed-fee discovery and quote a migration path off your actual codebase.
Frequently Asked Questions
Allison Woolbert
Allison Woolbert is the principal of Phoenix Consultants Group, the custom software consultancy founded in 1995. PCG has run legacy migration projects across Microsoft Access, Visual FoxPro, Paradox, VB6, and other discontinued platforms for industrial, manufacturing, and environmental services clients since the late 1990s.
Allison leads PCG's discovery and architecture practice, where the first deliverable on every legacy engagement is an honest inventory of what the existing application actually does and what it should do next.
LinkedIn.
Sources
1 HandWiki. Paradox (database): documentation of the Paradox build history, including the 2009 Hot Fix 1 for X4 and the persistence of build 11.0.0.676 across subsequent releases.
2 Wikipedia. Borland Database Engine: documentation of Embarcadero's 2014 removal of the BDE installer from RAD Studio XE7 and deprecation messaging.
3 Grokipedia. Borland Database Engine: technical documentation of BDE's 32-bit architecture, lack of Unicode support, and 255 concurrent user limit per Paradox table.
4 NKnabe Database Tools. BDE and Windows 11: documented configuration workarounds required to run BDE-based Paradox applications on Windows 11.
5 Australian Tenders. Queensland Government Paradox Support Services Tender, Tender ID 259906, February 2016.
Is Visual FoxPro really unsupported in 2026?
Yes. Microsoft published the lifecycle dates years ago and they have not moved since. Visual FoxPro 9.0 mainstream support ended on January 12, 2010. Extended support ended on January 13, 20151. After that point Microsoft was no longer obligated to issue bug fixes for the language. One exception happened later: a single out-of-band security patch in March 2021 for an ActiveX control vulnerability that affected Windows itself, not VFP as a product2.
Public CVE records list more than a dozen documented vulnerabilities affecting VFP ActiveX controls, including memory corruption issues in MSCOMCTL.OCX and FPOLE.OCX that allow remote code execution3. None of those will be patched in the VFP runtime. They sit there, indefinitely, in every compiled VFP application that uses the affected components.
Software does not stop working on the day support ends. The risk profile changes on that day, and it keeps changing every year afterward.
What actually breaks first when you stay on VFP?
Three failure modes show up in the field, in roughly this order. None of them announce themselves before they happen.
Windows feature updates
Each Windows 11 feature release adjusts the WOW64 32-bit layer, printing subsystem, and font rendering. VFP reports built before 2010 are the most fragile. The application opens fine the morning after the update, then a report fails at month-end.
The 2 GB table ceiling
VFP tables are capped at 2 GB each due to 32-bit addressing4. Inventory, transaction, and audit log tables that grew slowly for years hit the ceiling at the worst possible moment, usually during a busy quarter, and writes start failing without a clean error message.
The talent cliff
FoxPro DevCon ran for the last time in 2009. Developers who built production VFP systems in the late 1990s are retiring. Finding someone who can read 200,000 lines of legacy FoxPro and tell you what it does is a real recruiting problem, and the rate per hour reflects scarcity.
The developers who built these systems are retiring or becoming unreachable. If yours already has, here is what to do when your original developer disappears.
How big is the VFP installed base in 2026?
The market data confirms what PCG sees in the field. According to Enlyft, more than 5,400 companies worldwide still ran Visual FoxPro in 2025, concentrated in IT services, software, and small to mid-sized businesses of 10 to 50 employees5.
Those numbers track with the pattern we see when buyers reach out. A VFP application built in 1998 by a single developer is now running a 30-person manufacturer or a 20-person environmental services firm, and the buyer is one of three people in the building who remembers how it was deployed. The application works. Nobody has touched it in years. The Windows server it runs on is older than several employees.
That last detail is the one that matches every VFP project we have run since the late 1990s. The code is migratable. What gets in the way is that nobody in the building can describe what the code is supposed to do, because the person who wrote it retired in 2017 and the documentation lives on a Word file someone last opened in 2014.
Migrate, integrate, or replace: which path fits your application?
There is no single right answer. The three real options each fit a different situation, and the wrong choice wastes time, budget, and team capacity that the business needs elsewhere.
Migrate the existing application
- VFP code rewritten in C# .NET with SQL Server backing
- Business rules preserved line by line where they still match the business
- Reports and forms rebuilt in modern reporting tools
- Cutover module by module, no big-bang weekend
- Right answer when the app does something no off-the-shelf product covers
Replace with a platform
- FireFlight Data Systems modules configured to the workflow
- Data migrated from VFP DBF files into the platform database
- Deployment measured in weeks, not months
- Right answer when the VFP system mostly replicates what a configured platform already does
- Best fit when the workflow matches a packaged module rather than a one-off process
A third path, integration, is sometimes the realistic short-term move. Wrap the VFP system in a modern API layer so new applications can read and write its data without depending on the VFP runtime. This buys time but does not retire the risk. It is a bridge, not a destination.
What does a real Visual FoxPro to .NET migration look like?
PCG has been running custom software projects since 1995. The migration pattern we use on VFP work has been refined across a long list of legacy rescues. Its shape is consistent. Duration depends on size.
Phase 1: Discovery
Read the source code. Read the production database. Inventory every form, report, stored procedure, scheduled task, and external integration. The deliverable is a written inventory of what the application actually does, not what it was supposed to do. This is also where invented or undocumented business rules surface, because they show up in the code.
Phase 2: Architecture and quote
Decide the target stack, the schema redesign, the integration points, the reporting tool, and the cutover sequence. PCG quotes a fixed price on the migration scope at this point. Not time and materials. Fixed scope, fixed price, with explicit assumptions documented.
Phase 3: Build in parallel
The new .NET application is built alongside the running VFP system. Data flows are mirrored so the new system can be validated against current production results. Users are not asked to test anything until the team can stand behind the numbers.
Phase 4: Module-by-module cutover
Each functional area moves to the new application with a documented rollback path. Reports run in both systems for a defined period and outputs are compared. The VFP application stays live until every module has cleared its checkpoint.
Phase 5: Decommission
Final data export, archive of the legacy system for compliance retention, retirement of the VFP runtime. The decommission step is where compliance officers want documentation, and where the migration provides it.
What gets migrated and what gets rebuilt from scratch?
Not every line of VFP code deserves to move. A careful migration is honest about which parts of the legacy system reflect business value and which parts reflect 1998 workarounds.
Business rules
Validation logic, pricing formulas, regulatory calculations, and approval workflows that still match how the business operates.
Data
DBF files convert cleanly to SQL Server via SSIS or scripted ETL. The schema gets redesigned, not just copied, so the result is faster and easier to maintain.
Reports
VFP reports rebuilt in SQL Server Reporting Services or a modern reporting tool. Visual parity is the goal where the user community depends on the layout.
UI forms
Form by form rebuild in Blazor, WPF, or a web front end. The new forms match the workflow, not the pixel layout, of the originals.
What if the original Visual FoxPro developer is gone?
Most VFP migrations PCG quotes start exactly this way. The original developer retired, moved on, or passed away years before anyone thought to capture what they knew about the system. Source code lives on a network share that nobody has touched since the last meaningful change, which is usually dated somewhere between 2012 and 2018. Nobody currently on staff can answer a real question about how a particular calculation works.
This is a discovery problem, and it is solved by reading rather than interviewing. The source code, the compiled executable, the database schema, and the production data together describe what the application does. PCG works through this systematically during Phase 1 and produces a written inventory that the business can sign off on before any rewrite begins. The buyer ends Phase 1 knowing what they own, regardless of whether the migration moves forward.
Talk through your VFP application with PCG
A 20-minute call. No slide deck. PCG asks about your application, your timeline, and your constraints, then tells you whether migration, replacement, or integration fits.
What drives the scope of a Visual FoxPro migration?
Every migration price and timeline depends on the specific application. Generic answers do not exist in this work, and any quote given before a discovery phase is a guess. Five measurable inputs determine the actual scope of the project.
- Lines of code: Total VFP source size, including stored procedures and triggers. A 50,000-line application is a different project from a 500,000-line one.
- Database size and table count: A 50-table schema with 4 GB of data quotes differently from a 12-table schema with 80 GB of data.
- Report count and complexity: Each VFP report is a small project of its own. Forty reports take longer than ten.
- Integration count: Each external system the application talks to (accounting, payroll, EDI, hardware) adds discovery and rebuild time.
- ActiveX control inventory: Third-party ActiveX controls used in the application drive scope, because each one needs a modern equivalent.
PCG runs a fixed-fee discovery phase before quoting the migration itself. The deliverable from discovery is a written inventory of what the application does, the migration approach, and a fixed scope and timeline based on real numbers from the codebase. Buyers who go through discovery keep the deliverable whether or not they proceed to migration.
How do you avoid breaking the business during the migration?
Parallel operation is non-negotiable. The VFP system stays in production while the new .NET application is built and validated. Data is synchronized between the two systems during the build phase so the new application can be tested against current production results, not stale snapshots.
Cutover happens module by module. Each module clears a defined checkpoint before the next one moves. A documented rollback path exists at every step. If something fails in the new system, the team rolls back to VFP in minutes, not in a weekend war room. The big-bang cutover, where a business migrates everything in one weekend, fails often enough that PCG no longer offers it as an option.
31 years of running custom software projects has taught us one thing about legacy migrations: the technical risk is manageable, and the business continuity risk is what actually sinks projects.
Ready to talk specifics?
If your team is weighing a VFP migration in the next 12 months, PCG can run a fixed-fee discovery and quote a migration path off your actual codebase.
Frequently Asked Questions
Allison Woolbert
Allison Woolbert is the principal of Phoenix Consultants Group, the custom software consultancy founded in 1995. PCG has run legacy migration projects across Microsoft Access, Visual FoxPro, VB6, and other discontinued platforms for industrial, manufacturing, and environmental services clients since the late 1990s.
Allison leads PCG's discovery and architecture practice, where the first deliverable on every legacy engagement is an honest inventory of what the existing application actually does and what it should do next.
LinkedIn.
Sources
1 Microsoft. Microsoft Visual FoxPro 9.0 Lifecycle. learn.microsoft.com/en-us/lifecycle/products/microsoft-visual-foxpro-90
2 Microsoft Download Center Archive. Visual FoxPro 9.0 Service Pack 2 Security Update, March 2021.
3 CVE Details. Microsoft Visual FoxPro: Security Vulnerabilities, CVEs. cvedetails.com
4 Microsoft Learn. Visual FoxPro Frequently Asked Questions: confirmation of 2 GB per-table limit and 32-bit architecture. learn.microsoft.com/en-us/previous-versions/visualstudio/foxpro/mt490124
5 Enlyft. Companies using Microsoft Visual FoxPro, 2025 market data, cited via NetLib Security.