Why Common Names Break identity Systems
If you have ever tried to find one person in a system where dozens share the same name, you already understand the core problem. Searching for "Min Su Kim" isn't a people-finding task; it's an entity-resolution stress test. The name is common enough in Korean-speaking populations that a single enterprise directory can contain multiple matches, yet distinct enough that engineers assume a simple string match should work. That assumption is where identity pipelines quietly fail.
In production environments, we have seen customer-relationship databases treat two different "Min Su Kim" records as duplicates and merge them, only to discover later that one is a contractor in Seoul and the other is a fintech founder in San Francisco. The merge poisoned analytics dashboards, corrupted billing allocations, and violated consent logs. The incident was not caused by a missing validation rule; it was caused by a failure to model identity as a probabilistic graph rather than a deterministic string.
The root issue is that names are poor primary keys. A name like min su kim can be written in multiple romanization forms-Min-su Kim, Minsu Kim, Kim Min Su, or ๊น๋ฏผ์ in Hangul-and each variant can refer to a different human. Western given-name/family-name ordering - hyphenation habits. And transliteration standards all multiply the ambiguity. When systems store names as flat text fields without locale context, they discard the very signals needed to tell records apart.
The Database Design Problem with Homonyms
Most application schemas start with a users table and a unique constraint on email. That works until the business asks for a single customer view across channels. Then the schema is extended with phone, address, social_handle columns. Eventually someone adds a full_name index and expects it to support deduplication. This is the point where common names break the model.
Consider three records, all labeled min su kim. One signed up with a Gmail address in California, one with a corporate email in Singapore. And one with a Kakao account in Korea. None of the emails match. The phone numbers differ by country code, and the addresses share no tokensA naive GROUP BY full_name would either merge three distinct people or, if the system is conservative, leave three separate profiles that marketing later treats as one household.
- Email-only identity graphs collapse when one person uses multiple inboxes.
- Name-only matching inflates false-positive merge rates for common East Asian names.
- Phone matching fails when users switch carriers or use VoIP numbers.
The better design treats identity as a first-class entity separate from the user account. At a previous firm, we modeled identity as a node in a graph database (Neo4j) with edges weighted by evidence type and confidence. Email confirmation gave a strong edge; name similarity gave a weak edge unless corroborated by another attribute. A shared IP or device fingerprint counted as medium evidence. But only within a short time window to avoid conflating family members or coworkers.
How Search Engines Resolve Ambiguous Names
Search engines face the same problem at web scale. When someone types min su kim into a search box, the engine must decide whether the intent is a specific professor, an athlete, a developer, or a LinkedIn profile. The ranking signal is not the name itself but the co-occurring entities in the corpus. A page that mentions "Min Su Kim" alongside "Stanford," "machine learning," and "NeurIPS" is likely a different entity than one that mentions "Min Su Kim" alongside "marathon," "Boston," and "qualifying time. "
This is entity disambiguation. And it relies on knowledge graphs such as Google's Knowledge Graph or Wikidata. The algorithm builds a context vector for the query and compares it against candidate entity embeddings. If the context is sparse-just the name with no surrounding terms-the engine falls back to popularity or query-log clustering that's why searching for a common name often surfaces a famous person with the same name rather than the obscure engineer you are looking for.
For engineering teams building internal search, the lesson is to enrich name queries with structured context. Instead of indexing full_name as a text field, index composite documents that include department, project names, skills, and location. Elasticsearch and OpenSearch support boolean queries across multiple fields with boost factors, which lets you down-weight pure name matches and up-weight contextual matches. Link to internal guide: Building faceted people search with Elasticsearch
Identity Resolution Algorithms in Production Systems
When names collide, probabilistic record linkage becomes necessary. The classic framework is the Fellegi-Sunter model. Which compares pairs of records across fields and assigns weights to agreement or disagreement. For a pair of min su kim records, agreement on email carries a high positive weight, agreement on name alone carries a near-zero weight. And disagreement on national ID or passport number carries a strongly negative weight.
Modern implementations often use learned distance functions. For example, a record-linkage pipeline might pass pairs through a siamese neural network trained on labeled duplicates. The network learns that "Min Su Kim" and "Minsu Kim" are probably the same person. While "Min Su Kim" and "Kim Min-su" may or may not be, depending on accompanying signals. Tools such as Python Record Linkage Toolkit, Splink, and Zingg provide open-source implementations of these approaches.
In our own systems, we found that blocking is the most important optimization. Comparing every min su kim record against every other record is O(nยฒ) and expensive. Blocking uses cheap heuristics to limit comparisons: same first initial, same country code,, and or same phonetic encodingWe used Double Metaphone and NYSIIS phonetic keys as blocking keys for romanized Korean names. Which reduced the candidate pair space by roughly 98 percent without losing true matches.
Building Canonical Profiles from Fragmented Data
Once records are linked, the next challenge is canonicalization. Which "Min Su Kim" is the real one? Should the canonical name be the one from the passport, the corporate directory,, and or the most recent sign-upShould the profile keep all variants or pick one? These decisions affect downstream compliance, analytics, and user experience.
A robust canonical profile stores all observed name variants as attributes of a single identity vertex. Each variant is tagged with provenance, locale, and timestamp. The display name is then derived by a policy function. For example, the policy might prefer the passport name for KYC flows, the directory name for internal tools. And the user-edited name for public profiles. This separation of storage and presentation prevents the engineering team from hard-coding cultural assumptions into the schema.
We implemented this pattern using a versioned identity ledger inspired by RFC 6902 JSON Patch semantics. Every change to a canonical profile produced an append-only patch. Which made audits straightforward. When a false merge occurred, we could replay the patches to reconstruct exactly how two min su kim records became conflated and then split them back apart with minimal data loss.
The Role of Korean Name Romanization
Romanization adds a layer of ambiguity that monolingual systems rarely handle well. The Revised Romanization of Korean would write ๊น๋ฏผ์ as "Gim Min-su. " McCune-Reischauer would write "Kim Minsu. " Many individuals choose their own English spelling, leading to "Min Su Kim," "Minsu Kim," or "Minsoo Kim. " A system that expects one true spelling will miss legitimate matches.
The engineering fix is to store the native-script name as the authoritative key and treat romanizations as localizations. In Hangul, ๊น๋ฏผ์ is unambiguous as a written form. If the system must match across scripts, it should normalize to Hangul before comparison. Libraries such as python-korean or ICU Transliteration can convert common romanization schemes back to Hangul. Though user-chosen spellings remain noisy.
We learned this lesson while integrating with a global HR platform. A candidate named min su kim applied through a U. S job board as "Minsu Kim," was already in our Korean HRIS as "Kim Min-su," and appeared in the badge system as "Min S. Kim. " The integration kept creating duplicate accounts until we added Hangul normalization as a preprocessing step. After that, match rates improved and false duplicates dropped by about 40 percent,
Privacy and Consent in Identity Graphs
Linking records across systems creates privacy risk. If an identity graph connects a min su kim shopping account with a health-app account and a public GitHub profile, the graph may infer sensitive attributes that the individual never consented to share. The more confidently the system resolves identities, the more carefully it must govern access.
Engineers should implement purpose limitation at the data layer, not just in policy documents. We used attribute-based access control (ABAC) with policies written in Open Policy Agent (OPA). A marketing service could query whether two records were the same household. But it couldn't see medical identifiers or government IDs. Each query was logged with the calling service, the purpose code, and the data categories accessed.
Consent also affects retention. Under GDPR and similar frameworks, a user may request deletion or portability. If the system has merged multiple min su kim records, a deletion request must unmerge the correct profile without deleting another person's data. We handled this by soft-deleting the identity vertex and all edges whose provenance matched the requesting account, then running a graph integrity check to ensure no orphaned records remained.
Testing Disambiguation with Real-World Name Data
Unit tests with synthetic data won't catch disambiguation bugs. A test that creates "John Smith 1" and "John Smith 2" tells you almost nothing about how the system behaves with real transliteration noise, missing middle names, or inconsistent formatting. You need adversarial test sets.
We maintained an internal "name collision corpus" populated from anonymized production samples. The corpus included groups like our recurring min su kim records, known duplicates, and known distinct individuals with similar names. Each release of the matching pipeline was evaluated against precision, recall. And F1 on this corpus. We also tracked a "human review rate" metric: the percentage of candidate pairs that our automated classifier couldn't resolve confidently and had to escalate.
Property-based testing was especially useful. Using Hypothesis, we generated name variants by applying romanization rules, punctuation changes. And whitespace differences to a seed set. This uncovered edge cases such as all-Hangul inputs, mixed-script inputs,, and and names with generational suffixesLink to internal post: Property-based testing for identity pipelines
Operational Lessons from Production Incidents
Even with good algorithms, incidents happen. The most dangerous failures are silent merges: two distinct people treated as one for months. These are harder to detect than false negatives because the system appears to be working. We detected them through anomaly monitoring on identity-graph metrics.
One alert fired when a single identity vertex accumulated three different nationalities within a week. Another fired when a canonical profile suddenly spanned time zones more than ten hours apart with no travel-related events. These were heuristic checks, not proofs of error. But they directed human reviewers toward suspicious vertices. In one case, the alert caught a merge between a min su kim in London and a min su kim in Sydney before any customer-facing service was affected.
Recovery from a bad merge is harder than prevention. Splitting a vertex requires identifying which attributes belong to which real person, a task that often needs manual verification. We built a "split wizard" tool that presented reviewers with a diff view of the merge history, suggested reverse patches. And required two-person approval before committing the split. The approval workflow was modeled on database schema-change procedures: slow, deliberate. And auditable.
Future Standards for Name-Based Entity Resolution
The industry is moving toward portable, verifiable identity credentials. Standards such as W3C Decentralized Identifiers (DIDs) and Verifiable Credentials allow a person to present a cryptographically signed claim without relying on a centralized name registry. In this model, "Min Su Kim" becomes a display label,, and while the DID is the persistent identifierThis decouples identity from naming conventions entirely.
Until DIDs are ubiquitous, most systems will still rely on heuristic matching. The practical path forward is to adopt shared entity-resolution primitives: phonetic keys, script normalization - provenance tracking. And confidence scoring. These primitives should be embedded in data pipelines rather than bolted onto reporting layers. The goal isn't perfect resolution but measurable, explainable resolution that can be audited and corrected.
Engineers should also push for better input design. Instead of asking for a single "full name," forms should capture native-script names, preferred display names, and locale. The extra fields reduce ambiguity at the source and make downstream matching more accurate. A small frontend change can save weeks of data-engineering cleanup later.
Frequently Asked Questions
Why is "Min Su Kim" a hard name for software systems to resolve?
It is a common Korean name with multiple romanization variants, no globally unique identifier by default. And high frequency in several countries. Systems that rely on string matching alone often merge distinct people or fail to recognize the same person across accounts.
What is the best database schema for storing ambiguous names?
Use a graph or entity-relationship model that separates identity from accounts. Store native-script names as authoritative keys, keep all observed variants with provenance. And derive display names through policy functions rather than hard-coding a single field.
Which algorithms work best for record linkage on common names?
Probabilistic record linkage using the Fellegi-Sunter model, phonetic blocking keys such as Double Metaphone. And learned distance functions from tools like Splink or Zingg. Always evaluate against real-world adversarial test data.
How do you prevent privacy violations when merging profiles?
add purpose-limited access control, log every identity query, store provenance for each attribute. And design deletion workflows that can unmerge records without harming unrelated individuals,
Can decentralized identifiers solve name ambiguity
Yes, in principle. DIDs provide a persistent cryptographic identifier independent of name spelling, and the name becomes a human-readable label,While the DID resolves to a verifiable identity graph. Adoption is still growing, so most systems will need heuristic matching for years.
Conclusion and Next Steps
Name disambiguation isn't an edge case; it's a fundamental data-engineering problem that grows worse as systems become more global. A name like min su kim exposes every weak assumption in an identity pipeline: flat schemas, script ignorance - deterministic matching. And weak governance. Fixing these issues requires architectural changes, not just better string algorithms.
If you're building or maintaining identity systems, start by auditing your current false-positive and false-negative merge rates. Add native-script support where relevant. Build a labeled corpus of real collisions. And add confidence scoring and human review queuesAnd above all, treat identity as a graph, not a column.
Want help designing an identity-resolution pipeline that scales? Link to internal service page: Denver mobile app and platform engineering services Our team works with engineering organizations to build entity-resolution systems, consent-aware identity graphs, and global search platforms that handle real-world naming complexity without sacrificing privacy.
What do you think?
Should software systems stop using legal names as identifiers altogether,? And would decentralized identifiers actually reduce merge errors at scale?
How much ambiguity should an identity pipeline accept before it escalates a match to human review,? And who should define that threshold?
When a false merge affects two people with names like "Min Su Kim," what should the recovery process guarantee to each individual When it comes to data integrity and consent?
.Need a Custom App Built?
Let's discuss your project and bring your ideas to life.
Contact Me Today โ