perfectdesign.

Business systems

Workflow automation

Most business processes are not really in a system. They live in a spreadsheet, a group chat and somebody's memory, and they work right up until the person holding them is on leave.

In short

Workflow automation turns one repeated process into an explicit rule: a defined event, the conditions that qualify it, an authorised action, and a record that proves what happened. It is worth doing when the process is observable, repeated and reasonably stable, and worth delaying when nobody can yet say who owns it or what the exceptions are. The hard part is never the software. It is deciding what should happen when the normal path does not.

Written for an operations lead or owner with a manual process in mind, deciding whether and how to automate it · 7 min read

What you are actually replacing

The spreadsheet and the group chat are not foolish choices. They are fast, they cost nothing and they bend to whatever happened today. What they cannot do is tell you who changed a figure, prove an approval took place, stop the same job being started twice, or keep working when the person who understands the file is away.

So the useful question is not whether to automate. It is which parts of a process genuinely need to be controlled and which parts are fine as they are. A workflow worth building has a recognisable start, a recognisable end, an owner, an outcome that repeats, and at least one point where getting it wrong costs real money or real trust.

The cheque is finishing. Under one cheque per person per year, and falling by a fifth annually. Any process that still assumes a cheque in the post is quietly adding a week to getting paid. A full text version follows.

The cheque is finishing

Published statistic. Under one cheque per person per year, and falling by a fifth annually. Any process that still assumes a cheque in the post is quietly adding a week to getting paid.

Source: Bank Negara Malaysia: Annual Report 2025 and Payment Statistics T1. Reviewed .

Read the graphic as text
  • 2020: 1.84.
  • 2021: 1.48.
  • 2022: 1.41.
  • 2023: 1.22.
  • 2024: 1.17.
  • 2025: 0.92. 31.4m total

Chart scale: Cheques issued per Malaysian, per year.

Download this infographic (SVG)

Map the process before you automate it

Watch the process as it actually runs before writing a rule about it. Who performs each step. Which record changes, and where that record lives. Where a person applies judgement, and what they are weighing when they do. Which exceptions came up, and how often. What currently proves the work was finished.

That last one catches people out. In most manual processes the proof of completion is a message saying it is done. If you cannot say what would count as evidence today, the automation will not produce it either, and you will end up trusting the new system exactly as much as you trusted the chat thread.

Frequent work that is highly variable, has no clear owner, or runs on data nobody trusts is not ready. That is not a refusal, it is a sequence. Clarify the process, then decide whether a rule can carry part of it.

Trigger, conditions, authorised action, record

Every workflow has the same shape underneath. An event happens. Conditions decide whether this instance qualifies. An authorised action runs. A record is written that proves it did.

Take a service enquiry as a teaching example. The enquiry arriving is the event, but it is not yet a job. It becomes one when the required fields are present and somebody with the right role has marked it ready for review. Only then does the automation create the linked operational task and write the decision to the record. Odoo documents the same pattern for its own automation rules, where triggers and optional conditions decide whether predefined actions run, and notes that when several actions run in sequence the order matters because a later action may read data an earlier one changed. That is one product's documented behaviour rather than a universal rule, but the ordering trap is general.

Write the negative cases at the same time as the happy path. Incomplete input is flagged rather than processed. An unauthorised user is refused rather than quietly allowed through. A duplicate submission does not create a second operational record, because two jobs from one enquiry is the sort of error a customer discovers before you do.

The shape under every automated rule. Write the negative cases beside the happy path, or the rule only knows how to succeed. A full text version follows.

The shape under every automated rule

Editorial framework. Write the negative cases beside the happy path, or the rule only knows how to succeed.

Basis: IBM: What is workflow automation?. Reviewed .

Read the graphic as text
  • Event. Something happened that could start the rule
  • Conditions. Whether this instance actually qualifies
  • Authorised action. Run only by a role permitted to run it
  • Record. Evidence that proves it ran, and when
Download this infographic (SVG)

A worked example

The company, roles, statuses and systems below are fictional teaching assumptions. Any numeric target stays as to agree until you set one, and the acceptance evidence describes tests to run rather than tests already passed.

Illustrative example: from service enquiry to a controlled operational handoff
Workflow stepAssumed actorProposed system responseExceptionAcceptance evidence to collect
Observe the manual intakeService coordinatorRecord the enquiry and assign it a unique referenceRequired details are missing, or the request is a duplicateTest that incomplete input is flagged and that a duplicate does not create a second operational record
Define trigger and conditionsProcess ownerWhen the status becomes ready for review, verify the required fields and queue the approvalThe status changes without the required evidenceTest that the action stays blocked and that the missing evidence is visible to whoever has to fix it
Authorised actionAssumed approverApprove the handoff and create the linked operational taskThe user lacks permission, or the request is rejectedTest authorised and unauthorised roles separately, and confirm the decision is recorded with its author and time
Retry and reconciliationSystem operatorAfter a failed handoff, follow the agreed retry policy and compare the intended task with the destination recordRepeated delivery, a timeout, or records that do not matchTest that repeated input does not create an extra task, and that an unresolved mismatch lands in an owned queue
MonitoringProcess ownerReview completion and exception evidence on an agreed cadenceA case is stalled, or has no ownerTest that the case appears in the agreed review view and can be reassigned

