All case studies

Getting a Business Process Off Email and Spreadsheets

A capital expenditure approval, rebuilt on Power Platform — and the argument for not building an app at all

Digital TransformationPersonal Perspective23 min readPublished 20 Aug 2026Updated 21 Aug 2026

Personal Perspective. Opinion and analysis rather than a delivery record.

Executive Summary

Somewhere in most organisations there is a workbook. It has thirty columns, four of which are actually used, and a tab called Final_v3. A process the business genuinely depends on runs through it, and through the mail thread that surrounds it.

This study works through what it takes to replace one of those — a capital expenditure request and approval process — with something maintainable on Power Platform. It is written from the practitioner's side rather than the programme's: what you find when you actually sit with the people doing the work, and which decisions turn out to matter six months later.

The short version: the app is the easy part. The data model, the approval logic and the question of who owns the thing afterwards are where the effort goes. And roughly a third of the processes that get proposed for this treatment should not be rebuilt at all — they should be simplified, or absorbed into a system that already exists.

Disclosure — personal perspective. This is analysis and opinion drawn from patterns common to this kind of work, not a record of a delivery. No organisation, system or dataset is described. Figures in Business Impact are labelled Illustrative, Estimated or Projected; none is a measured outcome.

01

Context

Capital expenditure requests are a good example of the genre. They are important enough that people take them seriously, infrequent enough that nobody automates them, and just structured enough that a spreadsheet feels adequate for the first two years.

How these processes usually look

Someone downloads a request template. They fill it in, attach quotes, and email it to their manager. The manager forwards it to finance. Finance checks it against a threshold table that lives in a different workbook, and either approves it or sends it up. At some point a version of the file lands in a folder, and that folder becomes the record.

It works. That is the part people underestimate when they propose replacing it. The process has absorbed a decade of exceptions, and most of them are undocumented because they live in the head of whoever has been doing the finance check.

Why it eventually stops working

Usually one of three things: an auditor asks a question nobody can answer from a mail thread, the volume grows past what one person can track, or the person who understood the exceptions leaves. In practice it is often the third.

Where Power Platform fits

This is squarely the shape of problem Power Platform was built for — structured data, an approval chain, users who already have Microsoft 365. The tooling is not the hard part. Deciding what the process actually is, so it can be encoded, generally is.

02

Problem Statement

The process has no single source of truth, no reliable audit trail, and no way to answer basic questions without asking a person.

What that looks like day to day

  • Requesters do not know where their request is. They ask, which generates more email.
  • Approvers get a forwarded attachment with no context about what has already been checked.
  • Finance maintains the real register by hand, reconciling it against email when something looks wrong.
  • Audit asks who approved a spend and on what basis. The answer is assembled retrospectively from mailboxes, which is slow and never entirely convincing.

The technical problems underneath

  • The workbook is the record and the working copy at the same time, so every edit is a potential corruption of history.
  • Threshold rules exist in two places — the policy document and the workbook — and they have quietly diverged.
  • Attachments live in mailboxes, so the evidence supporting a decision is not stored with the decision.
  • There is no concept of a request state. Something is approved when the last person in the chain says so in a reply.

What it costs

Mostly it costs finance time and organisational patience. It also carries a real control weakness: an approval that exists only as an email is hard to evidence and easy to dispute. That is the argument that usually unlocks funding, and it is a legitimate one.

03

Objectives

Written so someone can later say whether they were met.

  • One record per request, with its state visible to everyone involved without asking
  • Approval thresholds encoded once, from the policy, not transcribed into a workbook
  • Supporting evidence stored with the request rather than in a mailbox
  • A decision history an auditor can read without reconstructing it from email
  • Requesters can submit and check status on a phone, because a chunk of them are not at a desk
  • Finance keeps the ability to handle exceptions without a developer
  • The whole thing remains supportable by someone who did not build it
04

Current State

Before designing anything, it is worth mapping what the process actually does rather than what the policy says it does. Those are usually different documents.

StageHow it works nowWhat breaks
RequestWorkbook template downloaded from a team site, filled in locallyTemplate versions drift; old copies keep circulating
Manager approvalEmail reply, sometimes just "ok"No structured record of what was approved
Finance checkManual against a threshold table in a second workbookThresholds diverge from policy; single person dependency
Senior approvalEmail escalation above a value thresholdEscalation depends on the checker remembering the rule
RecordFinal file saved to a folder; register updated by handRegister and folder disagree more often than anyone admits
ReportingPivot table over the registerOnly as good as the manual register

