
// article
Image description: Bitta Apps comparison of clean Business Central architecture on day one with a tangled customization dependency network on day 1000.
"It is only one field."
The request can be completely reasonable. A purchasing team needs one field to record a supplier commitment. Then the field needs validation, the validation affects an approval, the approval must reach an integration, and the integration feeds a report. Before long, changing the original field requires someone to understand a chain that crosses business rules, security, data, tests, monitoring, and ownership.
The first request gets a ticket. The fifteenth sometimes arrives as a message asking whether it can be ready before lunch.
The lesson is not "never customize Business Central." The lesson is to approve the obligation that comes with a customization, not just the screen change people can see.
Martin Fowler describes technical debt as deficiencies in internal quality that make future modification harder, with the extra effort acting like interest. That distinction matters. A well-designed extension that supports a valuable business requirement, has a named owner, and can be tested and updated is an asset. Debt begins to accumulate when the business keeps the behavior but stops managing the conditions that make it safe to change.
A deliberate tradeoff can be responsible. For example, a team may accept a temporary manual reconciliation to meet a deadline, document the limitation, name an owner, and schedule a review. An undocumented shortcut with no review trigger is different. The request may still work today, but nobody has agreed to pay for its future maintenance.
Business Central provides supported AL extension objects for tables, pages, reports, enums, and permission sets. These objects can add fields, actions, layouts, report elements, enum values, and permissions without editing the base object directly, as described in Microsoft's extension objects overview. That supported model is the right foundation, but it does not make every design equally maintainable.
Events can help separate custom functionality from core business logic. Microsoft notes that events are designed for this separation and can lower the cost of modifications and upgrades, while also warning that event quality varies and some line-specific hook events can be fragile when code changes. See Microsoft's event extensibility guidance. The design question is therefore not merely "Did we use an event?" It is "Did we choose a stable boundary whose meaning will remain clear?"
Dependencies can also cross apps. In the Marketplace library and dependency app scenarios covered by Microsoft's FAQ, Business Central walks the declared library and dependency chain for a top-level Marketplace app. The FAQ also says a library or dependency app is updated with the consuming Marketplace app only when that consuming app requires a higher minimum version in its manifest than the version already installed. Review the current library and dependency app guidance. These behaviors are specific to the FAQ's Marketplace app context and should not be generalized to every Business Central deployment model. Within that context, a small consuming app can carry a release-order obligation that is invisible on its page.
Risk is not measured well by counting AL objects alone. One isolated report can be low risk. One field used by posting, approvals, an API contract, and month-end reporting can be high risk. What matters is the number and quality of dependencies, how often they change, and whether the team can see and test them.
The requester is known, but the long-term owner is not. Nobody is accountable for deciding whether the feature still matters, approving changes to it, or funding its maintenance.
The ticket says what to build but not which business outcome or control it supports. Future reviewers cannot tell whether standard functionality now covers the need or whether the original process has changed.
Microsoft supports AL test codeunits, test methods, and test runners that can execute unattended. Its application testing guidance recommends repeatable tests that start from a known state and validate successful and failing conditions. If the test plan is "ask the person who built it," the plan also has a vacation problem.
Required fields, payload meanings, retries, duplicate handling, and ownership are understood socially but not recorded. A validation change can then break a downstream process even when the extension compiles.
AL provides obsoletion states, reasons, tags, and analyzer rules to communicate lifecycle changes and detect several categories of breaking change. A warning without an owner and migration decision is future work waiting for an inconvenient date. Microsoft's current reference is obsolete objects, methods, and symbols in AL.
Business Central app telemetry can send extension activity to Azure Application Insights, and extensions can add feature or custom telemetry. Microsoft's telemetry setup guidance explains the supported options. Without relevant signals, the team cannot easily distinguish a critical feature from an unused one or a code fault from a process problem.
The team repeatedly reconstructs dependencies, test cases, data behavior, and deployment order just before an update. Upgrade weekend is an expensive time to discover that a report is held together by oral tradition.
Before approving development, move through these questions in order. The goal is not to avoid AL. It is to choose the simplest boundary that clearly owns the requirement.
A useful approval statement is: "We are choosing this solution because it is the clearest supported boundary for the business outcome, and these named people own the conditions that keep it maintainable." If the group cannot finish that sentence, the request is not ready for approval.
Distribution and ownership also shape the lifecycle. A per-tenant extension and a Marketplace app solve different problems; the Bitta Apps comparison of per-tenant extensions versus Marketplace apps can help teams choose that boundary before development starts.
Start where change and business impact meet. Fowler's debt metaphor is useful here: frequently modified areas impose the most recurring extra effort, while an awkward but stable area may not deserve immediate work. Inventory the workflows that change often, affect critical transactions, or produce repeated support discovery.
The objective is not a perfect codebase. It is a controlled portfolio in which the business can explain why each important customization exists, how it is verified, and when it should change or disappear.
Copy this list into a ticket, requirements document, or approval meeting.
A reasonable customization becomes risky when its dependencies outlive the team's understanding of them. Use the framework and checklist to make ownership visible before code is approved. If several answers remain unclear, review Bitta Apps' approach to AL extension work, then contact Bitta Apps for a focused customization and dependency review.