ZAF / WORKED EXAMPLE

From fragmented approvals to an accountable operational platform

A worked ZAF assessment: current state, evidence gaps, architecture boundaries, decision records and a phased verification plan.

The brief: make an approved decision traceable

A fictional institution operates a headquarters and six regional offices. Requests for operational expenditure move through spreadsheets, email and a small legacy application. Finance prepares a consolidated report by reconciling exports. Managers need to know what was requested, who approved it, which amount is authoritative and whether the report is current. The starting question is not which cloud or programming language to choose. It is where an institutional decision becomes authoritative, and how that decision remains explainable.

Scenario constraintWorking assumptionEvidence needed before contracting
People and scale120 named users; 20 concurrent users; two engineers supporting the serviceAccess roster, representative traffic and support capacity
ConnectivityBranch connections may fail for several hoursOutage history, device and power assessment
Information ownershipSensitive operational records remain under institutional controlClassification, hosting approval and retention decisions
RecoveryCandidate RPO: 24 hours; candidate RTO: 4 hoursBusiness impact assessment and successful timed restore
ReportingDaily report by 09:00 Central Africa TimeOwner-approved definitions and reconciliation sample

01 / Current state: follow one request

The sample journey is request → departmental review → finance approval → fulfilment → reconciliation. In this fictional baseline, each office assigns its own reference, email acts as the approval record and the report combines extracts taken at different times. A corrected spreadsheet can overwrite the version that an approver actually saw. These are deliberately constructed assessment findings, not observations about a named institution.

BoundaryAuthority todayFailure to investigate
Branch to reviewerSpreadsheet and email threadDuplicate reference, missing attachment or uncertain version
Approval to fulfilmentCopied status in legacy applicationAction performed after approval was changed
Operations to reportingManual export and reconciliationLate records and inconsistent reporting cut-off

02 / Assessment: ask what can be proved

An assessment would sample completed and rejected requests, examine role permissions and compare a report to its source transactions. Interviews explain intended practice; records and tests show actual behaviour. A recovery claim needs a restored environment and an observed duration. An access policy needs negative permission tests, not only a list of roles. Unknowns stay visible rather than being assigned a reassuring score.

  • Business owner: validate the approval path and exception authority.
  • Finance owner: approve metric definitions, cut-off and reconciliation rules.
  • System owner: demonstrate access boundaries, release history and restore procedure.
  • Data owner: approve classification, permitted destinations and retention.

03 / Gaps: rank consequences before features

PriorityGap in this scenarioConsequenceFirst verification
P1No authoritative approval versionExecution may not match the approved requestReplay a changed request through approval and fulfilment
P1Restore procedure has not been demonstratedAn incident may prevent recovery within the business windowRestore an isolated copy and verify record completeness
P2Exports use different definitions and cut-offsManagement compares incompatible figuresReconcile one known period using an agreed definition
P2Connectivity retries have no duplicate protectionA repeated submission may create two requestsRetry the same command after an ambiguous timeout

04 / Principles: make the decision rules explicit

  • One authoritative owner for each business fact; copies expose their source and freshness.
  • Authorization and workflow transitions are enforced on the server.
  • A submitted request records the version of the information being approved.
  • A retry must not silently create a second business operation.
  • Sensitive data placement and retention follow approved policy.
  • Architecture complexity must fit the people who will operate it.

05 / Recommended architecture

Start with a modular application and a relational database. Keep workflow, authorization, operational records and reporting responsibilities explicit within the application. This preserves a single transactional boundary for approval changes without requiring the team to operate several independently deployed services. The choice is provisional: it follows the assumed team size and workload, rather than a rule that monoliths are always preferable.

Proposed boundaries and flowsThe browser calls the API, which commits a PostgreSQL transaction. The worker reads the outbox and handles notifications and reporting. Simplified logical diagram; identity, attachments and backups are outside this drawing.BrowserUnsent draftsApplication APIPermissions and versionsPostgreSQLState · audit · outboxNotificationsAsynchronous effectsWorkerRetries and deduplicationReportingProjections and freshness
The browser calls the API, which commits a PostgreSQL transaction. The worker reads the outbox and handles notifications and reporting. Simplified logical diagram; identity, attachments and backups are outside this drawing.

