When business rules live in spreadsheets, emails and code
Architecture

When business rules live in spreadsheets, emails and code

Worktechlabs editorial team 17 February 2026 6 min read
When business rules live in spreadsheets, emails and code

The sales team has a spreadsheet explaining discounts. Operations has an email describing exceptions. The application contains a third interpretation written several years ago. When an unusual order arrives, people negotiate which version of the rule applies, then ask a developer to make a small change that turns out to affect several screens.

Domain modelling can help the team make those rules explicit. Its practical value is a shared description of the decisions the software must enforce, with clear places to implement and test them. The starting point is understanding the business language and its exceptions, rather than introducing a large collection of architectural patterns.

Follow one decision through the organisation

Select a recurring decision with visible consequences, such as whether an order can be approved or a reservation can be cancelled. Interview the people who make, review and support that decision. Ask for recent examples, including cases where the usual process did not apply.

For a hypothetical wholesaler, “approved order” may mean that sales accepted the price, that finance released credit or that the warehouse can dispatch. Those meanings are related but not interchangeable. Record who uses each meaning and what action it permits before choosing a single property name in the database.

Draw a short sequence of states and decisions. Include the information required at each point and the person or system responsible for supplying it. This often exposes missing concepts, such as a temporary hold or a reason for rejection, that were previously hidden inside free-text notes.

Distinguish rules from preferences and current habits

Ask what must remain true for the business operation to be valid. A confirmed order may require a valid customer and at least one order line. A screen's preferred sort order is a different kind of decision, even if both currently appear in the same application method.

Separate mandatory rules from policies that can change. A discount threshold might vary by agreement or effective date, while an already-issued transaction must preserve the terms under which it was created. Document the source and lifetime of each policy so later changes do not rewrite historical meaning accidentally.

Microsoft's domain-model guidance discusses enforcing invariants within the domain layer and distinguishes that responsibility from interface validation. Use that distinction to examine where the application currently permits invalid states. It does not require converting the system into microservices. Domain-model validation guidance.

Build an example set before designing abstractions

Write examples that make the rules testable. For order approval, include an ordinary order, an inactive customer, a changed price and a credit hold. Specify the expected decision and explanation. Where two business owners disagree, record the disagreement rather than hiding it in a flexible configuration option.

Use boundary examples deliberately. If an approval limit is inclusive, show the exact limit and values immediately above and below it. If time affects the rule, state the relevant timezone and effective date. These details are often where a seemingly clear business sentence becomes ambiguous code.

Keep the example set concise enough to review in a meeting. It should help the business recognise its own decisions. Once agreed, connect the examples to automated checks so future changes can show which intended behaviours remain intact and which policy decisions are being revised.

Give state changes meaningful operations

Consider whether the application exposes business actions or merely allows arbitrary property changes. An operation such as approving an order can validate its prerequisites and record a decision. A collection of unrelated field updates may allow combinations that nobody intended to represent a valid business state.

Design the operation's failure result as carefully as its success. “Customer account is on hold” helps the caller present a useful next step. A generic exception leaves the interface or integration to guess what happened. Keep operational diagnostics available without making internal implementation details the user's only explanation.

Apply the same rule across entry points. A browser screen, import job and API client should not each carry an independent version of order approval. Establish a shared application path or an explicitly equivalent enforcement mechanism, then verify the important differences in authentication and input handling around it.

Define the boundary of a consistent change

Some information must change together to preserve a business rule. Other information can be updated later with an explicit delay. Determine that boundary from the decision being made rather than assuming every related table belongs in one large operation.

For the wholesaler, confirming an order and preserving its agreed line prices may need one coherent transaction. Updating an analytical summary could happen separately if its freshness is clear. Document what users can rely on immediately and what is still being processed after the main action succeeds.

Consider concurrent changes. If finance adds a credit hold while sales approves an order, the system needs a defined resolution. A domain model that looks clear in a single-user demonstration still requires appropriate database and concurrency behaviour. Use conflict handling to connect the model to real multi-user operation.

Introduce the model through a small change

Choose one rule that is already due for maintenance. Identify its current entry points, capture representative behaviour and introduce a clearer operation around that slice. Keep unrelated parts of the application working while the team gains evidence about the new structure.

Review whether the change improves understanding. Can a developer find where the rule lives? Can the business owner explain the examples? Can support identify why an action was rejected? If the new design mainly adds terminology without improving these tasks, simplify it before expanding the approach.

Worktechlabs can help clarify and implement rules in ERP and business software. Pair domain modelling with targeted tests and gradual modernisation so the team improves a working system through verifiable steps. The useful result is a rule that remains understandable when the original developer or spreadsheet author is no longer available to explain it.

Official sources and further reading

Domain modellingDDDERPBusiness rules
Worktechlabs

Written by

Worktechlabs editorial team

About the team and our articles

Want to discuss this with the team?

We are happy to talk through how this applies to your own system.

Get in touch

Let's talk

What would you like to improve in your business?

Discuss your project 020 3883 2194

We use cookies

Necessary cookies keep the site working. With your permission we also use analytics cookies. Google receives basic measurement signals without analytics cookies before you accept or if you reject. You can change your cookie choice at any time. See our cookie policy.

Privacy settings

Cookie preferences

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.