The thing you only find by sitting with people

There is nearly always an informal pre-approval step. Someone checks with finance before submitting, so the formal request is a formality by the time it arrives. If you encode the formal process and ignore the informal one, adoption suffers and nobody can explain why. It is worth designing for.

05

AI Opportunity

This gets asked now on every project, so it is worth answering directly rather than leaving it implied.

For this process, AI is not the right tool. The work is deterministic: a value goes over a threshold, a specific role approves it. That is a rule, and rules should be written as rules — they can be tested, explained to an auditor, and changed by someone who is not an engineer. Wrapping a probabilistic model around it makes it harder to defend and no faster.

There is a narrow, genuinely useful case around extracting figures from supplier quotes, but it sits outside the approval path and belongs in a later iteration once the process itself is stable. Bolting it on at the start would mean debugging two new things at once.

AI is not appropriate

Where AI creates value

  • Reading a supplier quote PDF and pre-filling amount and vendor for the requester to correct — a convenience at the edge, never in the decision path
  • Grouping historic requests by description to help finance spot duplicate purchases across departments

What should not be automated

  • Any part of the approval decision. Thresholds are policy and must be deterministic, testable and explainable
  • Auto-routing requests to approvers based on inferred intent — routing is an org-chart question with a correct answer
  • Summarising a request for an approver. If the request needs summarising, the form is asking for the wrong things
  • Anything that makes the audit trail harder to explain than the process it replaced
06

Alternatives

Four options were worth taking seriously. The first two get dismissed too quickly on projects like this, so they are argued properly here.

Option A

Fix the process, keep the spreadsheet

Do not build anything. Consolidate the threshold rules into one place, lock the template, agree who owns the register, and tighten the folder structure.

Advantages

  • Costs almost nothing
  • No new system to support
  • Can be done in weeks
  • Often exposes that the real problem was ownership rather than tooling

Disadvantages

  • Audit trail is still email
  • No state visibility
  • Does not survive volume growth
  • Relies on discipline that historically has not held
Cost: Very lowRisk: LowScalability: PoorComplexity: Very low

Option B

Use the finance system that already exists

Many organisations already own an ERP or finance module with a requisition workflow that is switched off because it was considered too rigid.

Advantages

  • No new platform
  • Integrated with the ledger by default
  • Controls already certified
  • Nothing new to support

Disadvantages

  • Rigid workflow that may not fit the actual process
  • Change is slow and often chargeable
  • Licensing may not extend to occasional requesters
  • Poor mobile experience in older products
Cost: VariableRisk: MediumScalability: GoodComplexity: Medium

Option C

Canvas app over a SharePoint list

Lightweight build: a canvas app for the form, a SharePoint list behind it, Power Automate for approvals.

Advantages

  • Fast to build
  • Covered by existing Microsoft 365 licensing
  • Familiar to most makers
  • Good enough for modest volumes

Disadvantages

  • Relational modelling is awkward once you need line items
  • Delegation limits bite as the list grows
  • Weak server-side validation
  • Column-level permissions are limited
Cost: LowRisk: MediumScalability: LimitedComplexity: Low

Option D

Dataverse with a model-driven app and a canvas front end

Recommended

Dataverse for the data model and business rules, a model-driven app for finance and administrators, and a small canvas app for the mobile submission experience.

Advantages

  • Proper relational model for requests and line items
  • Server-side business rules that hold regardless of client
  • Role-based security at row and column level
  • Real audit history
  • Solution-based ALM between environments

Disadvantages

  • Premium licensing for anyone who touches it
  • More platform knowledge required to support
  • Heavier to change than a canvas app
  • Overkill for genuinely simple processes
Cost: Medium to highRisk: MediumScalability: GoodComplexity: Medium
07

Proposed Solution

Dataverse underneath, two front ends on top, and the approval logic in the platform rather than in the app.

The split, and why

  • Model-driven app for finance and admins. They live in this thing daily, need views, filtering and bulk actions, and benefit from a UI that is generated rather than hand-built. Nobody has to maintain a screen layout for them.
  • Canvas app for requesters. Occasional users on phones. They need a short, guided form, not a CRM. Roughly six fields and an attachment.
  • Power Automate for approvals and notifications, triggered by state changes rather than by a button. If a request reaches "awaiting finance", the flow does not care how it got there.
  • Business rules and column security in Dataverse, so validation holds even when a record is touched by an integration or an admin rather than through the app.

