Businessdatainsights

Five engagement patterns, written out in full

These cases are generalised composites of how we work. No client is named. Figures are illustrative of the scale of the problem, not a claim about a named company’s results. If a number looks precise, treat it as a sketch of magnitude.

Service floor and kitchen in a multi-site F&B group

Sector & size

Regional F&B group, eleven Singapore sites

Turnover in the low tens of millions of Singapore dollars. Eleven sites, a central kitchen, and a finance team of four. Books in Xero.

The situation. Month-end in Xero was respectable. Site profit was a quarrel. Prime cost moved with whoever built the weekly file, and a manager could not see a bad Tuesday until the following period. Discounting on weekday lunch looked like volume in the till and a hole in the P&L later.

What we built. A daily join of POS tickets, a recipe-cost table and Xero invoices, stored in BigQuery, with a Looker Studio view per site and a group roll-up. Prime cost had one definition. Waste, comps and staff meals had their own lines. A short dictionary sat next to the model so labour meant the same thing in the kitchen and in the board pack.

What changed. Site reviews moved to a weekly conversation with a figure both sides accepted. Two sites that looked healthy on revenue were visibly diluting margin on discounting. The group put a cap on those weekday offers. The monthly pack stopped arriving as a separate invention.

  • Stack: Xero, POS export, Google Sheets (recipes), BigQuery, Looker Studio
  • Duration: eight weeks, then a monthly desk for two cycles
Illustrative composite drawn from our engagement patterns. No client is named.
Software company looking at a board pack on screen

Sector & size

B2B SaaS company after a funding round

Recurring revenue in the mid single-digit millions of Singapore dollars, a few hundred logos, a finance team of three. Ledger in NetSuite. Collections in Stripe.

The situation. The round brought a board that asked for new logos, expansion and churn as separate stories. NetSuite revenue was clean on invoice date. The product database thought in seats and calendar months, which made a cohort look healthier than the contract. The board pack was a deck that had to be translated in the room.

What we built. A cohort model that recognised revenue the way the contract actually worked, with contribution after hosting, payment fees and a defined slice of success-team cost. Five board questions sat on the opening page, each with a figure and a reconciliation to the monthly close. Sheets held the scenario layer the CFO still wanted in a live meeting.

What changed. The board stopped treating net new ARR as one number. Pricing on a mid-tier plan was revised once year-one contribution showed where discounts were eating the cohort. The finance lead could answer the first question from the chair without turning to a second file.

  • Stack: NetSuite, Stripe, BigQuery, Sheets, Looker Studio
  • Duration: six weeks
Illustrative composite drawn from our engagement patterns. No client is named.
Freight operations desk with job files and screens

Sector & size

Freight forwarder with a regional desk in Singapore

A few hundred active customers, a mix of air and sea, books in SAP Business One, operations in a job system that exported slowly. Finance team of five, including a credit controller who lived in a separate aged-debt file.

The situation. Top customers were known by revenue. Contribution after trucking, storage, detention and overtime was a rumour. Two busy routes looked important in the weekly sales flash and quietly lost money once the true cost of a job was attached. Cash surprises arrived in the week a large job paid late.

What we built. A job-level margin model from the operations export and SAP Business One. A weekly aged-debt view the credit controller and the commercial lead could both open. A thirteen-week cash forecast fed by the same invoices, with collection days as a named driver. Power BI held the living views. PostgreSQL held the named tables.

What changed. Two routes were repriced or quietly de-emphasised. Collection calls started from a shared list. The cash squeeze that used to arrive as a surprise in week nine was visible in week three.

  • Stack: SAP Business One, operations CSV, bank files, PostgreSQL, Power BI, Sheets
  • Duration: ten weeks
Illustrative composite drawn from our engagement patterns. No client is named.
Clinic group leadership reviewing utilisation figures

Sector & size

Clinic group with several rooms across Singapore

A handful of sites, books in Xero, appointments in a clinic system, a finance lead sharing a monthly spreadsheet. Revenue in the low-to-mid millions of Singapore dollars.

The situation. Rooms looked busy. Margin by service was a guess. Some high-prestige treatments were quietly expensive once clinician time, consumables and room occupancy were attached. The annual budget aged badly after the first hiring change. The pack mixed cash and accrual without saying so.

What we built. A utilisation view by room and by clinician, a margin model by service line reconciled to Xero, and a driver-based budget with a quarterly review calendar. Chair-hour was the unit. The pack opened with utilisation, contribution and cash, each on a page with a definition.

What changed. Two service lines were repriced. A hiring plan was delayed by a quarter once room utilisation was visible. The quarterly forecast review became a dated event with a pack. The finance lead could send the weekly view without spending Sunday night on it.

  • Stack: Xero, clinic-system export, Sheets, Looker Studio
  • Duration: seven weeks, with a quarterly review booked as an add-on
Illustrative composite drawn from our engagement patterns. No client is named.
Light manufacturing floor with batch materials and planning sheets

Sector & size

Light manufacturer with a Singapore plant and regional sales

Batch production, imported raw materials, books in SAP Business One, a small planning group and a finance team of four. Currency on inputs moved enough to matter.

The situation. Batch cost was calculated after the month had closed, which is another way of saying it arrived too late to change the next purchase. Scrap and overtime lived in narratives. The purchasing plan was a list, so a move in the rate became a hallway conversation. Inventory and cash were discussed separately.

What we built. A batch-cost model with scrap, overtime and a currency overlay on the main inputs. A purchasing plan that could take a rate move as a named scenario. A thirteen-week cash view that included the planned buys. Power BI held the cost views. Excel held the scenarios the GM still wanted to type into during a standing meeting.

What changed. Purchasing started from a plan with a currency case. Two SKUs that had looked fine on a blended margin were expensive once scrap was attached, and the run size was changed. Cash in the following quarter was discussed with the buys already on the page.

  • Stack: SAP Business One, planning export, bank files, Power BI, Excel
  • Duration: nine weeks
Illustrative composite drawn from our engagement patterns. No client is named.

How we judge whether it worked

Someone opens the report without us

The first test is whether the named owner refreshes the pack in the next cycle while we are on the side of the table. If the file only lives when we are in the call, the handover is not done.

The gap to the close sits inside an agreed threshold

Management figures should meet the ledger within a band you name in week one, often a small percentage of revenue or a fixed dollar amount. A pretty dashboard that cannot be tied to the close is a second set of books in all but name.

A price, mix or hiring decision uses the model

We look for one decision that moved because the figure was on the table: a discount cap, a delayed hire, a repriced route, a changed batch size. If the model is only admired, it has not yet earned its keep.

The next cycle runs without us in the chair

Handover is complete when the following month’s pack goes out with the owner’s name on the email, using the same files, without a rescue session. A retainer after that is optional support, not a hidden dependency.

What these numbers are and are not

Every figure on this page is an illustration of scale, drawn from patterns we see in Singapore mid-sized groups. They are not results of a named engagement, not a promise of what your pack will show, and not a substitute for a scope written after we have seen your books and your decision.

Tell us what decision is stuck

If one of these patterns sits close to the work in front of you, write to us with the decision that will not move. We will say on a scoping call whether a build of this shape is the right next step.

Request a scoping call