Code Review Workflow
Every extension change goes through a structured review process before it ships. The goal is to catch bugs, performance issues, and standard deviations before they reach production — not after.
This page defines the review process, the checklists reviewers use, and the acceptance criteria for shipping code.

Review Process
Step 1 — Plan Before Writing
For any non-trivial change, present 2–3 approaches with tradeoffs before writing code. Do not begin implementation until the approach is approved. This prevents wasted effort on an approach that gets rejected during review.
Step 2 — Implement
Write the code, following the patterns and conventions in the Contribution Guidelines and Coding Standards.
Step 3 — Shipment Readiness Check
Before requesting review, verify every item in the Shipment Readiness Checklist (below). Address any gaps before proceeding. The reviewer should not be the one discovering that documentation is missing or tests don't pass.
Step 4 — Independent Code Review
The review must be conducted by someone who did not write the code. The reviewer evaluates the changes cold — without knowledge of the original rationale or design discussions. This is intentional. The same context that produced a decision will rationalize it on review.
The reviewer evaluates against:
- The Shipment Readiness Checklist (completeness)
- The Code Review Checklist (correctness and patterns)
- The Performance Review Checklist (database access, locking, optimization)
Step 5 — Objective Verification
Compilation and tests are the ground truth, not subjective review.
- AL extensions:
AL: Publishmust succeed without errors - Python tools: run the script and verify the output artifact
- Test codeunits: publish and run in the BC Test Tool (page 130401)
Step 6 — Business Logic Review
Code review can verify syntax, patterns, and edge cases. It cannot verify that the code solves the actual business problem. A stakeholder or business owner reviews the final implementation for correctness against the original requirement before the change ships.
When to Use This Workflow
| Change Type | Plan First | Shipment Checklist | Code Review | Performance Review | Business Review |
|---|---|---|---|---|---|
| New extension or major feature | Required | Required | Required | Required | Required |
| New codeunit, table, or page | Required | Required | Required | Required | Required |
| Modification to existing object | Recommended | Required | Required | Required | Required |
| Bug fix (isolated, < 20 lines) | Optional | Required (subset) | Recommended | Recommended | Required |
| Documentation or test plan only | Optional | Applicable items only | Optional | N/A | Recommended |
For bug fixes, the "required subset" of the shipment checklist is: documentation updated, test plan updated, tests cover the fix, tests pass, and version bumped.
Shipment Readiness Checklist
Every extension must satisfy these requirements before it is considered ready to ship.
Documentation
- README.md exists in the extension folder — describes purpose, setup, configuration, and usage
-
docs/CHANGELOG.mdhas a new entry for this version -
docs/CHANGE-v{version}.mdexists with full detail for the current version - README updated if the change affects setup, configuration, or usage
- Code is self-documenting — docstrings on public procedures, no tribal knowledge
Test Plans
- UAT test plan exists for the extension (generated via the Test Plan Library)
- Test plan updated for the current change — new test cases added, changelog entry added, version bumped
- Test plan covers the change — every user-facing behavior has at least one test case with clear expected results
Testability
- Business logic is in codeunits, not page/report triggers
- Test codeunits exist for extensions with business logic
- Tests pass in the BC Test Tool (page 130401)
Extension Configuration
- Telemetry configured —
applicationInsightsConnectionStringpresent inapp.json -
app.jsonversion bumped for this change - ID ranges respected — all new IDs are within the extension's reserved range
- Dependencies correct in
app.json -
NoImplicitWithenabled inapp.jsonfeatures
Naming & Structure
- File naming follows
{Prefix}{ObjectName}.{ObjectType}.al - Folder structure follows type-based organization (
Codeunit/,Table/,Page/, etc.) - Namespace declared for newer extensions
Code Review Checklist
The reviewer evaluates the code against these criteria in addition to verifying the Shipment Readiness Checklist.
- Pattern compliance — naming conventions, ID ranges, folder structure, namespace usage per the Contribution Guidelines
- Dependency safety — no cross-extension ID reuse, correct
app.jsondependencies - Telemetry — new or modified extensions include the Application Insights connection string
- Edge cases — null/empty handling, boundary values, concurrent access where applicable
- Over-engineering — unnecessary abstractions, features not requested, speculative generality
- Security — no hardcoded credentials, no unvalidated external input in AL procedures
Adversarial Review Prompts
When reviewing code, use questions that force critical analysis rather than confirmation:
- "What are three things wrong with this implementation?"
- "What edge cases would break this?"
- "If you were rewriting this from scratch, what would you do differently and why?"
- "Does this follow the patterns in the Contribution Guidelines? List any deviations."
- "What happens when [specific boundary condition] occurs?"
- "Walk through the Shipment Readiness Checklist item by item. What's missing?"
- "If this code runs under production load — 50 concurrent users, Job Queue processing every 30 seconds — where does it break?"
Do not ask "does this look good?" — it invites agreement rather than analysis.