Exceptions are the system, not the edge

Two different things get called failure and they need separate handling. A business exception is a legitimate outcome you did not want: a missing approval, a customer who withdraws, a request outside policy. A technical failure is a system that did not answer: a timeout, a rejected write, an event delivered twice.

Stripe's webhook documentation is a useful attributed example of why the technical side needs designing rather than assuming. It describes asynchronous delivery, events that are not guaranteed to arrive in order, duplicate events, retries, and the advice to acknowledge quickly and do the slower work afterwards. Those are that product's documented behaviours, not universal laws, but any integration receiving events from another system has to answer the same questions.

The controls that follow are few and none of them are optional. Make repeated input safe, so the same event arriving twice produces one outcome. Decide the retry policy deliberately, including when to stop trying. Reconcile what you intended against what the destination actually holds. And when something cannot be resolved, put it in front of a named person with enough evidence to investigate. A failure that disappears into a log is not handled, it is hidden.

Approvals, permissions and the audit trail

Approval, correction, override and escalation are four separate human actions and each needs its own owner. Who may approve a step. Who may correct data after the fact. Who may override a blocked action, and what that override requires. Who is told when a case has waited too long.

Each of those decisions should leave a record with an author, a time, and a reason where a reason matters. That is what turns an automated process into something you can defend in a dispute, and it is the feature people most regret leaving out, because it cannot be reconstructed afterwards.

Permission is also not the same thing as signing in. Authentication proves who somebody is; permission decides which records they may read, which fields they may change and which actions they may authorise. Both have to be designed, and the second is where the interesting mistakes live. Accounts and portals covers the sign-in and role layer underneath a workflow.

Four human acts, four separate owners. Each act needs an author, a time and a reason, because none can be reconstructed later. A full text version follows.

Four human acts, four separate owners

Editorial framework. Each act needs an author, a time and a reason, because none can be reconstructed later.

Basis: IBM: What is business process automation?. Reviewed .

Read the graphic as text
  • Approve. Who may let a blocked step proceed
  • Correct. Who may change data after the fact
  • Override. Who may bypass a rule, and on what basis
  • Escalate. Who is told when a case has waited too long
Download this infographic (SVG)

Which systems, and whether they can genuinely talk

Bring this list to scoping: the source system, the destination system, the identifier that links a record across both, the fields the rule reads, which system is the source of truth when they disagree, the read and write permissions available, the role that approves, and who maintains the whole thing afterwards.

An API existing does not establish feasibility. What matters is whether the permissions you need can actually be granted, whether the data is clean enough for a rule to trust, whether the supplier's terms allow what you intend, and who is accountable when the other system changes. We check that before promising a connection rather than after. That work is covered on CRM and integrations, and the screens your team watches while the workflow runs are covered on admin dashboards.

The e-Invoice mandate is already fully live. Every phase has passed. If a system issues invoices, e-Invoice is not an upcoming project, it is a current obligation with a turnover threshold attached. A full text version follows.

The e-Invoice mandate is already fully live

Published statistic. Every phase has passed. If a system issues invoices, e-Invoice is not an upcoming project, it is a current obligation with a turnover threshold attached.

Source: Inland Revenue Board of Malaysia: e-Invoice implementation timeline. Reviewed .

Read the graphic as text
  • Above RM100 million. Mandatory since 1 August 2024
  • RM25 million to RM100 million. Mandatory since 1 January 2025
  • RM5 million to RM25 million. Mandatory since 1 July 2025
  • Up to RM5 million. Mandatory since 1 January 2026
  • Under RM3 million. Exempt, unless the company belongs to a larger group
Download this infographic (SVG)

How you will know it works

Acceptance evidence and ongoing measures do different jobs. Acceptance tests show that the agreed path and the exceptions behave as specified, and they run before release. Operational measures show what happens afterwards, and they only mean something with a denominator and a baseline behind them.

Useful categories, without inventing values for them: eligible cases, completed cases, failed actions, duplicate attempts, manual corrections, cycle time and unresolved exceptions. Set a target once you have watched the real numbers for a period, rather than writing one into a proposal.

Then assign the roles that outlive the build. Business ownership of the process. Technical maintenance of the automation. Exception review, which is a daily habit rather than a job title. And change approval, because the first request to alter a rule will arrive sooner than you expect. Those are frequently four different people.

What to bring

One workflow, not five. The people it affects, the tools it already touches, the exceptions you know about, the constraints that cannot move, and any real deadline or budget range. Tell us about the process and we will say whether it is ready to automate, what we would control first, and where clarifying the process would serve you better than building anything at all.

What you get

What is actually delivered

01

A mapped process

The steps as they actually run, the records that change, the points of judgement and the exceptions, written down before a rule is designed.

02

Explicit trigger and conditions

The event, the conditions that qualify an instance, the authorised action and the record written afterwards, including the negative cases.

03

Approval and override rules

Who approves, who corrects, who overrides and who escalates, with each decision recorded against an author and a time.

