Updated
Why Off-the-Shelf Software Has a Ceiling
How to recognize when configuration and workarounds are creating more work than the software removes
A team can spend years using software that no longer quite fits because everyone has learned how to work around it. Reports get delivered and customers receive their invoices, so replacing the system is difficult to justify. The people using it know how much happens in between. Someone exports the data, fixes the fields, checks a spreadsheet, and follows up with the person who knows which numbers to trust.
Some of that is reasonable. A product built for thousands of businesses will leave gaps, and an occasional spreadsheet can be a perfectly sensible way to handle one. Replacing a platform because it makes an annual report inconvenient could create far more work than it saves.
I start paying attention when the workaround becomes a regular requirement. If someone cleans up the same export every Friday, that cleanup needs to be included in the cost of producing the report. If the team needs a separate spreadsheet to know what a customer actually agreed to, that spreadsheet needs an owner and a reliable way to stay current. The company has made those tools part of its system, even if they never appeared in the software budget.
As that layer grows, it becomes worth looking at how much effort goes into making the product fit the business.
The product has an idea of how you work
Every business application makes assumptions. A CRM has a model for a customer, an opportunity, and the stages between the first conversation and a signed contract. A project-management tool has a model for tasks, dependencies, and responsibility. Those models let the vendor build something useful for many customers.
Configuration gives each company room to adjust. You can add fields, set permissions, automate a handoff, or connect another service. A well-configured product can support a lot of variation without becoming difficult to maintain.
The awkward cases tend to appear when an important part of the business doesn't fit those assumptions. A sales opportunity might involve several partners, contracts, regions, and delivery teams. The CRM may have somewhere to put all that information, but putting it somewhere doesn't necessarily make it easy to use. People can end up encoding relationships in notes, custom fields, or names that need a colleague to explain them.
An approval process can develop the same problem. The next approver might depend on the contract's value, the customer's industry, where the work happens, and the requirements that apply there. Each new rule seems manageable. Eventually, changing one rule means checking a collection of exceptions to make sure another team's approvals still work.
In both cases, employees have to understand the business process and the additional conventions needed to represent it in the software. New starters learn both. Changes have to be made in both. That's where the maintenance begins to accumulate.
Follow the work outside the platform
Before comparing replacements, I'd spend time with the people using the current system and follow a few ordinary tasks from beginning to end. The steps they perform outside it usually make the problem easier to describe.
If approvals happen in email and the official workflow is updated afterward, the sequence in the product may be wrong. It may require a decision before the team has enough information to make it, or leave out someone whose approval is necessary. Adding more fields won't resolve a sequence that people have to bypass to get their work done.
If employees copy the same information between two otherwise useful products, the connection deserves attention. A focused integration could remove that work. It also needs someone responsible for failures, because a script that silently stops transferring records gives the team another thing to check manually.
Reporting has its own version. The records are there, but answering a routine business question requires several exports, corrections to inconsistent fields, and a spreadsheet someone rebuilds each month. That can happen when the application is good at recording individual transactions and gives people little help combining them for the decisions they need to make.
These problems can look similar from a distance. All three might produce a request for “better software.” Following the actual work helps establish whether the problem is a workflow, a connection, the reporting setup, or a combination. That distinction matters when you're deciding what to change.
Sometimes the data model needs attention
A security team might need to find every service account owned by someone in Finance, trace which regulated systems those accounts can reach, and check when their credentials were last changed. Some access will be direct. Other access may run through groups, roles, or other accounts.
The information could be spread across an employee directory, cloud platforms, applications, and databases. Bringing those records together is one task. Keeping their relationships accurate as the environment changes is another.
A relational database can represent those connections and answer questions about them. PostgreSQL, for example, supports recursive queries for following relationships across multiple levels. A query involving several steps doesn't establish that the database is unsuitable.
The difficulty may be in the application's model. If every new kind of account or permission requires people to reconstruct how access works, the team is maintaining a lot of logic around the stored records. A graph model is worth evaluating when following these paths is central to the work. Graph query languages such as Cypher support patterns with variable-length paths, which can make that kind of relationship easier to express.
That evaluation still needs the team's real questions and data. An awkward query used during an annual audit may be acceptable. A query that analysts depend on throughout the day warrants more effort. Query performance, the work required to keep the model current, and the team's ability to operate it all belong in the comparison.
This is one possible source of friction. A company whose main problem is an unreliable handoff between two tools may gain very little from changing how it stores data.
Count the work people have absorbed
The subscription invoice is straightforward to compare with another vendor's price. The current system's other costs are spread across people's calendars.
One employee prepares the monthly report. Another checks whether the overnight job completed. A manager reconciles a spreadsheet because the main platform leaves out exceptions. Someone spends time showing new colleagues the steps missing from the documentation.
Those tasks can become so familiar that they disappear from conversations about the software. They still take time, and some grow with the number of customers, employees, or transactions the company handles.
I'd record how often each workaround runs, roughly how long it takes, who maintains it, and what happens when it fails. The estimate doesn't have to imply more precision than the team has. It should be good enough to distinguish a small inconvenience from work that repeatedly delays other things.
Ownership matters as much as time. A script written by someone who has left may still run every night. A spreadsheet may contain sensitive information without the controls used in the main application. One person may understand how to combine the reports, with no documented way for anyone else to repeat the process.
The company already depends on these things. They need documentation, appropriate access, checks for failure, and a way to recover. Leaving them unofficial doesn't remove that responsibility.
Choose a change the problem can justify
Custom software comes with support, security updates, tests, documentation, and future changes. Finding friction in a packaged product is a reason to investigate those tradeoffs carefully.
I'd first check whether the existing setup can support the process with a smaller change. A configuration feature may never have been implemented. An approval step may have outlived its purpose. Employees may be avoiding a feature because nobody showed them how it works. These are worth resolving before a migration.
Where two useful systems fail to exchange information reliably, an integration may be enough. Where one workflow has requirements the broader platform handles poorly, a specialized product may let the company keep the parts that work.
A custom application becomes more reasonable when the mismatch affects important daily work and existing products require substantial compromises. The case is stronger if the process contributes to how the company competes, and the team can explain why simplifying it would lose something valuable. Years of maintaining unofficial tools are evidence of effort already being spent, though they don't by themselves prove that a new application will cost less.
Compare the ongoing obligations as well as the initial project. Keeping the current platform means continuing its manual work and managing its risks. A replacement needs migration, training, and integration. A custom build needs a team or supplier who can maintain it after the launch.
Once the workarounds are visible, that comparison becomes much more concrete. You can identify which work a proposed change would remove, what it would leave in place, and what new work it would create. That gives the company a firmer basis for deciding whether to improve the current setup or build something around a process it genuinely needs to keep.