InnoTec Manufacturing, based in Zeeland, Michigan, had been running on an aging on-premise ERP system for over two decades. The system — originally built on classic ASP and SQL Server 2005 — was the backbone of their operations, managing everything from production scheduling to inventory tracking across multiple facilities. Every purchase order, work order, and shipping manifest flowed through this monolithic application that had grown to over 450,000 lines of legacy code.
As the company scaled, the legacy system's limitations became painful. Server maintenance costs exceeded $200,000 annually. Every update required scheduled downtime during production hours. The hardware was nearing end-of-life, and finding developers who could maintain the codebase was increasingly difficult. The three Dell PowerEdge servers running the application were purchased in 2011, and replacement parts had to be sourced from secondary markets when failures occurred.
InnoTec had evaluated off-the-shelf ERP replacements, but every solution they tested required fundamentally changing their manufacturing workflow — the very process that gave them a competitive edge. They needed a partner who could modernize the technology without disrupting the business logic that made them successful. Over 18 months, they had demo'd SAP, Oracle NetSuite, and Microsoft Dynamics 365, investing over $85,000 in consultation fees and proof-of-concept implementations that never reached production.
The technical debt was staggering. The application used VBScript components that hadn't been updated since 2008. Integration with their CNC machines relied on file-drop mechanisms that monitored network shares every 30 seconds. Database queries lacked proper indexing, causing report generation to take up to 45 minutes during peak production hours. The IT team spent an average of 12 hours per week just keeping the system operational, responding to timeout errors and memory leaks that required daily server restarts.
Employee frustration was mounting. Production supervisors couldn't access real-time inventory data from their mobile devices — they had to walk back to desktop terminals running Internet Explorer 8 to check stock levels. The warehouse team maintained parallel spreadsheets because the system's picking interface was too slow to use during high-volume shipping periods. Customer service representatives often gave inaccurate delivery estimates because the system's reporting lag meant they were looking at data that was hours out of date.
The urgency reached a critical point when InnoTec won a major contract with a Tier 1 automotive supplier that would increase production volume by 40%. Their existing infrastructure simply couldn't handle the load. A consultant's capacity assessment estimated they would need to add two more physical servers at $80,000 each, plus another SQL Server license at $15,000, just to support the increased transaction volume. Even then, the system's architectural limitations meant response times would continue degrading.
The risk of doing nothing was existential. InnoTec's CFO calculated that a single day of system failure during peak production would cost approximately $127,000 in lost revenue and contract penalties. The legacy system had experienced three unplanned outages in the previous year, each lasting 4-8 hours. Microsoft had ended extended support for SQL Server 2005 in 2016, meaning security vulnerabilities were no longer being patched. Their cyber insurance provider was threatening to increase premiums by 35% unless they modernized to a supported platform.
InnoTec needed a migration approach that acknowledged a hard truth: this wasn't a system they could simply 'rip and replace.' Twenty years of business logic was embedded in that code — logic that represented hard-won manufacturing expertise and competitive differentiation. Any migration partner would need to understand not just the technology, but the manufacturing domain itself, and have the patience to preserve what made InnoTec successful while modernizing the infrastructure beneath it.
We've solved problems like this before. Book a quick call to discuss your situation — no obligation.
FreedomDev began with a two-week on-site discovery phase at InnoTec's Zeeland facility. Our engineers shadowed floor supervisors, interviewed warehouse managers, and mapped every data flow in the legacy system. This 'go and see' approach — physically walking the plant floor — revealed workflows that weren't documented anywhere. We discovered that the shipping department had developed workarounds using barcode scanners that wrote directly to temporary tables, a process that wasn't mentioned in any technical documentation but was critical to their daily operations.
We designed a parallel-sync architecture: a modern .NET 8 backend on Azure with the same SQL Server data model, running alongside the legacy system. Custom ETL pipelines synchronized data in real-time between old and new, allowing InnoTec to verify accuracy before cutting over. The architecture used Azure Service Bus to handle message queuing, ensuring that any transaction committed in the legacy system would be replicated to the new system within 2-3 seconds. This bidirectional sync meant InnoTec could test the new system with live production data without risking their ongoing operations.
The frontend was rebuilt in React with role-based dashboards for floor supervisors, warehouse staff, and management. Every screen was validated against the legacy system by InnoTec's own team before going live. The entire migration took five months — and the final cutover happened on a Friday evening with zero downtime. We built 47 distinct user interfaces, each optimized for the specific workflows of different roles. The warehouse picking interface was redesigned as a mobile-first progressive web app that worked on the iPad devices InnoTec's team already carried.
One of the most complex technical challenges was handling InnoTec's custom lot-tracking algorithm. Their manufacturing process required tracking raw material lots through multiple production stages, with specific rules about mixing materials from different lots based on quality certifications. This logic was buried in stored procedures with nested cursors and dynamic SQL that had been modified by at least six different developers over the years. Our team spent three weeks reverse-engineering this logic, documenting it in flowcharts, and then reimplementing it in modern C# with comprehensive unit tests covering 89 identified edge cases.
We also addressed integration with their shop floor equipment. InnoTec's CNC machines and automated assembly systems communicated through a mix of OPC-UA protocols, file drops, and even serial connections to older equipment. Rather than forcing InnoTec to upgrade all their machinery, we built an integration layer using Azure IoT Edge that could translate between legacy protocols and modern APIs. This edge computing approach meant the factory floor could continue operating even if internet connectivity to Azure was temporarily lost.
The testing phase was exhaustive. We ran both systems in parallel for six weeks, processing every transaction through both the legacy and new systems simultaneously. Our QA team built automated comparison scripts that checked 127 critical data points on every order, flagging any discrepancies for investigation. We found and corrected 34 data transformation issues during this period — mostly edge cases around handling null values and date formatting that the legacy system had handled inconsistently. InnoTec's team validated 100% of their month-end financial reports against both systems before we gave the green light for cutover.
Security was a major focus throughout the solution. The legacy system had minimal authentication — many users shared a handful of generic accounts. We implemented Azure Active Directory integration with single sign-on, role-based access control at the API level, and comprehensive audit logging that tracked every data modification. All data at rest in Azure SQL Database was encrypted with Transparent Data Encryption, and all data in transit used TLS 1.3. We configured Azure Security Center to provide continuous security posture monitoring and threat detection.
The cutover strategy itself was meticulously planned. On Friday at 5:00 PM, we paused the bidirectional sync and put the legacy system into read-only mode. Our team verified data consistency across 23 critical database tables. At 5:47 PM, we redirected the primary DNS entry to the new Azure-hosted application. By 6:15 PM, all users were successfully accessing the new system. We kept the legacy system running in read-only mode for two weeks as a safety net, but it was never needed. The entire production team arrived Monday morning to find their familiar workflows running faster and more reliably than ever before.
FreedomDev definitely set the bar a lot higher. I don't think we would have been able to implement that ERP without them filling these gaps.
Two weeks embedded at InnoTec's facility, documenting every workflow, data flow, and edge case in the legacy system. Our team of three engineers interviewed 22 employees across all departments and documented 147 distinct business processes. We mapped the complete data model, identifying 89 database tables and 312 stored procedures that were still actively used. This discovery phase also included shadowing production supervisors during two complete shift rotations to understand workflows that occurred during second and third shifts.
Designed a parallel-sync architecture on Azure that could run alongside the legacy system with real-time data synchronization. The architecture review board at InnoTec approved our proposal, which included detailed diagrams showing data flows, integration points, and failover mechanisms. We selected Azure App Service for hosting, Azure SQL Database with Business Critical tier for the data layer, and Azure Service Bus for message queuing. The design included a comprehensive disaster recovery plan with a Recovery Time Objective (RTO) of 4 hours and Recovery Point Objective (RPO) of 15 minutes.
Built custom ETL pipelines to clean and synchronize 20 years of production data between the old and new systems. Using Azure Data Factory and custom C# services, we processed 4.7 million historical records, cleaning inconsistent data formats and resolving 2,341 orphaned foreign key relationships. The pipelines included comprehensive error handling and retry logic, with detailed logging to Azure Application Insights. We established bi-directional sync mechanisms that could handle up to 500 transactions per minute while maintaining data consistency across both systems.
Rebuilt every user-facing screen in React with role-specific dashboards, validated against legacy screens by InnoTec staff. The new interface used Material-UI components customized to match InnoTec's branding, with responsive layouts that worked on devices from 320px mobile screens to 4K desktop monitors. We conducted 12 formal usability testing sessions with actual InnoTec users, iterating on the design based on their feedback. Each major interface component was built in two-week sprints, with InnoTec stakeholders providing sign-off before moving to the next component.
Ran both systems side-by-side for six weeks, comparing outputs and correcting discrepancies before cutover. Every production order, purchase order, and inventory transaction was processed through both systems simultaneously. Our automated testing framework compared 127 critical data points on each transaction, flagging any discrepancies for investigation by our QA team. InnoTec's finance department ran parallel month-end closes in both systems, verifying that all financial reports matched to the penny. This parallel operation gave InnoTec's leadership complete confidence that the new system accurately replicated their business logic.
Executed the final switchover on a Friday evening. By Monday morning, the entire company was running on the new platform. The cutover runbook contained 47 specific steps, each with assigned owners, success criteria, and rollback procedures. Our team of six engineers monitored the cutover in real-time from FreedomDev's office, with two InnoTec IT staff on-site at their facility. We established a war room with a video conference bridge and used a shared dashboard to track cutover progress. The entire process took 2 hours and 18 minutes from start to final verification, completing 43 minutes ahead of our planned schedule.
Make your software work for you. Let's build a sensible solution for your unique business logic.