The spreadsheet is load-bearing and that is the whole problem. It works, it encodes years of institutional knowledge in formulas nobody has read, and it is maintained by people whose job description says something else. Because it works, it never becomes a project. Because it is not a project, the risk it represents never gets owned.
The abandoned portal is the other half of the same story. It was built to solve a real problem, by a supplier or a contractor, on a stack chosen for delivery speed. It has no tests, no documentation and one original author who is gone. So the organisation stops changing it and starts working around it, a parallel spreadsheet, a manual step, an email that substitutes for a workflow that broke.
The cost never appears as a line item because it is distributed. Fifteen minutes a day across forty people is a substantial number that no budget holder sees, because none of those forty people is spending enough of their own time to raise it. The visible cost only arrives with the error: a duplicate order, a missed renewal, a supplier paid twice.
Integration is where these builds usually go wrong rather than in the interface. The application ends up holding its own copy of customer or product data because integrating with the system of record was harder than importing a file, and from that moment the organisation has two truths and a reconciliation problem. That decision is nearly always made for a good short-term reason and is nearly always the thing that has to be undone later.
And then there is accessibility, which on an internal tool gets deferred and on an external portal gets discovered. A supplier or citizen portal that cannot be used with a keyboard or a screen reader does not fail quietly, it generates phone calls, which are handled by staff, which is the cost the portal was built to remove. For anything touching the public sector it is also a condition of sale rather than a quality goal.