+4.14%
CVR uplift (GB, unified basket)
+4.75%
Margin per transaction (all markets)
+20pts
User comprehension vs control
80%
Users who preferred the new design
UK regulators required travel companies to show the full cost of a holiday upfront, including fees paid at the hotel on arrival. Competitors treated it as a legal task. We treated it as a trust problem, and that framing turned a compliance fix into a product improvement.
Result: +4.14% CVR uplift across the GB market, +4.75% margin per transaction across all markets, and full regulatory compliance delivered ahead of the April 2026 enforcement date.
| Metric | Result |
|---|---|
| CVR uplift (GB, unified basket) | +4.14% |
| Margin per transaction (all markets) | +4.75% |
| User comprehension vs control | +20 points |
| Users who preferred the new design | 80% |
| Engineering lead time for pricing changes | 3 weeks → under 1 week |
The problem: Two product squads had run repeated failed pricing experiments, with CVR drops ranging from -5.8% to -10.82%. A hard regulatory deadline was approaching, and there was no unified design ownership of the end-to-end journey.
The goal: Achieve regulatory compliance without degrading conversion, and use the constraint to improve pricing comprehension across the full booking experience.
My scope: Cross-functional programme spanning two product squads. 2 PMs, 2 Engineering leads, 7 engineers, 2 embedded designers (both directly managed by me), 1 researcher, 1 content designer, and legal review.
Why a Principal was needed: Previous attempts had been scoped within individual squads with no single design owner across the end-to-end journey. There was no shared design principle, no joined-up user journey, and no one forcing the structural conversation between Search Platform and Checkout. The VP of Product and Director of Design brought me in specifically to change that operating structure and own the outcome end-to-end.
loveholidays is a UK package holiday OTA selling flight-plus-hotel packages. Unlike a standard OTA, customers pay the base package price at checkout. Tourist taxes and resort fees, such as city taxes or mandatory hotel resort charges, are paid separately and directly to the hotel on arrival.
This split-payment model made compliance harder than it seemed. Showing a higher headline price without explaining the split created the appearance of a price increase, which is exactly what the failed experiments confirmed.
The CMA was gaining direct enforcement powers from April 2026, with fines levied without court involvement. Warning letters had gone to 19 travel companies. Booking.com and Expedia were already compliant for hotel-only flows. Key package holiday competitors (TUI, Jet2, BA Holidays) were not.
That created a specific commercial risk. Showing fully loaded prices while competitors still showed base prices would make loveholidays appear artificially expensive. Compliance couldn’t come at the cost of conversion. The VP of Product made that explicit when resetting the brief.
1. Four failed experiments and an approaching deadline
Before I joined, two product squads had each attempted solutions to inclusive pricing. Every experiment produced the same result: users saw a higher price with no context, and conversion dropped.
| Experiment | CVR impact |
|---|---|
| Taxes and fees inclusive pricing | -10.82% |
| Local tax included in total (test 1) | -5.8% |
| Local tax included in total (test 2) | -6.5% |
The pattern was clear. Users didn’t reject the higher price, they rejected a higher price with no explanation attached to it. No one had owned the full journey across every pricing touchpoint, so nothing prepared them for the number they saw at the point of purchase.
2. A structural problem underneath the design problem
Search and Checkout ran separate, hardcoded basket components, each maintained independently by a different squad. The basket appears at several points in the booking funnel: on search results, on the hotel details page, and inside checkout. When each squad maintains its own version, a change to one surface never reaches the others, and prices stop matching between stages.
Those two components are why every previous transparency attempt had drifted between surfaces. Any design work built on them would break the moment either team shipped a change, so this had to be resolved before anything else could land consistently.
3. A data confidence gap with direct IA implications
Tourist tax data at the destination level was reliable. Hotel fee data from third-party suppliers was not: figures could be incomplete, delayed or variable. This constrained the information architecture. I couldn’t confidently include hotel fees in a headline total if the figure might be wrong further down the journey. The design had to account for what could be displayed at each stage, and be honest about uncertainty where it existed.
My title and remit: Principal Designer. Design lead across the full programme. I set direction for both squads, owned all IA decisions across SRP, basket, and checkout on web and app, and directly managed the embedded designers.
The pivot: Three weeks into the basket redesign, results came back at -8.92% CVR, significant at 99.9% within 72 hours. The drop was concentrated rather than uniform. Destinations with high tax coverage (75%+) saw a -8.85% drop in CVR. Destinations with zero taxes dropped by 0.86%. The steepest fall was at Search > Price and Availability, where users met a higher price with no explanation for the difference.
Users were not rejecting inclusive pricing. They were struggling to decide when they couldn’t see why the price had jumped, and that distinction mattered.
There was pressure to push ahead. The regulatory deadline was close and the team had put months into the work. I made the call to stop the experiment and fix pricing alignment across the journey first. The usability data told a different story from the CVR: 90% of users understood what was due now rather than at the hotel, a 20-point improvement in comprehension over the control. The direction held up. The implementation and sequencing did not.
Stopping and separating those two things is what unlocked the next phase. I presented this directly to the VP of Product, with usability data alongside the CVR result, and made the case that continuing would compound the structural problem rather than solve it.
Stakeholder influence: I presented the case for basket consolidation to VP Product and VP Revenue as a programme prerequisite. The argument: any transparency model built on two independently maintained components would drift the moment either team shipped a change. The Netherlands market had partly solved this using a reusable component for the price breakdown section. Consolidating the entire basket into a single shared component would take one week, not a full rebuild. They agreed.
Standards I set: I defined the design principles governing the full programme, created the IA for the new pricing items and the variants needed to maintain consistency across regional formats, and owned the decision-making framework across both squads. The embedded Search Platform designer handled execution and iteration within that direction.
Decision log 1: Stop the basket redesign at -8.9%
- Option A: Continue iterating under deadline pressure
- Option B: Stop, diagnose, resequence
- I chose B. The CVR drop was concentrated in high-tax destinations, not universal. That told us the problem was comprehension, not the pricing model itself. Continuing would have locked us into a sequencing model where users encountered a new price total before any earlier touchpoint had prepared them for it.
Decision log 2: Unify the basket before building the design
- Option A: Build transparency on top of the existing separate components
- Option B: Unify first, then build
- I chose B. Option A would have produced inconsistent results across the journey and required double the maintenance for every future pricing change. Any new fee type or layout variant would need to be built and tested twice.
Decision log 3: Persistent disclosure over gated acknowledgement
- Option A: “Clear on cost” popover requiring user acknowledgement before browsing
- Option B: Persistent, contextual disclosure on every search result card
- I chose B. We tested a large dismissible popover, designed to explain inclusive pricing upfront so it could come off the individual SRP cards. It failed. Users closed it on sight and then lost trust while browsing. “I clicked it away, now I’m not sure if these prices include everything.” Transparency had to stay visible rather than sit behind one interaction.
What the research told us
Three patterns shaped every major decision. Tooltip-only disclosure failed on mobile, where hover states don’t exist, and on desktop it read as deliberate hiding. One-time acknowledgement gates improved comprehension in the moment but didn’t hold once users dismissed them. Shorter copy reduced comprehension every time we tried it: “Local taxes collected by the hotel” beat “Taxes & Fees” in every variant test. Users wanted the full sentence rather than a label.
The solution: three connected changes
Search result cards now show the additional fee amount persistently, for example: “An additional £XX in local fees is due at this hotel, making the total £X,XXX.” Tooltips explain why the fees apply and who collects them, rather than whether they exist at all.
The basket uses a chronological breakdown proven in the Netherlands market: Pay today (to loveholidays) + Pay at hotel (local taxes and fees) = Total trip cost. It reads as one scannable view with no arithmetic to do. Regional variants keep the same layout across different tax structures and regulatory requirements.
The unified basket component lets Trading teams toggle tax displays and per-person pricing by market without going through engineering.
Product and business
- +4.14% CVR uplift, GB market: full-funnel, session to booking, across the combined unified basket and SRP transparency rollout
- +4.75% margin per transaction, all markets
- Step conversion on the transparent Search and P&A experience: +7.7% desktop, +6.8% mobile
- Middle funnel (offer summary to passenger details): +3.64%
- Full CMA compliance ahead of April 2026 enforcement
The device figures and the headline measure different things. The device uplifts are step conversion on the pages that changed; the +4.14% is end-to-end session-to-booking across all GB traffic, where mobile carries roughly three quarters of sessions at a lower baseline. That is why the parts read higher than the whole.
User
- +20 point comprehension improvement (what’s due now vs at hotel)
- 80% of users preferred the new design over the control (quantitative usability testing)
Org and process
- Engineering lead time for pricing-related UI changes: 3 weeks → under 1 week
- Experiment velocity: 3x more variants per month in Q2 2026 vs Q4 2025
- Formal shared ownership between Search Platform and Checkout was agreed for the first time
- The unified basket component is now the foundation for pricing work across all markets, so a new fee type or point of sale can be introduced without a redesign
What didn't go well
We found the hotel fee data confidence gap late, which constrained the IA mid-programme. A data audit at the start would have shaped the architecture earlier, and I’d treat that as a discovery prerequisite on any future pricing programme.
We grouped the Netherlands rollout with GB for technical reasons: code complexity made separate testing impractical. The uplift in NL was +1.2% against a higher baseline, which suggests the approach translated. The Dutch market had regulatory nuances that deserved more rigorous validation though. Next time I’d push harder for market-specific research even when technical constraints limit what’s testable.
“Pay at hotel” caused comprehension problems across several rounds of testing. We should have validated that terminology in research instead of refining it through live iteration.
What this changed
The unified basket and additive pricing model are now the standard across all markets. The design system work set the pattern for how pricing changes get introduced: one component with one owner.
Where this goes next
Three things are unresolved:
- Strikethrough price alignment. It still references the holiday base price rather than the fully loaded total, and that gap needs to close.
- Dynamic discount badges. Campaign and discount badges are static. The next version should calculate and show the real discount against the total price.
- Zero-tax destinations. The transparency messaging should extend to “No local fees due”, which turns the compliance work into a selling point.
See the work live