SAP claims serious effort reduction from Joule for ABAP developers; this playbook is how you verify that on your own transport instead of taking it on faith. Generate a class, generate its ABAP Unit tests, run ATC, remediate findings — and measure what the loop actually saved you.
Tier: Core · Workflow area: ERP Development & Testing · ~40 minutes
ABAP is late to the AI party and arriving fast: Joule for Developers sits in ABAP Development Tools and generates code, unit tests and explanations against clean-core rules. The professional stance is neither refusal nor faith — it is the loop this playbook drills: AI drafts, ABAP Unit proves behavior, ATC proves standards, and a human owns the transport. Nothing reaches the transport queue on the model's word alone.
Write the spec as if for a junior developer. Joule in ADT (or Claude/GPT if your org lacks Joule licensing) performs in proportion to spec precision:
Generate an ABAP class ZCL_CREDIT_EXPOSURE for S/4HANA on-premise,
clean ABAP style, no direct SELECT on database tables — data access
through a private method I can later replace (constructor injection
of an interface for testability).
Behavior: method GET_EXPOSURE(customer id, currency) returns the sum
of open sales order values plus open AR items, converted to the
requested currency. Raise a class-based exception ZCX_CREDIT_INPUT
for an initial customer id. Amounts use type CURR handling — never
float arithmetic.
The testability constraint (injectable data access) is the line that makes step 2 possible; ask for it explicitly, always.
Generate the ABAP Unit test class against behavior, not implementation.
CLASS ltc_credit_exposure DEFINITION FINAL FOR TESTING
DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA cut TYPE REF TO zcl_credit_exposure.
METHODS setup.
METHODS sums_orders_and_ar FOR TESTING.
METHODS initial_customer_raises FOR TESTING.
METHODS zero_open_items_is_zero FOR TESTING.
ENDCLASS.
Ask the model for the test cases as a list first, review the list for missing edges (currency with no conversion rate? negative AR from credit memos?), then have it implement with a test double injected for data access. A generated test suite that only covers the happy path is the most common failure — the review-the-list step catches it.
Run the tests and believe only the runner. Execute ABAP Unit in ADT (Ctrl+Shift+F10). First-run failures are normal and are the point: read each red case and decide whether the class is wrong or the test encodes a wrong assumption. Do not let the model "fix" tests to green without you adjudicating which side was correct — that laundering step is where silent bugs enter.
Run ATC and treat findings as the syllabus. Check the class with your org's ATC variant (Ctrl+Shift+F2 in ADT, or transaction ATC centrally). Typical findings on generated code: performance patterns (SELECT in loop), missing AUTHORITY-CHECK, naming-convention violations, and — decisive for clean core — usage of unreleased objects flagged by cloud-readiness checks. Paste any finding you don't recognize into the assistant with "explain this ATC finding and show the compliant rewrite," then verify the rewrite reruns clean and the unit tests still pass.
Remediate, re-run both gates, and only then release. The exit condition is mechanical: ABAP Unit green, ATC clean (or findings formally exempted through your normal exemption workflow — never self-approved), code reviewed by a human who read every line they are signing. Then release the transport. If you use abapGit, commit the class and test class together; generated code without its tests in version control is half an artifact.
Record the measurement. Two numbers with the transport: wall-clock time for the full loop, and your honest estimate for the manual equivalent. Plus one count: defects the gates caught in generated code. Three transports of this and your team has an evidence-based position on ABAP AI — which is the deliverable SAP's marketing can't ship you.
DURATION SHORT discipline since test runs gate pipelines.Never paste productive business data, RFC credentials or customer records into any assistant while iterating on code — schemas and synthetic values only. And no generated object bypasses the transport-and-review path, however clean its gates look: the human who releases the transport owns the code.
The unit of trust in ABAP AI is not the generated class — it is the loop around it: spec, generated tests you curated, ATC with your variant, human release. Run that loop three times with a stopwatch and you own both a faster workflow and the evidence that it is one.