The decision that matters most

Thresholds live in a configuration table that finance maintains, not in flow conditions. When the policy changes — and it does, usually at year end — nobody needs a developer, and there is a dated record of what the threshold was when a given request was approved. That last part is what audit actually asks for.

Where humans stay

Every approval is a person. There is no auto-approve below a threshold, because "small" purchases are exactly where duplicate and split spending hides. The system routes and records; it does not decide.

08

Solution Architecture

Deliberately small. The interesting parts are the data model and where validation lives, not the topology.

Request table (Dataverse)

The record. Holds requester, department, justification, total value and current state. State is a choice column driven by the process, never free text.

Request line table (Dataverse)

Line items in a one-to-many relationship with the request. This is the specific reason a flat SharePoint list stops being viable — a request with eight lines is normal.

Threshold configuration table

Value bands mapped to required approver roles, with effective dates. Maintained by finance. Historic rows are kept so an old approval can be explained against the rule that applied at the time.

Model-driven app

Finance and administrator experience — views, filtering, bulk action, related records. Generated from the model rather than hand-built.

Canvas app

Mobile submission and status checking for occasional users. Small surface, few fields, works offline for drafting.

Approval flows (Power Automate)

Triggered on state change. Resolve the approver from the threshold table and the requester’s department, send the approval, write the outcome back to the record.

Business rules and column security

Server-side validation and field-level visibility, so rules hold regardless of which client made the change.

Data flow

A requester submits through the canvas app, which creates a request record and its lines in Dataverse. Saving sets the state to "submitted", which triggers a flow. The flow reads the total against the threshold configuration effective on that date, resolves the required approver from the requester's department, and issues an approval. The approver's decision writes back to the record, moving it to the next state — which either triggers the next approval in the chain or closes the request. Finance works in the model-driven app throughout, and can intervene on any record without leaving the audit trail, because every change is captured by Dataverse auditing rather than by the app.

Integrations

  • Microsoft Entra ID for identity and for resolving a requester’s department and manager
  • Microsoft 365 for approval notifications in Teams and Outlook
  • Dataverse auditing as the decision history, rather than a hand-rolled log table
  • Optional one-way export to the finance system for approved requests, deliberately out of scope for the first release

Security boundaries

  • Dataverse security roles determine who sees which requests; requesters see their own and their department’s
  • Column-level security hides commercially sensitive fields from roles that do not need them
  • Business rules run server-side so validation cannot be bypassed by a client
  • Attachments inherit the record’s security rather than living in a separately-permissioned location

Human in the loop

  • Every approval is an explicit human decision — there is no auto-approve band
  • Finance can reassign or reject with a reason, and the reason is mandatory
  • Threshold changes are made by finance and take effect from a date, not retrospectively
09

Technology Stack

Nothing exotic. The judgement is in which pieces are used for what, not in the list.

Data

DataverseRelational modelDataverse auditingBusiness rules

Application

Model-driven appPower Apps canvas appPower Platform solutions

Automation

Power AutomateApprovalsState-driven triggers

Identity

Microsoft Entra IDDataverse security rolesColumn security

Experience

Microsoft 365Teams approvalsOutlook actionable notifications

Lifecycle

Managed solutionsDev and production environmentsSolution ALM
10

Architecture Decisions

Four decisions that shaped the build. Two of them are the ones I would defend hardest a year later.

Decision 01

Dataverse rather than a SharePoint list, on the strength of line items rather than volume

The usual argument for Dataverse is scale, and it is usually premature. Here the deciding factor was structure: a capex request has multiple line items, each with its own value and category, and finance reports across lines rather than requests.

Alternatives considered

  • SharePoint list with a delimited lines column
  • Two related SharePoint lists
  • Dataverse with a proper one-to-many relationship

Reason

Modelling a one-to-many relationship in SharePoint means either encoding lines into a single column, which makes reporting painful, or maintaining referential integrity by hand in a flow. Both are workarounds for a missing relational model. Delegation limits would have arrived later anyway, but they were not the reason.

Benefits

  • Reporting across line items is straightforward
  • Referential integrity is the platform’s problem
  • Auditing comes built in
  • Column-level security becomes available

Trade-offs

  • Premium licensing for every user who touches the app
  • Heavier to change
  • Requires more platform knowledge to support

