| Codebase | Lack of automated tests | Lack of automated testing: No safe way to verify if a version jump breaks edge cases. |
| Codebase | Tightly coupled monolith | Monolithic architecture: Tightly coupled code makes incremental upgrades impossible. |
| Codebase | Deprecated core functions (mysql_*) | Deprecated core functions: Reliance on removed features like mysql_* requires massive rewrites. |
| Codebase | Lost institutional knowledge | Lost institutional knowledge: Current team lacks context to safely modernize undocumented legacy logic. |
| Codebase | Stricter typing in PHP 8 | Strict typing enforcement: PHP 8+ turns silent warnings into fatal application crashes. |
| Dependencies | Composer dependency conflicts | Dependency hell in Composer: Updating one package causes unresolvable conflicts with others. |
| Dependencies | Obsolete framework version | Legacy frameworks: The app uses obsolete versions of Zend, CodeIgniter, or Symfony. |
| Dependencies | Abandoned plugins and packages | Abandoned plugins: Tools like old WordPress or Magento extensions are no longer maintained. |
| Dependencies | Vendor code modified in place | Modified external libraries: Vendor code was modified & saved directly into the codebase |
| Dependencies | Custom C extensions | Custom C extensions: Proprietary server extensions compiled for PHP 5.x/7.x require a rewrite. |
| Dependencies | Encrypted vendor code (ionCube) | Encrypted vendor code: Reliance on obfuscated tools like ionCube that lag behind new PHP releases. |
| Business | No visible ROI | Zero visible ROI: Upgrades add no features, making it hard to justify the expense to executives. |
| Business | “If it ain’t broke, don’t fix it” | The if it ain't broke, don't fix it mindset: Stakeholders fear touching a stable system. |
| Business | New features win over tech debt | Competing product priorities: Management prioritizes shipping new features over paying technical debt. |
| Business | Refactoring costs exceed budget | Prohibitive refactoring costs: Total developer hours to rewrite and test exceed the IT budget. |
| Business | No PHP migration expertise | Lack of dedicated PHP expertise: Team has shifted to other languages and lacks migration experience. |
| Infrastructure | Fear of downtime | Catastrophic downtime fears: Upgrading a live system risks revenue loss or customer trust. |
| Infrastructure | Fragile deployment pipelines | Fragile deployment pipelines: Legacy CI/CD scripts break when introduced to modern containers. |
| Infrastructure | No staging environment | No staging environments: Testing directly in production is viewed as an unacceptable risk. |
| Infrastructure | No DevOps expertise | Lack of DevOps expertise: Team doesn't know how to safely proceed with migration. |
| Infrastructure | Outdated server OS | Tethered OS dependencies: The underlying server OS is outdated and doesn't support modern PHP. |
| Infrastructure | Legacy shared hosting | Legacy shared hosting: Projects live on hosting plans that do not offer newer PHP environments. |