Hyundai · 2022—2023
Same brand, same catalogue, same objects moving through the pipeline. It still could not be one build — and the reason sat below the interface, in local law.
Read the caseThree Hyundai national sales companies needed operational software behind their vehicle sales. The plan everyone started from — build once, configure per country — did not survive contact with local law.
Each market runs both a dealer network and an online shop. The programme covered a different surface in each: the operator system behind Singapore's online shop, and the dealer sales apps for Thailand and the Philippines. All three handle the same objects — configuration, quotation, order, contract, financing — and all three integrate with systems that already existed.
What made them three projects rather than one was the sales process itself, which is locally determined and legally binding. They ended up sharing a domain model but not a codebase. I ran all three as product manager, from requirements through UAT to deployment and in-market training.
Each of Hyundai's regional sales companies sells through two routes at once: a dealer network on the ground, and an online shop. Both routes end in the same place — a configured vehicle, a signed contract, a financing arrangement, a delivery — and both need software behind them.
The programme covered a different slice per market. In Singapore, the operator system behind the online shop: catalogue, quotation, order, contract and third-party loan product linkage, integrated with ERP. In Thailand and the Philippines, the dealer sales apps and their admin, with an existing CRM carrying the customer record.
The scale is worth stating plainly, because it sets what a bad release costs. The Philippine track alone covered a dealer network of around forty passenger-car dealerships. Those are the people who quote, order and close on whatever the system does or does not let them do.
I joined as product manager with ownership across requirements, functional definition, UI/UX specification, prototyping, QA and rollout.
Every stakeholder started from the same assumption. Same brand, same vehicles, same catalogue — so one product with three configurations, and localisation is language, currency and tax rate.
The objects really are the same everywhere. A quotation is a quotation in all three markets. What is not the same is the sequence that turns one into the next: which step has to happen before which, who has to sign, what must be presented before a deposit can be taken, how financing attaches to the order. Those rules are set locally and they are not negotiable by a product team.
A config flag can change a label. It cannot change the moment a sale becomes a sale.
Once the sequence differs, the order state machine differs. Once the state machine differs, the screens that move an order between states differ. The divergence propagates upward from the legal layer into the interface, and no amount of theming hides it.
Rather than force one product and absorb the cost in conditional logic, I mapped where the three markets genuinely agreed, and put the fork exactly there.
What held across all three was the domain vocabulary: what a vehicle configuration is, what a quotation is, what a contract is, how they relate. What did not hold was the process that moves between them.
Fig. 01
The fork sits below the sales process, not above it. Everything left of the node was specified once. Everything right of it was specified three times — deliberately.
Front-end and back-office. Catalogue, payment and order services, integrated with the CRM of record. Figma prototype for stakeholder sign-off, then on-site dealer training.
Front-end and back-office. Same surface as the Thai track, re-specified from the ground up against the local sales process.
The administration system behind the market's online shop. Catalogue, quotation, order, contract and third-party loan linkage, with ERP integration. Axure prototype, storyboards, local training.
Abstractly, "the sales process differs by market" is easy to nod along to and easy to under-budget. Here is what each market actually did, itemised.
None of these are preferences. Each one is either a legal requirement or an entrenched local practice, and each one changes the order flow rather than sitting beside it.
I took Thailand over mid-programme from another product manager, which meant re-deriving decisions that had already been made once. The market itself diverged on four counts.
Singapore diverged less on payment mechanics and more on who sells what — a market-structure problem rather than a paperwork one.
Model and trim line-ups differed market by market. Establishing what was actually sold where — and how each specification maps onto the shared catalogue structure — took its own research pass in all three markets.
Three tracks meant three sets of specifications, three UAT cycles and three training programmes. It also meant that when one market's rules moved, nothing in the other two had to be regression-tested.
The alternative — one product with market flags — would have concentrated the entire regional risk into a single release train. For a network where a broken order flow means a sale cannot legally close that day, that concentration was the more expensive option.
Across the three tracks I owned requirements analysis, functional definition, information architecture, user flows, screen specifications, UI/UX design and prototypes, unit and integration test scenarios, UAT scripts, quality review, and training in-market. Collaboration ran through Jira and Confluence with distributed engineering and design teams.
Two of the three tracks came with their own delivery conditions. Thailand was handed to me mid-programme from another product manager, so part of the work was reconstructing decisions I had not made. Across markets I ran weekly sessions with the local business leads — reporting progress, resolving conflicting requirements and getting the financial-integration standards confirmed by the people accountable for them.
Training was done in person, not by document. In Manila that meant three days visiting two of the larger dealerships a day and running a session of ten to twenty staff at each. It is the cheapest requirements review you will ever get: people tell you what the system cannot do within about four minutes of touching it.
Before build we ran weekly working sessions with each market — system detail, direction, which local rules and working practices had been encoded, what we had assumed on their behalf. Every session went out again as a follow-up email so both sides had the same written record. By the time scope froze, everyone believed payment was settled.
It was not. At UAT in-market, new requirements surfaced and several things we thought were agreed turned out to have been understood differently on each side. Not through carelessness. Local payment practice is largely tacit: the people who do it daily do not think to state it, and the people reading a specification do not know what to ask.
Fixing it late was expensive in a specific way. The build sat on established integrations with narrow tolerance for change, so this was never a matter of adding a field. Every change had to be checked against an architecture that could not flex much and still had to hold. I spent the UAT period taking feedback in the room during the day and working through the nights with the development PL in the Korea office, reconciling what the market needed against what the integration would actually permit.
It shipped. But the conclusion is not that we should have communicated more — we communicated a great deal, in writing, on a schedule. It is that tacit local practice does not survive the trip through a document. The only reliable way to surface it is to put something working in front of the people who will use it, in their own environment. On this programme that happened at UAT. It needed to happen at requirements.
All three systems were delivered and deployed. They are internal business tools rather than public applications, so none of them appears in an app store.
Post-launch service metrics sat outside the programme scope, and my access ended at handover. What I can speak to is delivery: scope, sequence, and the state of each system at handover.
I specified screens without specifying measurement. The deliverables defined what each screen did, who could reach it and what happened on error — but not a single event to be logged. When the systems went live, nobody could answer which parts of the order flow people actually struggled with.
That gap was invisible to me at the time because the contract ended at handover. It is not invisible now. Instrumentation belongs in the functional specification, next to the error states, and it is cheaper there than anywhere downstream.
The second thing follows from the payment episode. I treated requirements as something that could be gathered remotely and confirmed in writing, with the market visit reserved for UAT and training. That order is backwards for anything governed by local practice rather than local law. Law you can read; practice you have to watch. A two-day visit before scope freeze would have cost a fraction of what the late changes cost.
The third: I treated the fork as a one-time architectural decision. It is really a standing question. A market that diverges on financing today may converge after a regulatory change, and nothing in the programme was set up to notice that and pull the shared boundary back.
Notice — Any screen shown here as a recreation was rebuilt from scratch for this portfolio using fictional data. No client-owned screens, source files or confidential material were used. Publicly published material is credited on the card that shows it. Recreations produced 19 Aug 2026; working files retained.
© 2026 Jiwon Nam · South Korea