Risks

  • Licensing cost being discovered late in the business case
  • Team lacking Dataverse experience to maintain it

Decision 02

Put approval thresholds in a configuration table, not in flow logic

Thresholds change, usually at year end, and always with less notice than anyone would like.

Alternatives considered

  • Conditions inside the flow
  • Environment variables
  • A dated configuration table in Dataverse

Reason

Conditions in a flow mean a developer and a deployment for a policy change. Environment variables handle the value but not the history. A dated table lets finance make the change themselves and preserves what the rule was when a past request was approved — which is the question audit actually asks.

Benefits

  • Finance owns policy without a change request
  • Historic approvals remain explainable
  • Rules are visible rather than buried in a flow

Trade-offs

  • One more table to maintain and secure
  • Slightly more logic in the flow to resolve the effective row

Risks

  • Misconfigured effective dates creating a gap where no threshold applies
  • Finance editing production configuration without review

Decision 03

Two front ends instead of one compromise app

Finance needs a dense, view-driven interface. Requesters need six fields on a phone. A single app serving both had been the initial assumption.

Alternatives considered

  • One canvas app for everyone
  • One model-driven app for everyone
  • Model-driven for finance plus canvas for requesters

Reason

A single canvas app would mean hand-building the grids, filtering and bulk actions that a model-driven app generates for free. A single model-driven app would give occasional mobile users a heavy interface for a six-field form. Splitting costs one extra artefact and removes the compromise from both sides.

Benefits

  • Finance gets views and bulk actions with no UI maintenance
  • Requesters get a form that fits a phone screen
  • Each app can change without regression-testing the other

Trade-offs

  • Two apps in the solution
  • Two places to check when the model changes
  • Slightly more onboarding to explain

Risks

  • The two apps drifting in validation behaviour if rules are put in the apps rather than in Dataverse

Decision 04

No auto-approval band, despite the obvious efficiency case

There was a reasonable proposal to auto-approve anything under a low value to reduce approver load.

Alternatives considered

  • Auto-approve under a threshold
  • Auto-approve with post-hoc sampling
  • Require a human decision on everything

Reason

Low-value requests are exactly where split purchasing hides — three requests just under a threshold instead of one above it. Removing the human at that band removes the control at the point where it does the most work. The approver load at low values turned out to be modest anyway once notifications were batched.

Benefits

  • Control stays where the risk concentrates
  • Simpler to explain to audit
  • No threshold to game

Trade-offs

  • More approvals for managers to action
  • Slower cycle time on trivial requests

Risks

  • Approver fatigue leading to rubber-stamping
  • which is a real risk and is monitored rather than assumed away
11

Implementation Approach

Short phases with something usable at the end of each. The pilot deliberately runs against the real process rather than a rehearsal.

  1. 01Process discovery

    Weeks 1–3

    Sit with finance and two requesting departments. Map the process as performed, including the informal pre-approval step. Get the threshold rules out of people's heads and into a written table that finance signs off.

    Milestones

    • Process mapped as performed
    • Threshold table agreed and signed off
    • Exception list documented

    Success measures

    • Exceptions identified
    • Requests sampled from the last quarter
  2. 02Data model and rules

    Weeks 3–6

    Build the Dataverse model — request, lines, threshold configuration — with business rules and security roles. No app yet. Load a quarter of historic requests to test the model against reality rather than against assumptions.

    Milestones

    • Model built
    • Historic data loaded
    • Security roles tested per persona

    Success measures

    • Historic requests loading without manual fixes
  3. 03Finance experience

    Weeks 6–9

    Model-driven app with the views finance actually needs, which are rarely the ones specified up front. Approval flows wired to state changes and resolving against the threshold table.

    Milestones

    • Model-driven app usable
    • Approval chain working end to end
    • Threshold resolution verified against historic cases

    Success measures

    • Historic approvals reproduced correctly by the rule engine
  4. 04Requester experience

    Weeks 9–11

    Canvas app for submission and status. Tested on the devices people actually carry, not on a desktop browser at a comfortable window size.

    Milestones

    • Canvas app on real devices
    • Draft-offline behaviour confirmed
    • Attachment handling verified

    Success measures

    • Time to submit a request on a phone
  5. 05Parallel run

    Weeks 11–15

    One department runs both the old and new process together. This is expensive and worth it — it is where the undocumented exceptions surface, and it gives finance a fallback while confidence builds.

    Milestones

    • Parallel run complete
    • Exceptions handled or explicitly deferred
    • Finance signs off cutover

    Success measures

    • Discrepancies between old and new outcomes
  6. 06Rollout and handover

    Weeks 15–20

    Department by department. Handover matters more than launch: name an owner, write down how to change a threshold, and make sure someone other than the builder has deployed the solution at least once.

    Milestones

    • All departments live
    • Owner named
    • Solution deployed by someone other than the builder

    Success measures

    • Departments migrated
    • Support requests per department after two weeks
