Building in Public #13

Aizat Rahim · CEO & Co-Founder, Borong

A little throwback topic: it’s December 2025, and Borong is almost turning 9. I pulled the same yearly sales from three places and got three different totals, millions of ringgit apart. Nobody could tell me on the spot which one was right.

We’ve spent hundreds of thousands, if not millions, on Superset, Snowflake and the people to run them, and I still couldn’t answer the most basic question: how much did we sell & earn this year?

There’s a trend I’ve watched damage a lot of companies, and we lived it. Companies hire an excessive number of “data engineers/architect” or “business intelligence analysts” or “ML/AI Engineers”, buy the fancy stack, get beautiful charts, and nobody trusts a single one of them. Our CFO Wui Li stopped using the dashboards and went back to the accounts for investor reporting.

The platform is rarely the problem. Databricks, Snowflake, Superset, they all work. The problem is people. When I took over as CEO, I inherited a setup that had grown over the years with good intentions and no shared rulebook. Nobody had agreed on what a sale was, so ops counted GEV and finance counted the revenue. Orders moved from pending to confirmed to completed with no audit trail. Every team ran its own filters, and each was right by its own definition. Month-end adjustments lived in someone’s head. And everyone got comfortable with “5% variance is normal for B2B commerce”. And FFS, at our size, 5% is millions and millions.

But thankfully it’s finally getting sorted. Azrul came in as CTO in May, looked at it and said what I needed to hear: throw it out. Reporting is moving into the platform, where the transactions actually live.

If you’re heading down the same road:

  1. Write the definitions before you buy anything. What counts as a sale, when it counts, and what happens when it’s cancelled. One page, signed by the CEO, CFO and CTO.
  2. Give every number one owner. Two teams pulling the same metric with different filters means two metrics and no truth.
  3. Lock the month. Once finance closes (typically 7/9/15th of each month), the numbers freeze. Anything that moves after goes into a separate prior-period bucket everyone can see.
  4. Log every status change. If an order can move without a trail, your dashboard is a guess.
  5. Only then hire engineers. Two good ones who understand the business beat ten who don’t. A big data team on top of undefined data just automates the confusion faster.

And as usual, still here.. And still rowing ;)

Back to all posts