The first time we tested JuuLinkAI with a real user, we were standing in a coffee shop in Setapak, watching the owner, a woman in her fifties, try to upload her cafe's logo from a four-year-old budget Android. The screen was scratched, the wifi was slow, and the upload button — which on our test laptops had felt generous — turned out to be too small for her thumb when she had a phone case on. She tapped the wrong thing three times in a row.

We had been congratulating ourselves on a mobile-first design. Watching her tap try, fail, try again, fail, and finally hand the phone to her teenage daughter, we realised we had been kidding ourselves. Mobile-first in our heads had meant looks good on an iPhone. The Malaysian small-business reality is very different.

Who actually uses it

We did the user research after, not before — a mistake, but a useful one. Here is what we learned about the people who were actually using JuuLinkAI a month into the soft launch:

  • About 80% were on Android. Most were on phones that were three to five years old. A handful were on devices that shipped with Android 9.
  • Screen sizes clustered around 5.5 to 6 inches, but a non-trivial share were on devices smaller than 5 inches — older phones still in regular use.
  • Average page-load time, measured in the wild, was around 3.4 seconds. Some sessions were over 8 seconds on first paint.
  • Many sessions happened during the merchant's working day — between customers, with one hand on the phone and the other on a payment terminal or kettle.

None of this is unusual for Malaysia, and none of it should have been surprising to us. What was surprising was how badly our defaults had served these conditions. The fonts were too thin. The line lengths were too long. The forms were too vertical to fill out one-handed. The error messages assumed the user was looking at the screen, not glancing between the phone and a customer.

The redesign, in concrete decisions

We rebuilt the merchant dashboard over four weekends. Here is what actually changed, with reasons:

Bigger everything, but especially tap targets

Apple's old human-interface guideline of 44 points is a floor, not a target. We bumped every primary action to at least 56 pixels of vertical space, with at least 12 pixels of margin between targets. For users with phone cases — which is most of them in Malaysia, because phones get dropped on tile floors and into curry — this is the single change that produced the biggest drop in mis-taps.

One column, always

We had a beautiful two-column form on desktop that collapsed into a clean single column on mobile. Except the breakpoint was wrong for the smallest devices, and we caught users panning sideways to find the second column. We removed the two-column layout entirely and kept everything single-column even on desktop. The form became noticeably more usable on every device class.

Real errors, not toast notifications

Toast notifications — the little messages that pop up and slide away — assume the user is watching. Our users were not. They were tapping, looking at a customer, looking back at the phone, tapping again. Half the toasts were gone by the time anyone looked. We replaced every toast with an inline error attached to the field that produced it, and kept it on screen until the user resolved it.

Aggressive image compression

Most of our users were uploading logos straight from their phone camera — files of 4 to 8 megabytes. Upload failures on cellular were common. We added client-side compression that down-scales to 800 pixels wide and converts to WebP before transmission. Upload success rates jumped from 71% to 96% in the next two weeks.

Bilingual copy, written by a person

We had launched in English, with a plan to add Malay later. After the first round of feedback, we moved that up. But we did not auto- translate. We wrote every label in Malay ourselves, with help from a friend who runs a kopitiam in Kajang. The auto-translated version we had originally tested was technically correct and emotionally cold. The hand-written Malay sounds like a human wrote it for another human.

You cannot machine-translate warmth. We tried.

What we got wrong about "simplicity"

We had assumed, going in, that simplicity meant fewer features. That is not wrong, exactly, but it is incomplete. For our users, simplicity also meant:

  • Fewer choices, but more obvious choices. A long dropdown of categories was harder to use than a flat row of six buttons, even though the dropdown had fewer pixels.
  • Defaults that did the work. If you sell food, you almost certainly want WhatsApp at the top of your link tree, then Instagram, then Grab. We made that the default order instead of asking. Users could reorder, but almost nobody did.
  • Forms that remembered things. Re-entering your business name every time you opened a new section was a small friction that compounded. We made every shared field carry forward automatically.

The broader lesson

If you are designing software for Malaysian small businesses — or for any market where the typical user is not on a current-year iPhone, an unlimited data plan, and a quiet room — the patterns baked into most design systems are wrong by default. The standard bootstrap is calibrated for an environment your users do not have.

The fix is to leave the studio. We have started running every JuuLinkAI feature through an in-person test with at least one merchant before we ship. It takes two hours. It catches more bugs than two weeks of internal QA.

The cafe owner in Setapak, by the way, is now one of our most active users. She did eventually upload the logo — her daughter helped — and she has since sent us three suggestions, all of which made the product better. We do not deserve her patience, but we are grateful for it.