Skip to main content
ERP Customization

Every Customisation Is a Loan You Repay at Every Upgrade

You borrow capability today and pay interest on it for the life of the system. Good customisation is not a question of what can be built, because nearly anything can. It is a question of which loans are worth taking. We work down a four rung ladder with you, and most requests are settled a rung or two below code.

50+ ERP and software projects. Zero failed projects since 2021.

The Decision Ladder
Illustrative
1
Change the process
Adopt the standard flow the software already ships
No code
2
Configure
Supported settings, rules and fields, no developer
Hours
3
Extend
Custom app on published APIs and documented hooks
Days to weeks
4
Modify the core
Breaks at upgrade, retested and rewritten each release
Every year
Cost and upgrade risk rise with every rung. Rung one is the default until it is ruled out.
4
Rungs before anyone writes code
Days
For a small, specified change
0
Failed projects since 2021
Annual
Cost of any core modification
Why It Matters

The build cost is the deposit, not the price

What a customisation really costs you shows up years later, in upgrade weekends, in regression testing and in the code nobody left alive understands.

The Loan

You borrow capability now and repay it every release

A customisation is not a purchase that ends when the invoice is paid. It is a liability that sits on your system and asks for money again at every upgrade, every integration change and every time a new person has to understand it. That is fine when the capability earns more than the interest. It is a bad deal when the capability is a habit nobody has questioned since the last system. Before we quote anything, we ask the honest question: does this process actually win us business, or is it just how we have always done it. Long standing habit is the single most common justification we hear, and it is not a good one.

  • Every request is priced with its recurring cost, not only its build cost.
  • We name which rung of the ladder the request actually belongs on.
  • Requests that fail the business test are written down and declined, with the reason.
Reviewing the recurring cost of an ERP customisation request against its build estimate
Upgrade Safety

Supported extension points survive. Core changes do not.

The difference between a cheap system and an expensive one is rarely how much was customised. It is where the customisation was put. Work built on published APIs, documented hooks and app level extensions usually comes through an upgrade with a short regression run. Work that edits core files does not, because the vendor moved the code underneath it. Someone has to reapply it, retest it and often rewrite it, every single release. Say it plainly: a core modification made once becomes a cost line in every upgrade budget for the life of the system. We will build one when it is genuinely the only route, and we will tell you the annual number first.

  • Extension points first, core modification only as a last resort.
  • A register of every customisation, so nothing is a surprise at upgrade time.
  • Regression tests written with the change, not after the upgrade breaks.
Developers checking custom code against supported extension points before an ERP upgrade
What Requests Really Are

Six kinds of change a customisation request turns out to be

Almost every request arriving as we need a customisation is one of these. Only the last one usually deserves the word.

🖱
Interface and field changes
Extra fields, renamed labels, hidden clutter, conditional visibility and validation rules. On most modern ERP products this is configuration, not code, and a trained key user can do it in an afternoon.
✅
Workflow and approval rules
Who approves what, at which value, in which sequence, and what happens on rejection. Nearly always supported settings. The hard part is not the build, it is getting your own people to agree on the rule.
📊
Reports and dashboards
A large share of customisation requests are really report requests. The data is already there and the question is how to see it. Met as a report, this costs a fraction of custom code and breaks at no upgrade.
🖲
Document and print layouts
Invoices, quotations, delivery notes, labels and statements in your own format, with the legal and tax lines your jurisdiction requires. Template work, cheap, and it should never touch application logic.
🔗
Integrations to other systems
Moving data to a bank, a marketplace, a shipping provider or a legacy system. Built on published APIs with retries, logging and a named failure path, so a broken connection is visible rather than silent.
🧩
Genuinely new functionality
Logic the product has no concept of, usually industry specific, and usually the thing you actually compete on. This is the small share of requests that deserves a custom module, a specification and a budget.
How It Works

How a request becomes a change, or does not

1
Hear the problem
We ask what outcome you want, not what screen you want. Requests arrive as solutions and have to be turned back into problems first.
2
Work the ladder
Process change, then configuration, then a supported extension. We stop at the first rung that solves the problem and say so.
3
Specify and price
A written specification with acceptance criteria, a build estimate and, where the core is touched, the recurring annual cost.
4
Build and test
Developed in a separate environment under version control, with regression tests, then signed off by the person who raised it.
5
Document and register
Released to production with documentation and an entry in your customisation register, so the next upgrade knows it exists.
What Is Included

What good delivery actually looks like

📋

Written specification

What the change does, what it does not do, and acceptance criteria your team can test against rather than argue about.

âš™

Version controlled code

Every change in a repository with a history, so you can see who changed what, when, and roll back if you need to.

🔄

Separate dev and test

Nothing is written in a live system. Build in development, prove it in test on a copy of your data, then release.

📚

Documentation

Setup notes, the reason the change exists and how it works, so it is maintainable by someone other than whoever built it.

🛡

Regression tests

Automated or scripted checks that run before each upgrade, so you find out in test rather than on Monday morning.

🗑

Periodic debt review

An annual pass over the register to retire custom code nobody uses, because unused code still costs you at every upgrade.

What Changes

What the discipline buys you

Fewer
Customisations to maintain
Cheaper
Upgrades, year after year
Faster
Answers through reports
Written
Specs instead of verbal asks
No
Undocumented code in production
Known
Annual cost of every change
Choose A Platform

Already know which ERP you want?

The ladder is the same everywhere. What differs is how far each product lets you go before you are modifying something you should not.

SAP handles this differently again. Under the clean core model you do not modify S/4HANA at all, you build extensions on BTP against released APIs, which is the same idea as the third rung of our ladder enforced by the vendor. If that is your platform, start at our SAP implementation page.

Why Us

