A Midwest industrial construction company was running a core business application on a 13-year-old operating system with Java 7, Tomcat 7, and Crystal Reports. The SSL certificate for their HR and payroll integration was expiring, and the old system couldn’t negotiate modern TLS. The application was undocumented. The team that built it was long gone.
We built a clean Ubuntu 24.04 server and worked through the cascade of issues that come with modernizing a system nobody has touched in years: an internationalization library from 2008 that couldn’t parse modern Java version strings, missing Windows-compatible fonts that Crystal Reports needs for PDF rendering, CIFS mount permissions for document imaging, and LDAP authentication against Active Directory.
We didn’t just move the application. We wrote a comprehensive build guide, operations guide, and migration log. When it was time to cut over, the client’s team cloned the development server to production using our documentation, without any assistance from us.
Zero-downtime migration to a supported, secure platform. The client’s IT team owns the new infrastructure completely. They can rebuild from scratch using our documentation. We also told them not to pursue a Tomcat 10 migration (Jakarta namespace change would require an application rewrite that isn’t worth it). Being honest about what not to do is part of the job.
