What One Line of Address Data Actually Costs
Trace a delivery failure back far enough and the root cause is often not the warehouse or the driver, but the address field on the checkout page. A bad address does not stop where it was typed. It flows straight through to the shipping label, the zone assignment, the dispatch engine, and finally the driver's handheld. By the time anyone tries to fix it in the field, the cost has already accumulated across several stages.
The scale becomes clear once you price a single incident. Redelivery freight of ₩3,000, return freight of ₩3,000, ten minutes of customer support (roughly ₩4,000 in labor), and fifteen minutes of driver waiting and phone calls (roughly ₩6,000) add up to about ₩16,000 (roughly $11) per incident. At 100,000 monthly orders with an address-driven failure rate of 0.5%, that is 500 incidents, ₩8 million per month (about $5,500), and ₩96 million per year (about $66,000). None of that includes the lifetime value of customers who simply stop ordering.
Classify delivery-delay complaints by root cause and a large share of them converge on address formatting. The ticket only says "delayed," but following the actual path repeatedly surfaces a missing unit number or a bad coordinate as the starting point.
Street Names, Lot Numbers, and the Unit Field
The first difficulty with Korean address data is that formats arrive mixed together. Road-name addresses have been mandatory since 2014, yet order data still accumulates lot-number addresses, obsolete administrative district names, and strings that splice the two systems together. The standardization target is well defined: normalize province, city or district, town, road name, and building number against the Ministry of the Interior and Safety road-name address database — and never overwrite the original string, which belongs in its own column.
The second difficulty is the detail line. Most order forms accept it as free text, so "Building 101, Unit 1203," "101-1203," "1dong 1203," and "Block A 1203" all point to the same household. Addresses that name only the apartment complex, with the building and unit left blank, arrive steadily as well. These are the dangerous ones: they geocode cleanly, so the system marks them valid, and the problem only appears at the front door.
The third is mismatch between postal code and administrative district. Even after the 2015 migration to five-digit postal codes, some customer records still carry the old value. The correction key must be the road-name address, not the postal code. Match on road name and building number, then reassign the postal code from that.
Treat Geocoding as a State, Not a Boolean
Handling coordinate lookup as a simple "has coordinates / has none" flag breaks operations. At minimum, model four states:
The distinction matters because the remedies are entirely different. TEMP_FAIL resolves with exponential backoff; retrying NO_RESULT on the same schedule just burns quota.
Never let an address without coordinates pass automatically into the outbound stage. Missing coordinates are commonly backfilled with a centroid — a district office, say — which lands the order in the wrong delivery zone. Routing these into an exception queue and confirming the address by agent call or automated SMS before shipping is far cheaper than shipping blind and paying for the return.
Re-geocoding is an operational task too. New roads open, new complexes are occupied, and administrative boundaries are redrawn, so a monthly batch that retries every NO_RESULT address is worth scheduling.
Address Quality Destabilizes the Entire Delivery Algorithm
Zone assignment, driver dispatch, and route sequencing all take coordinates as input. Address quality is therefore a precondition for the algorithm, not a side concern.
Consider the blast radius of a single bad coordinate. On a route where one driver handles 120 stops with an average of 0.8 km between them, a stop mis-plotted 8 km away adds 16 km of round trip and roughly 40 minutes. Those 40 minutes do not stay contained — they push back the arrival time of every remaining stop. On a route totaling roughly 96 km a day (120 stops × 0.8 km), one address inflates the distance by about 17%.
ETA reliability shares the same root. A 500 m coordinate error in a dense urban area costs three to five minutes of drive time alone, and more once building access and parking are factored in. For a service promising 30-minute arrival windows, a few accumulated errors of that size make the window meaningless.
Catching It at Input Is the Cheapest Option
Address errors get more expensive to correct the further downstream they travel. The most efficient intervention point is the order form.
Cleaning up existing customer addresses in bulk demands its own discipline: preserve the original, write a history table recording before and after values plus the transformation rule version, define a batch-level rollback path, and validate a small sample by hand before applying anything at scale. Without a way to reverse a faulty rule, one bad run contaminates every stored address at once.
Also remember that addresses are personal data. When sending them to an external geocoding API, make the processing-delegation relationship explicit, limit the payload to the address string, and avoid attaching order numbers or recipient names. The habit of dumping full addresses into debug logs deserves attention as well — a practical rule is to mask everything after the building number in logs.
Metrics and Where to Start
Judging whether any of this is working requires measurement. Four indicators belong on the dashboard at minimum:
POLYGLOTSOFT brings experience building WMS and order-to-fulfillment systems to the design of an address cleansing layer applied consistently across ordering, outbound, and delivery. Connecting address standardization, geocoding state management, an exception queue, and a quality dashboard into a single flow turns delivery failure from a field-response problem into a data design problem. If you would like to know where your current order and logistics systems stand on address quality, we would be glad to talk.