12

Business Impact

These are the numbers this design is meant to move, with the reasoning behind each so you can argue with the logic rather than the digit.

None of these are measured. They come from a design, not a deployment. Where a figure depends on something that was never measured, that is said rather than smoothed over.

Time from request to decision

-45%

Projected

Modelled on removing the wait for a person to notice an email and the wait for finance to reconcile against a threshold table. Assumes approver responsiveness stays the same — if the delay is people not looking at approvals, this design does not fix that and the figure will not hold.

Requests requiring finance to chase information

-60%

Estimated

Estimated from mandatory fields and server-side validation replacing a template people fill in partially. Derived from the proportion of sampled historic requests that came back incomplete.

Time to answer an audit query on a past approval

Minutes rather than days

Illustrative

Illustrative and deliberately not a percentage. It moves from reconstructing a mail thread to opening a record. The real number depends entirely on how the query is phrased.

Manual register maintenance

Eliminated

Projected

The register becomes a view over the data rather than a maintained artefact. This one is close to certain by construction, but it is still a design intent rather than an observation.

Licensing cost per requester per month

Premium tier required

Illustrative

Deliberately not a number — it depends on agreement, region and user counts. Flagged because it is the single most common reason this design gets rejected at business-case stage, and it should be priced before the build, not after.

13

Risks & Constraints

Including the two that most often kill this kind of project, neither of which is technical.

RiskCategoryImpactProbabilityMitigation
Premium licensing cost is discovered after the design is agreedFinancialHighHighPrice the licensing in discovery, not at the end. If the cost cannot be justified for occasional requesters, that is an argument for Option C or B, and it is better made in week two than week twelve.
The informal pre-approval step is not designed for, so people keep doing it outside the systemOrganizationalMediumHighModel it explicitly as a draft-with-comment state rather than pretending it does not happen. A process that ignores how people actually work gets worked around.
No owner after go-live, so the app quietly rotsOperationalHighMediumName the owner during discovery, not at handover. Make someone other than the builder deploy the solution before cutover, so the knowledge is demonstrably transferred rather than assumed.
Validation logic drifts into the two apps instead of DataverseTechnicalMediumMediumKeep rules server-side as a standing principle and check it in review. Client-side validation is a convenience for the user, never the control.
Undocumented exceptions surface only at rolloutOperationalMediumHighThe parallel run exists for this. Budget for it properly rather than compressing it when the schedule slips — it is the phase that gets cut and the one that pays for itself.
Approver fatigue turns approvals into rubber-stampingOrganizationalMediumMediumBatch notifications, keep the approval screen short, and monitor decision times. If approvals are consistently actioned in under a few seconds, the control is not working and that is worth knowing.
14

Security & Governance

Who can see what

Dataverse security roles do the work here. Requesters see their own requests and, depending on the department, their team's. Finance sees everything. Column-level security hides commercially sensitive fields — supplier pricing, mainly — from roles that have no reason to see them. This is one of the concrete advantages over a list-based build, where field-level control is limited.

Evidence and audit

Dataverse auditing is the decision history. Building a custom log table is a common instinct and usually a mistake: it captures what the developer thought to capture, and it does not capture changes made outside the app. Platform auditing catches both.

Attachments inherit the record's security. Keeping evidence with the decision rather than in a separately-permissioned library is what makes the audit story hold together.

Change control

The solution moves between environments as a managed solution. Finance can change thresholds in production because that is configuration data with its own history — but they cannot change the app, and the distinction is enforced by security roles rather than convention.

Data retention

Capex records usually carry a statutory retention period, and it is normally longer than anyone's instinct. Worth confirming with finance during discovery rather than assuming a default, because retroactively extending retention on data you have already deleted is not a solvable problem.

15

Trade-offs

What this design gives up. The first one is the significant one.

Dataverse capability vs Licensing cost