04

Permission model

Roles defined by what they may read, change and authorise, kept separate from the question of who can sign in.

05

Exception queue with an owner

Business exceptions and technical failures routed to a named person with enough evidence to investigate, instead of into a log nobody reads.

06

Safe repeats and reconciliation

Duplicate events producing one outcome, a deliberate retry policy, and a check that the destination holds what you intended.

07

Integration built on checked access

Connections to the systems whose permissions, data quality and terms were confirmed first, with the direction of each flow agreed.

08

Acceptance tests and a monitoring view

The agreed path and its exceptions exercised before release, plus the review screen where stalled and unowned cases surface.

How it runs

Understand the process, then control one part of it

We scope from the process as it runs today, not from a feature list, and we agree the exceptions before anyone writes a rule.

  1. 01

    Observe the process

    We walk the steps as they happen: who does what, which records change, where judgement is applied, and what currently proves completion.

  2. 02

    Decide what is worth controlling

    Some of the process becomes a rule, some stays with a person, and occasionally the answer is to fix the process and build nothing yet.

  3. 03

    Write the rule and the exceptions together

    Trigger, conditions, authorised action and record, alongside the duplicate, the missing approval and the failed write.

  4. 04

    Check the systems before promising a connection

    Permissions, data quality, ownership and third-party terms are confirmed, because an available API is not the same as a feasible integration.

  5. 05

    Build, test both roles, hand over

    Authorised and unauthorised paths are exercised separately, the exception queue is tested, then the code and accounts are handed to you.

Proof

Work you can click through

PITC Training is real client work, live on the client's own domain: enquiries captured on the platform are stored and synced into the client's Zoho CRM, with courses, schedules and leads managed through a custom admin console. VITALE Back Office is a concept prototype we built ourselves, not client work, shown here for its deterministic commission cycle, a rules-driven run that can be repeated and inspected. No performance or business outcome is claimed for either.

Concept prototypes are labelled as prototypes everywhere they appear. They demonstrate what we can build, not work delivered for that named client. More client work is going live and will be added as it does.

How we work

The parts people ask about before they commit

How we build

React first, other languages when a project needs them

We build in React by preference, on both web and mobile, and we work in other languages when a project genuinely calls for it.

Timeline

Project dependent, and often quicker than expected

Timelines are project dependent. A focused build can go live in about a week, while a larger platform takes longer once scope is agreed.

Ongoing care

Quoted with the project, not bolted on

For a more complex website or a system with a real backend, ongoing care starts from RM 250 a month, with the plan confirmed against what was actually launched. Care is quoted with the project, not bolted on afterwards.

Getting hold of us

Normally under one working day

We normally respond to a support request in under one working day, and we work to solve problems as fast as we can. That is how we normally work rather than a contractual guarantee, and responding is not the same as resolving. If your operation needs a formal response or resolution commitment, we can write one into your scope.

Ownership

Everything belongs to your business

You own everything we build for you: the code, the content, the domain, the hosting account and every third-party account opened for the project. There is no lock-in. If you move to another provider, everything goes with you and we help with the handover.

  • Source code, handed over in your own repository
  • Domain and DNS, registered to your business
  • Hosting and every service account, in your name
  • Analytics, search and ad accounts, with us as a manager you can remove
  • All content, media and data in the system

Questions

Asked about workflow automation

Straight answers to what people ask before they commit. Anything else, message us.

What does workflow automation cost?

Our published website packages are on the pricing page. A workflow is quoted against the scope we agree rather than sold as a package, because the work is decided by how many exceptions have to be handled and what has to be connected, not by how many screens there are.

Do we need custom software, or can we configure what we already have?

Often you can configure what you already run, and we will say so when that is the honest answer. Custom becomes the better option when the rules do not fit the product, when the audit trail matters more than the product provides, or when the workarounds have quietly become the process. That judgement comes after we look at the process, not before.

How long does it take?

Timelines are project dependent. A focused build can go live in about a week, while a larger platform takes longer once the scope is agreed. With workflow work the pacing item is usually the integration and the exception handling rather than the interface.

What happens when the automation gets something wrong?

It should stop and tell somebody, which is why the exception queue and its owner are scoped at the same time as the happy path. An unresolved case that sits in a log is the failure mode we design against, because nobody discovers it until a customer does.

Will our team lose visibility of what is happening?

The opposite, if it is built properly. A manual process is visible only to the people in the thread. An automated one should have a review view showing eligible cases, completed cases, failures and anything stalled, which is usually the first thing an operations lead actually uses. That surface is covered on admin dashboards.

Can it connect to the system we already use?

Possibly, and it depends on more than whether an API exists. We check the permissions available, the state of the data, the supplier terms and who is accountable when that system changes, then say what is feasible. That work is covered on CRM and integrations.

Should we automate everything at once?

No. One workflow, run for a period, with the exceptions reviewed by a person who can still overrule it. What you learn in that period usually changes the second workflow, and it is far cheaper to learn it on one process than on six.

Where to go next

Sources

Tell us what you need built

We will show you the closest thing we have already built, then scope the real version against your requirements.