The browser sends authenticated commands to an application API. The API checks permissions and the expected record version, then commits the approved transition, audit entry and any outbox event in one database transaction. An asynchronous worker handles notifications and builds report projections. Notification failure does not reverse an already committed approval. Consumers must tolerate duplicate delivery; an outbox alone does not establish end-to-end exactly-once processing.

Decision and asynchronous effectsA valid command is committed atomically; an unauthorized or stale command is rejected. Notifications are processed after commit and may be retried.CommandActor · key · versionServer checksAuthority · state · versionAtomic commitDecision · audit · outboxExplicit rejectionNo business state changeAsynchronous workIdempotent retries
A valid command is committed atomically; an unauthorized or stale command is rejected. Notifications are processed after commit and may be retried.

An auditable workflow history is not automatically tamper-proof. Administrative access, database privileges, retention, export verification and backup protection still require design. Attachment storage is a separate access-controlled boundary; it is omitted from the simplified diagram, along with the identity provider and backup destination.

Connectivity is a consistency decision

Phase one preserves a local draft and clearly marks it as unsent when connectivity is lost. No offline approval or execution is treated as final. After reconnection, the client submits with a stable command identifier and expected version. If the request changed while disconnected, the server rejects the stale transition and asks the user to review the current version. Lost responses are reconciled by looking up the command identifier. Offline finalization would require an explicit conflict and delegation policy; it is not promised by adding a cache.

06 / Technology mapping

CapabilityCandidate mappingReason and operating obligation
Business workflow and APIModular backend; final language selected with maintainersClear domain boundaries, permission tests and migration ownership
Transactional statePostgreSQLConstraints and transactions; test concurrency and restoration
Background workDatabase outbox and a small workerRecoverable retries, bounded batches, deduplication and visible failures
AttachmentsInstitution-controlled protected storageAccess checks, limits, retention and backup consistency
DeploymentVersioned containers on approved infrastructureDocument patching, secrets, rollback and recovery ownership
ReportingVersioned read models and reconciliation jobsExpose reporting cut-off, source coverage and rejected records

07 / Decision records and trade-offs

DecisionAlternative consideredAccepted costRevisit when
ADR-001: modular application firstIndependent microservicesShared release lifecycle; module boundaries need disciplineSeparate teams or measured isolation/scaling needs justify the operational cost
ADR-002: asynchronous notificationsSend notifications inside the approval transactionDelivery can be delayed; worker and retry operations are neededA time-critical delivery requirement is demonstrated
ADR-003: drafts offline, approvals onlineAllow final approvals offlineA branch cannot finalize during an outageThe institution approves conflict, delegation and reconciliation rules
ADR-004: daily reporting firstStreaming analytics platformUp to one reporting cycle of delayAn agreed decision requires fresher data and the team can support it

Kafka, Kubernetes and a separate warehouse are not phase-one requirements in this scenario. They may become appropriate when measured throughput, isolation, independent delivery or analytical history needs justify them. Adding them now would create operational responsibilities without answering the highest-ranked gaps.

08 / Verification and phased delivery

PhaseDeliverableExit evidence
DiscoverApproved current-state map, sample records and requirementsNamed owners resolve the approval and reporting definitions
DesignBoundary diagrams, data model, threat review and decision recordsStakeholders walk through normal, rejected and interrupted journeys
PilotOne branch and one request typePermission checks, concurrent update tests, retry tests and reconciliation pass
RecoverBackup and restoration exerciseTimed restoration meets approved objectives and reconciles known records
ExpandControlled rollout with operating handoverSupport ownership, exception handling and reporting freshness are demonstrated

A useful acceptance scenario submits the same request twice after a timeout and verifies that only one authoritative request exists. Another attempts to approve an outdated version and checks that the audit trail records the rejection without changing the approved state. A third pauses the worker, commits a valid approval and verifies that notification resumes after recovery. These checks test architectural promises rather than component installation.

09 / Executive insight

The recommended investment is an authoritative approval path and explainable reporting, delivered in small verifiable stages. The unresolved business decisions are data placement, retention, branch continuity policy and recovery objectives. No savings, fraud reduction, availability or throughput outcome can be claimed before a baseline and pilot exist. The architecture review produces an evidence-backed decision package; it does not replace institutional authority.

Technical references

Apply this approach to your context

A starting engagement examines one workflow, its data and its risks, then produces a current-state map and prioritized recommendations. Scope and fees are agreed before work begins.

Discuss an architecture review ↗