The relational model, security and auditing are genuinely better. They are also premium-licensed per user. For a process with many occasional requesters this can be the deciding factor, and it should be priced honestly rather than argued around.

Two front ends vs One thing to maintain

Splitting the finance and requester experiences removes a compromise from both. It costs an extra artefact in the solution and a little more onboarding.

Server-side rules vs Snappier client validation

Validation in Dataverse means a round trip where a canvas app could check instantly. Accepted because a rule that only exists in the client is not a rule.

Human approval on everything vs Cycle time on small requests

No auto-approve band means more approvals. Accepted because the low-value band is where split purchasing hides.

Configuration-driven thresholds vs Simplicity of the flow

Resolving an effective-dated rule is more logic than a hard-coded condition. Worth it the first time a threshold changes mid-year and someone asks what the old one was.

16

Strategic Recommendation

The recommendation, and the condition that would change it.

Build Option D — Dataverse with a model-driven app for finance and a canvas app for requesters — but only after the licensing cost for occasional requesters has been priced and accepted. If it has not been, build Option C and revisit.

The line-item structure is what settles it. A capex request with multiple lines, reported across lines rather than requests, is a relational problem, and every SharePoint-based approach to it is a workaround for a missing relationship. Dataverse also brings auditing and column security, which are exactly the controls the audit weakness demanded in the first place. Option A deserves more respect than it usually gets — for a low-volume process with a clear owner it is often the right answer, and it is worth ten minutes of honest discussion before being dismissed. Option B should be checked before anything is built, because an existing requisition module that nobody switched on is a real possibility and would make this whole exercise unnecessary. The reason Option D wins here is structure and evidence, not scale.

Conditions

  • Premium licensing for occasional requesters is priced and accepted before the build starts
  • Finance signs off the threshold table in discovery — if that stalls, the project stalls, and better in week two
  • An owner is named before go-live, not at handover
  • The parallel run is protected in the schedule rather than treated as contingency

Risks

  • Business case unravelling on licensing after design is complete
  • Discovery under-running and exceptions surfacing at rollout
  • The builder leaving before anyone else has deployed the solution

Next steps

  • Check whether the existing finance system already has a requisition workflow that was never enabled
  • Price premium licensing against the realistic requester count, including occasional users
  • Run the process discovery and get the threshold table signed off
  • Load a quarter of historic requests into a draft model before building any UI
  • Agree who owns this in twelve months, and write it down
18

References

Public product documentation used to check platform behaviour and limits.

  1. What is Microsoft Dataverse? — Microsoft Learn · Documentation Source (opens in a new tab)

    Relational model, business rules and auditing behaviour.

  2. Model-driven app overview — Microsoft Learn · Documentation Source (opens in a new tab)

    Basis for the two-front-end decision.

  3. Understand delegation in a canvas app — Microsoft Learn · Documentation Source (opens in a new tab)

    Delegation limits referenced when assessing the SharePoint list option.

  4. Develop offline-capable canvas apps — Microsoft Learn · Documentation Source (opens in a new tab)

    Offline drafting for the mobile submission experience.

  5. SharePoint Online limits — Microsoft Learn · Documentation Source (opens in a new tab)

    List thresholds considered against expected volumes.

  6. Power Automate limits and configuration — Microsoft Learn · Documentation Source (opens in a new tab)

    Flow run and throughput limits for the approval chain.

  7. Power Platform licensing and pricing — Microsoft Learn · Documentation Source (opens in a new tab)

    Premium licensing that the recommendation is conditional on.

  8. Application lifecycle management (ALM) basics — Microsoft Learn · Documentation Source (opens in a new tab)

    Managed solution promotion between environments.

17

Key Takeaways

01

The app is the smallest part. The data model, the rules and the ownership question take the time.

02

Choose Dataverse over a list for structure, not for scale — line items and reporting settle it long before row counts do.

03

Put policy in configuration with effective dates. Thresholds in flow conditions mean a developer is needed for a business decision.

04

Design for the informal step. If people pre-check with finance before submitting, model it or they will keep doing it outside the system.

05

Licensing kills more of these projects than architecture does. Price it in week two.

06

Not everything should be rebuilt. Fixing ownership and consolidating the rules is sometimes the whole answer, and it costs almost nothing.

07

Handover is the deliverable. If only the builder has ever deployed it, it is not finished.

Working through a similar architecture or AI decision? I am happy to talk it through.

Get in touch