Now accepting guest editorial from SAP, Oracle, Workday and ServiceNow practitioners.Pitch a guide
The Sign-Off Table

Lesson 1 of 5

Choosing where an extension lives

11 min

Listen to this lesson

0:00 / 7:06

Contoso Motor Co. is converting SAP ECC 6.0 EHP 8 to SAP S/4HANA Private Edition under RISE with SAP. The conversion carries a lot of custom code across, and the program has made a rule for everything new: keep the core clean. That does not mean "no extensions". It means every new requirement is placed deliberately, using SAP's extension options in a way that survives upgrades. This lesson is about that placement decision, because it drives cost, upgrade effort and how the extension will be tested for years.

The extension options

SAP groups SAP S/4HANA extensibility into on-stack options, which run inside the SAP S/4HANA system, and side-by-side options, which run on SAP Business Technology Platform (SAP BTP, which SAP began rebranding as SAP Business AI Platform in 2026) and talk to SAP S/4HANA remotely. On-stack has two clean tiers. Key user extensibility uses browser-based apps such as Custom Fields, Custom Logic and Custom CDS Views, plus UI adaptation, so business experts and consultants can adapt the system without writing classic ABAP. Developer extensibility uses ABAP Cloud: the ABAP RESTful Application Programming Model (RAP), CDS and released extension points, built in ABAP Development Tools. Private Edition and on-premise systems also still allow classic extensibility (user exits, BAdIs without release contracts, direct table access, modifications), which SAP does not count as clean core.

Key user (on-stack)Developer extensibility (on-stack)Side-by-side (SAP BTP)Classic (Private Edition / on-premise)
Who builds itKey users and consultantsABAP developersPro-code or low-code developersABAP developers
Runs inSAP S/4HANASAP S/4HANASAP BTP (Cloud Foundry, Kyma or ABAP environment)SAP S/4HANA
Talks to SAP objects throughReleased extension pointsReleased local APIs and extension pointsReleased remote APIs and eventsAnything, including unreleased objects
Coupling to SAP S/4HANATightTightLooseTight and fragile
Clean coreYesYesYesNo
SAP S/4HANA extension options compared. Public Edition offers only the clean options.
The Sign-Off Table · thesignofftable.com/academy/sap-btp-201

SAP's clean core guidance, updated in 2025, grades extensions on a scale from level A (built only on released, stable APIs and extension points) down to level D (techniques SAP does not recommend, such as modifications, direct writes to SAP tables, implicit enhancements and objects SAP explicitly marks as not recommended). In between, level B also uses classic SAP APIs that are documented and generally upgrade-stable, such as many BAPIs, and level C accesses SAP internal objects that are neither released nor classic APIs, which carries upgrade risk. The practical message is that the further you move from released interfaces, the more each upgrade costs you.

The clean core levels run from A to D: the further an extension moves from released interfaces, the more each upgrade costs.
The Sign-Off Table · thesignofftable.com/academy/sap-btp-201

Questions that decide the location

  • Must it run inside the SAP transaction? Logic that has to validate or change a document while it is being saved, in the same logical unit of work, belongs on-stack.
  • Who uses it? Users outside the company, such as Great Lakes Fleet Services staff, should not need SAP S/4HANA user accounts. A side-by-side app with its own identity setup fits better.
  • How independent is its lifecycle? If it changes weekly while SAP S/4HANA changes in planned releases, side-by-side keeps the two apart.
  • Does it combine data from several systems? Mashing up SAP and non-SAP data is a natural side-by-side job.
  • Does a released API or event exist? Side-by-side depends on remote APIs and events. If none exists for the data you need, you may have to build a custom API on-stack first.
  • What skills and runtime costs apply? BTP services are licensed and metered; ABAP Cloud skills differ from CAP or low-code skills.
  1. Can a key user tool meet the need (field, simple logic, layout)?Yes → key user extensibility · No → continue
  2. Must the logic run inside the SAP transaction or need local data with low latency?Yes → developer extensibility with ABAP Cloud · No → continue
  3. Is it a new app, external user group, cross-system process or independent lifecycle?Yes → side-by-side on SAP BTP · No → continue
  4. Is a released API or event available for the data it needs?Yes → build side-by-side · No → expose a custom API on-stack first, or ask SAP for a release
A first-pass placement decision, in the spirit of SAP's Application Extension Methodology.
The Sign-Off Table · thesignofftable.com/academy/sap-btp-201

SAP formalizes this in the SAP Application Extension Methodology: assess the extension use case in its business and system context, assess which extension styles and technologies apply to each task, and then define the target solution. Contoso's architects use it lightly, as a checklist, and record the decision and the reason in the program's requirement in SAP Cloud ALM, so testers know which pattern they are testing.

Contoso requirementPlacementWhy
Fleet contract number on the sales order headerKey user: custom fieldSimple field, needed in SAP screens, output and APIs
Block saving a fleet order whose contract has expiredDeveloper extensibility: released BAdI or RAP extensionMust run inside the save, in the same transaction
Great Lakes Fleet Services checks order and delivery status onlineSide-by-side: CAP app on SAP BTPExternal users, independent release cycle, read-only via released API
Notify the fleet desk when a fleet order changesSide-by-side: event-drivenReacts after the fact; no need to slow down the save
Margin analysis across ERP and warranty dataSide-by-side: data extensionCombines several sources for analytics

How Contoso placed its first five extension requirements.

Contoso's first five requirements: two stay on-stack because they belong in SAP screens or inside the save, three go side-by-side on SAP BTP.
The Sign-Off Table · thesignofftable.com/academy/sap-btp-201

What would you do?

Kenji, Contoso's ABAP lead, proposes building the fleet order status portal for Great Lakes Fleet Services as a classic Web Dynpro application inside SAP S/4HANA, "because the data is all there". Grace asks the architects to decide. What should they recommend?

Key points
  • On-stack: key user extensibility and developer extensibility with ABAP Cloud; side-by-side: apps and services on SAP BTP.
  • Classic extensibility exists only in Private Edition and on-premise, and it is not clean core.
  • Logic that must run inside the SAP transaction goes on-stack; external users, new apps and independent lifecycles point side-by-side.
  • Side-by-side depends on released remote APIs and events; check they exist before you commit.
  • Record the placement decision and its reason so testers know which pattern they are testing.

Check your understanding · not graded

Lesson check

  1. 1. Which requirement most clearly belongs on-stack?

  2. 2. Which extension option is available only in Private Edition and on-premise, and is not considered clean core?

  3. 3. What must exist before a side-by-side extension can read SAP S/4HANA data cleanly?

  4. 4. Why should external users favor a side-by-side design?