Hangry · 2024

The Right Tool for the Job

Internal Ordering, Internal Ops Dashboard
Outcome Replacement time 70% faster
Company Hangry Indonesia
Product Internal Ops Dashboard
Role Research, user interview, product thinking, writing UX copy, design
Team 1 designer, 1 PM, 2 engineers

Hangry isn't a typical F&B brand. It's a cloud kitchen. One physical outlet running multiple distinct brands simultaneously, each with its own menu, its own presence on GrabFood, GoFood, and ShopeeFood, and its own operational identity. By 2024, that model had scaled to over 150 outlets across Jakarta.

That complexity doesn't show up in the consumer experience. It shows up in operations. And consumer-facing tools, including Hangry's own app, were never built to handle it. Internal Ops Dashboard exists to fill that gap: an internal platform built specifically for how Hangry actually works.

This case study is about one module inside Internal Ops Dashboard: the replacement order tool. When a customer complaint qualifies for a food replacement, the CE team needs to act quickly and accurately. Before this existed, they were doing it through the Hangry App. That's where the problem started.

The brief came in October 2024. The CE team, ten agents, was handling food replacement orders every week across all of Hangry's brands, outlets, and sales channels. Every complaint that qualified for a replacement had to be handled individually.

I talked to Regina, the CE team leader. What surprised me most wasn't the volume. It was the time. One replacement order, done through the Hangry App, took up to ten minutes.

Regina called it a pain point. That felt like an understatement.

Time per replacement order
~10 min
Using the Hangry App, a consumer product never built for this workflow.
Replacements per week
150–200
Hangry runs multiple brands across 150+ outlets on three platforms, complaints come from everywhere.

Using the Hangry App for replacement orders wasn't just slow. It was the wrong tool for the job. The more I understood how Hangry's business actually worked, the clearer that became.

Four structural problems, all rooted in the same thing: a consumer product being asked to do something it was never designed for.

Problem 1

Menu coverage gap

Hangry App only shows menus sold directly to consumers. Items exclusive to GrabFood, GoFood, or ShopeeFood don't exist there.

When a menu wasn't available, CE reached out to the outlet directly, disrupting kitchen operations in the process.

Problem 2

Sub-brand gap

Hangry's sub-brands only exist on third-party platforms. Some sub-brand items appear under the main brand in the Hangry App, but many don't.

Same workaround. Reach out to the outlet directly, same disruption.

Problem 3

Pricing gap

The Hangry App shows consumer-facing prices. Every replacement placed through it was charged at full retail. No way to use internal pricing or COGS.

Every replacement cost more than it should have.

Problem 4

No centralization

Each CE agent used their own Hangry App account. There was no shared view. No way to track orders, monitor volume, or control costs across the team.

Regina had no visibility into what her team was doing.

The PM's brief came with a proposed direction: a form that CE fills to place a replacement order, with part of it shared to the customer to input their delivery address and location. A stakeholder also suggested extending this into a WhatsApp bot.

I mapped out both flows before we sat down together: me, the PM, and the engineers. Not to commit to either direction, but to have something concrete to pressure-test.

Flow option 1: WA Bot + Internal Ops Dashboard + Share Form Customer Reach out via WA Step 1 WA Bot Comms & form Step 2 Form shared to customer Fill address + pin point Step 3 CE review Check form in dashboard Step 4 Approve or reject? CE decides Step 5 Reject Notify customer Explain reason Approve Create replacement order Order pushed to outlet POS Step 6 Option 1: WA Bot + Internal Ops Dashboard + Share Form Flow option 2: Internal Ops Dashboard + Share Form Customer Reach out via WA Step 1 CE agent Comms & form Step 2 Form shared to customer Fill address + pin point Step 3 CE review Check form in dashboard Step 4 Approve or reject? CE decides Step 5 Reject Notify customer Explain reason Approve Create replacement order Order pushed to outlet POS Step 6 Option 2: Internal Ops Dashboard + Share Form

We ran them against four constraints.

Option CE problem solved Cost reduced Low user effort Low tech effort
WA Bot + Internal Ops Dashboard + Share Form YesYes NoNo
Internal Ops Dashboard + Share Form YesYes NoYes

Both options fail on low user effort. Customer still has to fill the form and pin point their location.

The second option was closer. It solved the CE problem, reduced cost through internal pricing, and kept tech effort low. But both options failed on the same constraint: user effort. In both cases, the customer still had to fill part of the form and pin point their own location.

These are customers who just had a bad experience. Asking them to do anything extra adds friction to a moment where trust is already thin. We almost pushed through anyway, with CE compensating by handling as much as possible. But something stopped me.

I remembered building the location flow for the Hangry App. The pin point feature we used there was powered by a paid mapping service. A fifth constraint had just appeared: no added business cost. And with that, the second option was no longer failing on one constraint, it was failing on two.

Option CE problem solved Cost reduced Low user effort Low tech effort No added business cost
WA Bot + Internal Ops Dashboard + Share Form YesYes NoNoNo
Internal Ops Dashboard + Share Form YesYes NoYesNo

With a fifth constraint added, the remaining option now fails on two counts. Not one.

That's when the Google Maps link idea came up. Share links already contain latitude and longitude data. CE could simply ask the customer to share their Google Maps location. No form to fill, no pin point to drag, no paid service. We checked it together. It worked, it was free, and it removed the last burden from the customer entirely.

All five constraints satisfied. We had our solution.

Solution flow, Internal Ops Dashboard replacement order Open form Internal Ops Dashboard Step 1 Paste Maps link Address + coordinates auto-populate Step 2 Select menu All channels, sub-brands at internal pricing Step 3 Submit for approval Regina reviews Step 4 Approved Order pushed to POS Centralized, trackable Step 5 Handled entirely by CE, no customer input required

Here's what that translated to in practice, the replacement order form inside Internal Ops Dashboard that CE uses to place orders, and the scheduled order tab added to the POS so outlets can process them.

UI screens have been reskinned for confidentiality. Structure and functionality reflect the actual product.

Internal Ops Dashboard

Dashboard step 1
Dashboard step 2
Dashboard step 3
Dashboard step 4

POS

POS step 1
POS step 2

The module shipped in February 2025. A few weeks after launch, I checked back in with Regina.

The feedback was straightforward: the tool was stable, almost no issues after the early bugs were ironed out. But the number that stuck with me was the time.

Before
10 min
Per replacement order via Hangry App
After
2–3 min
Per replacement order via Internal Ops Dashboard
Replacement workload
↓ 60%
Reduction in workload on replacement tasks, per Regina, CE team leader.

Regina put it plainly: if the team was still using the Hangry App, her agents would be screaming. The centralization meant she could actually see what was happening across the team, something that simply wasn't possible before.

The cost side was harder to quantify precisely, but the structural shift was clear: replacement orders were no longer being placed at consumer-facing prices. Internal pricing through Internal Ops Dashboard meant every replacement cost less than it would have through the Hangry App, by design, not by accident.

Two things stayed with me after this project.

The Google Maps link idea didn't come from a brainstorm. It came from knowing. From a previous project, that proper pin point accuracy requires a paid mapping service. Right call for a consumer app. Wrong call here. Knowing what the right answer looks like in one context helped me see why it was the wrong answer in another.

Good solutions don't always come from thinking harder. Sometimes they come from remembering further.

The other shift was about emotional context. Asking a disappointed customer to fill out a form and locate themselves on a map isn't just inconvenient. It adds friction to a moment where trust is already thin. That's not a UX problem. It's a people problem. And it changes what you build.

Sometimes the most important thing you can know about a user isn't what they need. It's how they feel when they need it.