SAP
The largest ERP ecosystem, the highest day rates, and the steepest learning curve. Roughly a third of all ERP developers work in this world.
The product family
| Product | What it is |
|---|---|
| S/4HANA | The current flagship. Runs only on HANA. On-prem, private cloud (RISE), or public cloud |
| ECC 6.0 / R/3 | The legacy workhorse. Mainstream maintenance ends 2027, extended to 2030 |
| Business One (B1) | SMB product, completely separate codebase. .NET/Java SDK, SQL Server or HANA |
| Business ByDesign | Cloud SMB/mid-market |
| SuccessFactors | HCM (acquired) |
| Ariba | Procurement network (acquired) |
| Concur | Travel and expense (acquired) |
| Fieldglass | Contingent workforce (acquired) |
| IBP | Integrated Business Planning — supply chain planning |
| BTP | Business Technology Platform — the extension and integration platform |
Module codes (the vocabulary)
You will hear these constantly:
| Code | Module |
|---|---|
| FI | Financial Accounting |
| CO | Controlling (management accounting) |
| AA / FI-AA | Asset Accounting |
| TR / FSCM | Treasury / Financial Supply Chain Management |
| MM | Materials Management (procurement + inventory) |
| SD | Sales and Distribution |
| PP | Production Planning |
| PP-PI | Production Planning for Process Industries |
| QM | Quality Management |
| PM / EAM | Plant Maintenance / Enterprise Asset Management |
| PS | Project System |
| WM / EWM | Warehouse Management / Extended WM |
| TM | Transportation Management |
| HCM / HR | Human Capital Management |
| CS | Customer Service |
| GTS | Global Trade Services |
| BW / BI | Business Warehouse |
| Basis | The technical/administration layer |
The technology stack
ABAP
SAP’s proprietary language. Verbose, English-like, with an integrated development environment inside the system.
DATA(lo_order) = NEW zcl_sales_order( iv_order_id = '4711' ).
SELECT vbeln, posnr, matnr, kwmeng
FROM vbap
INTO TABLE @DATA(lt_items)
WHERE vbeln = @lv_order
AND matnr IN @lr_materials.
LOOP AT lt_items INTO DATA(ls_item).
IF ls_item-kwmeng > 0.
" process
ENDIF.
ENDLOOP.
Modern ABAP (7.4+) is far better than its reputation: inline declarations, string templates, table expressions, FOR loops, REDUCE, CORRESPONDING, and ABAP Unit for testing. If you learned ABAP from a 2005 tutorial, look again.
ABAP Objects — the OO subset. Use it. Procedural ABAP with global data is the legacy style and is discouraged in all current guidance.
The Data Dictionary (DDIC)
The metadata layer: tables, data elements, domains, structures, table types, search helps, lock objects. Everything is defined here, not in raw DDL.
Key table names to recognise
| Table | Contents |
|---|---|
BKPF / BSEG |
Accounting document header / line items (ECC) |
ACDOCA |
The Universal Journal — S/4HANA’s single line-item table replacing dozens |
MARA / MARC / MARD |
Material general / plant / storage location |
MBEW |
Material valuation |
KNA1 / KNB1 / KNVV |
Customer general / company code / sales area |
LFA1 / LFB1 |
Vendor general / company code |
VBAK / VBAP |
Sales order header / items |
LIKP / LIPS |
Delivery header / items |
VBRK / VBRP |
Billing header / items |
EKKO / EKPO |
Purchase order header / items |
MKPF / MSEG |
Material document header / items |
AFKO / AFPO |
Production order header / items |
T001 |
Company codes |
TCURR |
Exchange rates |
ACDOCA is the defining change in S/4HANA. One table holds FI, CO, asset, and material ledger line items together, eliminating reconciliation between them. If someone says “the universal journal”, this is what they mean.
CDS Views
Core Data Services — define semantic views in the database, annotated for OData exposure, analytics, and authorisation.
@AbapCatalog.sqlViewName: 'ZISALESORDER'
@OData.publish: true
@Analytics.dataCategory: #CUBE
define view ZI_SalesOrder as select from vbak
association [0..*] to ZI_SalesOrderItem as _Item on $projection.SalesOrder = _Item.SalesOrder
{
key vbeln as SalesOrder,
kunnr as SoldToParty,
netwr as NetValue,
waerk as Currency,
_Item
}
This is the code-pushdown philosophy: aggregate in the database, don’t drag rows to the application server.
RAP — ABAP RESTful Application Programming
The current framework for building transactional apps and OData services. Behaviour definitions, projections, draft handling. This is what you learn for new development on S/4HANA.
Fiori / UI5
The modern UI. SAPUI5 is a JavaScript framework (MVC, XML views, OData models). Fiori is the design system and app catalogue on top of it.
Fiori Launchpad → tiles → apps
Transactional apps (create/change)
Analytical apps (KPIs, drill-down)
Fact sheets (360° object views)
BTP — Business Technology Platform
Where side-by-side extensions live: Cloud Foundry or Kyma runtimes, CAP (Cloud Application Programming model, Node.js or Java), HANA Cloud, Integration Suite (CPI), Build (low-code), Event Mesh, Identity Services.
“Clean core” means: extend on BTP, not in the ABAP stack. That is the official direction.
Extension mechanisms
| Mechanism | Notes |
|---|---|
| BAdI | Business Add-In — the standard, upgrade-safe object-oriented hook |
| Enhancement spots / implicit enhancements | Insert code at defined points |
| User exits / customer exits | Older mechanisms, still present |
| Custom fields (key user extensibility) | No-code field addition in S/4HANA |
| CDS extensions | Extend released views |
| Side-by-side on BTP | The strategic path |
| Modification | Changing SAP code. Requires an access key. Avoid |
Transports
Changes move between systems as transport requests:
DEV ──▶ QAS ──▶ PRD
transport of copies / change requests
A transport contains objects (programs, tables, config). Key concepts: task vs request, release, import queue, transport of copies, and transport dependencies — release them in the wrong order and the import fails. This is a common source of go-live incidents.
Client concept
System PRD
├── Client 100 Production
├── Client 200 Training
└── Client 300 Sandbox
MANDT (client) is the first field of nearly every table and the first field of every index. It’s SAP’s multi-tenancy, invented in the 1990s and still the correct pattern. Cross-client objects (programs, DDIC definitions) are shared across all clients — which surprises people.
Learning path
1. Navigation and the transaction concept (2 weeks)
2. One functional module end-to-end — pick SD or MM (2 months)
3. ABAP fundamentals + Open SQL + internal tables (2 months)
4. ABAP Objects, ABAP Unit (1 month)
5. DDIC, CDS views (1 month)
6. Reports (ALV), forms, BAPIs, enhancements (2 months)
7. OData, RAP, Fiori/UI5 basics (2 months)
8. BTP, CAP, Integration Suite (2 months)
Realistically 12–18 months to productive, 3+ years to senior. That barrier is exactly why the rates are high.
Free learning resources
- openSAP — free MOOCs from SAP itself
- SAP Learning Hub — some free tiers
- SAP Community (community.sap.com) — blogs and Q&A; the blogs are genuinely good
- SAP Help Portal — official documentation
- SAP API Business Hub — the released API catalogue
- BTP trial account — free tier with an ABAP environment
- developers.sap.com — tutorials and mission-based learning
Certifications
- C_TAW12 — ABAP with SAP NetWeaver (the classic developer cert)
- C_S4HANA family — functional and technical, per area
- C_CPE / C_CPI — BTP extension and integration
- Fiori/UI5 development certifications
Certifications open doors in the SAP world more than in most of software, largely because partners need certified headcount for their partner status.
Reality check
Pros: highest rates, longest projects, huge install base, deep and durable domain knowledge, worldwide demand, and a massive migration wave (ECC → S/4HANA) running through 2030.
Cons: long ramp-up, proprietary skills that don’t transfer, tooling that lags mainstream software engineering, and licence costs that keep you in enterprise environments.
The migration wave is the opportunity. Thousands of ECC customers must move to S/4HANA before 2030, and there are not enough people to do it.