Why teams bring customisation work to TCB Infotech

1
We argue you down the ladder
Most requests are settled by a setting or a report. We will show you which rung yours belongs on before quoting a build.
2
Recurring cost quoted up front
Anything touching the core is priced with its annual retest and rework cost, not only the one-off build figure.
3
Extension points first
Published APIs, documented hooks and custom apps, so your upgrades stay a regression run rather than a project.
4
Nothing built in a live system
Separate development and test environments, version control and a release path. Undocumented live edits are how systems rot.
5
Maintainable by someone else
Specification, documentation and tests ship with the change, so you are not tied to the person who wrote it.
6
Proven delivery
50+ ERP and software projects across industries, with zero failed projects since 2021.
FAQ

ERP customisation questions

When is a customisation actually justified?
When the process is one you genuinely win business on, and no supported setting covers it. A distribution rule that gets you a contract your competitors cannot service is worth building. A three-signature approval that exists because a manager in 2009 wanted it is not. The test we apply is simple: if this step disappeared tomorrow, would a customer notice, would a regulator notice, or would only habit notice. If the honest answer is habit, we will say so before we quote.
Will our customisations break when we upgrade?
It depends entirely on how they were built. Work done through supported extension points, custom fields, app-level modules, published APIs and documented hooks, usually survives an upgrade with a short regression test. Modifications to core files do not. They have to be reapplied, retested and often rewritten every release, because the vendor changed the code underneath them. A core modification made once becomes a cost line in every upgrade budget for the life of the system.
What does a typical customisation cost?
A small change such as a field, a print layout or a validation rule usually runs a few days including testing and documentation. A substantial custom module with its own data, screens, permissions and reports runs several weeks. A core modification carries the build cost plus a recurring retest and rework cost at every upgrade, which is why we quote those with the annual figure attached rather than the one-off figure alone.
Why do you push back on customisation requests?
Because most of them are cheaper to solve another way, and because we are the ones who will be maintaining the result. A large share of requests turn out to be report or dashboard requests, which cost a fraction of custom code. Others are resolved by a setting nobody had found. We work through the ladder with you first. The best customisation service will talk you out of most of what you ask for, and that is what you are paying for.
Will you maintain customisations somebody else wrote?
Usually yes, after a review. We read the code, check whether it sits on supported extension points or reaches into the core, and note what is undocumented or untested. Then we give you a written assessment with the annual cost of keeping each item. Sometimes the recommendation is to retire a customisation rather than adopt it, because nobody has used the feature in two years and it is still costing you money at every upgrade.
How do we tell a configuration from a customisation?
Configuration is anything you can change through supported settings in the application, by a person with the right permissions and no code. It is covered by the vendor, it is documented and it survives upgrades. Customisation is code, whether it sits in a custom app, a script or a core file. The practical difference is who carries the maintenance risk. Configuration leaves it with the vendor. Customisation moves it to you, permanently.

Bring Us Your Customisation List

Book a free consultation. Send the list of changes your team has been asking for and we will tell you which are settings, which are reports, which are worth building, and which we would decline and why.

Book a Free Consultation →

No commitment. Expect us to talk you out of some of it.

ERP Customization Features

What an ERP Customisation Engagement Covers

The work starts before any code is written and does not finish when it ships. Here is how a request is assessed, how a change is specified and built so it survives upgrades, and how we keep the pile of custom code from quietly growing into next year's problem.

Core Features

From a request to a change you can still afford in five years

Assessment

Every request is tested against the ladder first

We sit with the person who raised it and find the outcome behind the ask. Then we work down four rungs in order: can you adopt the standard process, can a supported setting do it, can a documented extension point do it, and only then does code in the core come up. Reporting requests are separated out early, because a large share of what arrives as a customisation is really a question about data that already exists.

  • The outcome recovered from the request, not taken at face value.
  • A written answer naming the rung and the reason.
  • Report and dashboard requests met as reports, at a fraction of the cost.
Working through an ERP customisation request with the process owner who raised it
Specification and Build

Specified, built outside production, and tested

Anything approved gets a written specification with acceptance criteria, so sign-off is a test rather than an opinion. Development happens in a separate environment under version control, proved in a test environment on a copy of your data, then released. Where a supported extension point exists we use it, even when editing the core would be quicker, because the quicker route is the one that bills you again every release.

  • Acceptance criteria agreed before the build starts.
  • Version control, separate development and test environments.
  • Regression tests written alongside the change.
Building an ERP customisation in a separate development environment under version control
Register and Review

Technical debt is counted, and some of it is retired

Every change goes into a register with what it does, why it exists, who asked for it and where it sits relative to the core. Once a year we walk the register with you and look for features nobody has used since they were built, because unused custom code is still retested, still ported and still paid for at every upgrade. Retiring it is usually the cheapest improvement available to you that year.

  • A customisation register you own and can hand to anyone.
  • An annual review that names candidates for retirement.
  • Usage checked before a customisation is carried into the next version.
Annual review meeting to retire unused ERP customisations from the register
What You Get

Everything the engagement hands over

📋

Request assessment

Each request answered in writing with the rung it belongs on, the cost, and a plain reason where the answer is no.

âš™

Specification pack

Scope, behaviour, exclusions and acceptance criteria for every approved change, agreed before a line is written.

🔄

Upgrade-safe build

Delivered on supported extension points wherever they exist, with the core left alone unless there is no route around it.

📚

Documentation

How it works, why it exists and how to change it, written for the next person rather than for the person who built it.

🛡

Test suite

Regression checks tied to the acceptance criteria, run before every upgrade so breakage is found in test, not in production.

🗑

Customisation register

One list of every change on your system, with its owner, its risk at upgrade and its annual carrying cost.