The UX Problem Hiding in Plain Sight: How Session Replays Revealed a Cross-Brand Conversion Killer
Two tests on different brands independently discovered the same UX problem: address search friction. Neither test was designed to find it. Here's how qualitative CRO research works.
Editorial disclosure
This article lives on the canonical GrowthLayer blog path for indexing consistency. Review rules, sourcing rules, and update rules are documented in our editorial policy and methodology.
In two years of running a multi-brand experimentation program, I can count on one hand the times a test result surprised me more than what the session replays showed during analysis.
What I am about to describe happened twice, independently, on different brands, with tests that were not designed to investigate the same thing. In both cases, the session replays revealed the same underlying problem. In both cases, the primary test result was secondary to what we actually found.
The problem was address search. And the discovery was not a minor UX observation — it was evidence of a cross-brand architectural failure that no amount of A/B testing could fix.
Test 1: The Landing Page Redesign That Surfaced the Invisible Problem
The first test was a relatively standard landing page redesign. The brief was to test a simplified enrollment-start experience against the existing landing page — cleaner layout, fewer choices upfront, a stronger primary call-to-action. The primary metric was progression from the landing page to the enrollment flow.
The test ran, the variant showed directional improvement, and we began the post-test analysis. Standard procedure: review the segment data, check the funnel drop-off by step, pull up a sample of session replays from both control and variant.
The session replays were where the real finding emerged.
Across roughly 40 replay sessions reviewed from users who had progressed to the enrollment flow but not completed it, a consistent pattern appeared in the address search step. Users would type the first few characters of their address. The typeahead would return results. Then they would pause, scroll through the results, and either try again or give up entirely.
The problem, visible in replay after replay: the search was returning only 4-5 results, and those results were presented in what appeared to be a random order — not alphabetical, not by relevance, not by geographic proximity to the partial input. For a user in an apartment building, the results might show three different street-level addresses with no apartment-level data, or might show apartment 1 at the top and apartment 347 at the bottom, with no sorting logic that corresponded to the user's search intent.
A user searching for "Apt 12, 47 Riverside Drive" was confronted with a list of five addresses — maybe one of them was the right building, maybe none of them showed apartments at all — and had to decide whether to type more characters, try a different format, or give up and enter the address manually.
Many of them gave up and entered manually. The manual entry path was slower, produced more input errors, and in some cases triggered a different validation flow that had its own friction. The address step, which should have been a 10-second interaction, was taking 45-90 seconds for apartment dwellers, and was failing outright for a segment that abandoned at that step.
None of this was measurable in the A/B test data. The test measured progression from landing page to completion — a single aggregate metric. The address search friction was invisible at the metric level because it affected a subset of users in a single step, and its effect on the primary metric was diluted by the many users who completed successfully. But at the individual session level, it was the clearest pattern in the entire post-test analysis.
Key Takeaway: Session replay analysis often reveals friction patterns that aggregate metrics cannot detect. A conversion barrier affecting 20-30% of users at a single step can be invisible in the overall funnel metric while being unmistakable in individual session replays. Both levels of analysis are necessary.
Test 2: The Backend Algorithm Test That Made Things Worse
The second test was a different design on a different brand, but the address search theme returned in a way that was both unexpected and clarifying.
This test was not about page design at all. It was a backend test — a comparison of two address search algorithms. The existing algorithm used fuzzy matching: it would return results for partial inputs and tolerate minor spelling variations. The proposed algorithm used strict matching: it required the input to exactly match the beginning of a stored address string.
The hypothesis was that strict matching would return more relevant results, reducing the time users spent scrolling through irrelevant typeahead suggestions and improving the overall completion rate for the address step.
The test result was clear, but not in the direction expected. Strict matching increased manual address entry by 20% compared to fuzzy matching.
This was not a small, borderline effect. It was a substantial directional result in the wrong direction. Users in the strict matching variant were abandoning the typeahead at a markedly higher rate and falling back to manual entry — the exact outcome the test was designed to prevent.
The session replays explained why. Strict matching was returning fewer results, not more relevant ones. A user who typed "47 River" into the fuzzy matcher might see "47 Riverside Drive," "47 River Street," and "47 Riverbank Road" — three options, all plausibly relevant. The same user typing "47 River" into the strict matcher might see one result or no results, because the strict algorithm required the address to begin with the exact character sequence "47 River" and the stored format was "47 Riverside Drive" — which began with a numeral followed by a space, not a letter. Even minor formatting differences in the address database produced zero-result queries under strict matching, leaving users with a blank dropdown and no choice but to type the full address manually.
The hypothesis had been that fewer, better results would improve completion. The data showed that fewer results, even if more precise when they appeared, were worse than more results with some irrelevance — because a blank typeahead is a conversion killer and a slightly imperfect match is still better than nothing.
Key Takeaway: A backend algorithm test that increased manual address entry by 20% revealed more about user behavior than the primary metric did. When session replays show users abandoning a UI element and falling back to manual workarounds, the UX architecture of that element has a fundamental problem that metric-level analysis obscures.
Why This Is an Architectural Problem, Not a Testable Variable
Here is the observation that connected the two findings and elevated them from "interesting individual test discoveries" to a cross-brand strategic issue.
Both tests identified address search friction from different angles — one from a UI design test, one from a backend algorithm test — and both pointed to the same root cause: the address search infrastructure was not designed for apartment-dwelling users.
Single-family home addresses are relatively simple: one number, one street, one city, one postal code. The search returns one result per address and the user selects it. Done.
Apartment addresses are structurally different. A building at 47 Riverside Drive might contain 300 individual units. The correct search behavior is to first surface the building, then allow the user to select their specific unit within it. This building-then-unit selection pattern is the established best practice for apartment-aware address search — it is used by major e-commerce and logistics platforms because it is the most natural and error-resistant way to handle multi-unit buildings.
The address infrastructure used across both brands was not designed this way. It had a flat list of addresses — one entry per unit — with no grouping at the building level and no progressive disclosure from building to unit. This meant that a building with 300 units potentially generated 300 individual results in the dropdown, most of which were irrelevant to the specific user. The practical result was what we observed in the replays: a list of 4-5 random-looking results that might or might not include the user's specific unit, with no sorting logic that corresponded to how users think about their address.
No A/B test can fix a flat address database. No variant of the UI — not a different dropdown design, not a different placeholder text, not a different CTA on the search field — addresses the underlying data architecture problem. Switching from fuzzy to strict matching, as the second test demonstrated, made it worse, not better.
This is the category of finding that most CRO programs are not equipped to surface, because most CRO programs run tests and read the primary metric results. The architectural problem was not visible in any primary metric. It was visible only in the session replays, specifically in the behavior of a segment (apartment dwellers) that was not explicitly tracked as a test segment.
Key Takeaway: Some UX problems are architectural, not testable. When session replays reveal a systematic failure pattern that no variant design can address — because the problem is in the underlying data infrastructure — the finding should escalate beyond the test team to the engineering roadmap. A/B testing is not the right tool for every problem.
The Pattern That Expert Platforms Use: Building-Then-Unit Selection
For anyone designing or commissioning an address search experience, the reference implementation is well-established in the industry. High-volume logistics and commerce platforms have solved this problem.
The building-then-unit selection pattern works as follows: the user types a partial address string. The typeahead returns buildings, not individual units — so a search for "47 River" returns "47 Riverside Drive" as a single building-level result, with a count of units in the building if multiple units exist. The user selects the building. A secondary drawer or step then appears, presenting the units within that building for the user to select their specific apartment.
This two-step pattern has several practical advantages over the flat list approach. The first-step results are fewer and more scannable — a user sees buildings, not 300 individual units, so the relevant result is immediately identifiable. The second-step unit selection is presented in a logical order — numerically, or by floor — so a user looking for unit 12B can find it in seconds. The pattern also surfaces the full unit list, so users who are unsure of their exact unit number (moving into a new building, helping a family member) can scroll and recognize the correct entry.
None of this was the subject of either test. Both brands were using flat-list infrastructure, and the fixes required to implement building-level grouping were infrastructure changes that lived outside the CRO team's remit. But the discovery — that both brands had the same architectural gap, identified independently through session replay analysis on tests that were investigating something else entirely — made the case for that infrastructure investment more compellingly than any metric could have.
The cross-brand convergence was the key signal. One test showing address search friction is an observation. Two tests on two different brands independently converging on the same failure pattern is evidence of a systemic problem in the shared infrastructure. The business case for fixing the address database architecture was substantially stronger with two data points than with one, even though neither test was designed to generate that data point.
Key Takeaway: The building-then-unit selection pattern is the established solution for apartment-aware address search. It reduces first-step results to scannable building-level entries and presents unit selection as a progressive disclosure step. This pattern exists because the flat-list approach is a documented failure mode.
When the Best Finding Is Not the Test Result
I want to make the methodological point explicit, because it has shaped how I approach post-test analysis for every test in the program since these two.
A/B test results are one type of finding. Session replay analysis is another. Heatmap data is another. Exit surveys at drop-off steps are another. Funnel cohort analysis segmented by device, traffic source, and user attribute is another. All of these are evidence types that a well-structured test analysis should gather and integrate.
Most CRO programs treat the quantitative test result as the primary deliverable and everything else as optional enrichment. This is backwards, or at least incomplete. The quantitative result tells you whether the variant won or lost on the primary metric. The qualitative evidence tells you why users behaved the way they did, and often reveals problems — or opportunities — that the test was not designed to measure.
The two address search discoveries would not have appeared in a program that stopped analysis at the primary metric. Both tests had clean quantitative results — one showed directional lift, one showed a clear negative outcome for the backend variant. In a metrics-first program, the address search findings would have been invisible. They only emerged because the post-test process included a structured session replay review with enough sessions to identify patterns.
The practical implication for test analysis:
Before analysis, define what you are looking for beyond the primary metric. Write down the secondary questions you want the session replay and heatmap data to answer. If you do not define the secondary questions before you start watching replays, you will watch them passively and miss patterns that are not front-of-mind.
Segment session replay review by funnel step. Do not watch random sessions. Watch sessions specifically from users who dropped off at each step of the funnel — particularly the steps with the highest drop-off rates. The friction is most visible at drop-off points, not at completion points.
Log UX problems in a dedicated backlog, separate from test results. The address search finding was not an A/B test result. It was a UX diagnosis that required an engineering fix. It should live in a "discovered problems" backlog that is reviewed by product and engineering teams, not in the test results database. If your program does not have a dedicated backlog for qualitative UX findings from test analyses, qualitative insights will get filed as test notes and never acted on.
Cross-reference findings across brands and tests. The second address search discovery became significantly more valuable because it corroborated the first. A program that systematically tags and cross-references qualitative findings — by UI element, by page type, by user segment — will surface these convergent patterns in ways that a siloed test-by-test analysis never will.
GrowthLayer's knowledge base is designed specifically for this kind of cross-test insight tagging — every test can have qualitative findings tagged to specific UI elements, page types, and user segments, and those tags are searchable across the full test history. When a second test reveals address search friction, the system surfaces the prior finding immediately rather than leaving two data points in separate test records where they may never be compared.
Key Takeaway: The most valuable finding from a test is sometimes not the test result — it is the UX problem discovered during post-test analysis. Build a qualitative findings backlog separate from test results, and systematically cross-reference findings across brands and test types to surface convergent patterns.
The "Go-Do" Decision: When to Skip Testing and Just Fix It
The address search case also illustrates a decision that CRO teams face repeatedly but rarely frame explicitly: when is a problem clearly enough established that testing is not the right response?
The standard CRO answer to any proposed change is "test it." This is generally good practice — the history of confident UX assumptions that turned out to be wrong is too long to dismiss. But the "test everything" principle has an important exception: problems that are clearly documented, clearly observed, and clearly fixable without ambiguity about whether the fix is an improvement.
If session replays from 40 sessions show users abandoning the address typeahead and manually typing addresses because the results list is 4-5 random-looking entries, is it necessary to A/B test "address results list with 4-5 entries" versus "address results list with 20+ relevance-sorted entries" to confirm that more entries are better? In most organizational contexts, the answer is no. The observation is conclusive enough to justify the fix directly.
The practical test I apply: if you described the UX problem to any reasonable person — developer, product manager, customer service agent — and they would immediately understand why it is a problem and agree that the obvious fix is clearly better, you probably do not need to test it. The testing velocity you save by not running a low-ambiguity test is better spent on genuinely uncertain questions.
This is sometimes called the "go-do" decision, and it sits alongside the test-it decision in a well-run CRO program. Not every UX improvement needs an A/B test. Session replay evidence of a universal failure pattern — where every user attempting a specific interaction encounters the same obstacle — is strong enough to justify direct implementation of the obvious fix.
The nuance is that "obvious" is a judgment call, and teams sometimes convince themselves that every change is obvious and skip testing entirely. The discipline is to hold both standards simultaneously: test uncertain propositions, fix obvious problems. Session replays are the best tool for distinguishing between the two, because they show you the actual user experience rather than asking you to imagine it.
Key Takeaway: Not every UX problem requires an A/B test. Session replay evidence of a universal failure pattern — where every user attempting an interaction encounters the same obstacle — is sufficient to justify direct implementation. Preserve testing velocity for genuinely uncertain propositions.
Building a Systematic Qualitative Research Layer
The address search discoveries were valuable. They were also somewhat accidental — they emerged because the post-test process included session replays, not because the program had a structured qualitative research workflow.
Making these discoveries systematic requires building the qualitative layer into the standard test analysis process rather than leaving it to the analyst's initiative.
A structured qualitative research protocol for CRO looks like this:
Pre-test: Before designing a variant, review session replays from users who drop off at the target step. Identify the most common friction patterns. Use these patterns to inform the variant hypothesis rather than relying solely on intuition or benchmarking.
Mid-test: At the midpoint of a test runtime, review a sample of session replays from each variant — not to make an early call on the result, but to identify any implementation issues, technical problems, or unexpected user behavior patterns that might affect the final analysis.
Post-test: After the test concludes, conduct a structured session replay analysis segmented by drop-off step, device type, and completion versus abandonment. Log all UX findings in the qualitative backlog, tagged to specific UI elements and user segments. Cross-reference against existing backlog entries.
This workflow adds approximately 2-4 hours to each test cycle — roughly 30-60 minutes for each of the three phases. The ROI on those hours, measured against the value of findings like the address search discoveries, is high.
The most important structural change is the qualitative backlog. Most CRO teams track test results. Few track qualitative findings separately and rigorously. A backlog that accumulates and cross-references qualitative findings over time — with consistent tagging by UI element, user segment, and page type — becomes one of the most valuable assets in the program. It is the difference between a program that rediscovers the same problems repeatedly on different tests and a program that builds a systematic understanding of its users' friction points.
Conclusion
Two tests, two brands, one unexpected convergence. Neither test was designed to investigate address search. Both discovered, through session replay analysis during post-test review, that address search friction was systematically affecting apartment-dwelling users at a specific step in the enrollment flow.
The combined evidence pointed not to a UX copywriting problem or a form layout problem, but to an architectural problem in the address search infrastructure — one that required an engineering solution, not a test variant.
The lesson is not unique to address search. It applies to every step of every enrollment flow: the most valuable finding from a test is sometimes not the test result. The quantitative outcome tells you who won. The qualitative analysis tells you why users behaved the way they did — and often reveals problems that no variant was designed to catch.
Build the qualitative layer into your test analysis process. Keep a dedicated backlog for UX findings. Cross-reference those findings across tests and brands. The structural problems in your funnels are probably already visible in your session replays. They are waiting to be found.
If you want to tag qualitative UX findings to specific tests, cross-reference discoveries across your full experiment history, and surface convergent patterns before they become systemic, GrowthLayer gives you the knowledge base structure to make qualitative research a systematic part of your CRO program, not an afterthought.
Applied Experimentation Lead at NRG Energy (Fortune 150) · Creator of the PRISM Method
Atticus Li leads applied experimentation at NRG Energy (Fortune 150), where he and his team run more than 100 controlled experiments per year on customer-facing surfaces. He is the creator of the PRISM Method, a framework for high-velocity experimentation programs at large enterprises. He writes regularly about the statistical and operational details of A/B testing — the parts most CRO content skips.
Keep exploring
Browse winning A/B tests
Move from theory into real examples and outcomes.
Read deeper CRO guides
Explore related strategy pages on experimentation and optimization.
Find test ideas
Turn the article into a backlog of concrete experiments.
Back to the blog hub
Continue through related editorial content on the main domain.