Caso de estudio UX
Mejorar la visualización de precios mediante la claridad
El número que veía un viajero al elegir un hotel y el número que se le pedía en la página de checkout no eran el mismo. Este es el trabajo que desarmó el precio en la página en vez de al final, y el experimento que midió si decir más sobre un precio vende más inventario.
El panel clave del diseño. Cada línea debajo de la tarifa de la habitación es dinero que alguien antes conocía por primera vez en el checkout.
Problema
Un precio que crecía camino a la caja
Findhotel es un actor pequeño en hospedaje. Trabaja los mercados localizados que las plataformas más grandes suelen dejar en paz, y buena parte de su inventario es inventario en riesgo: habitaciones que un hotel espera no vender y que no puede listar por su cuenta sin que los sitios más grandes lo empujen abajo en los rankings.
Vender ese inventario significa ganar por precio, y el embudo estaba minando su propio argumento más fuerte. El precio que se mostraba al elegir una habitación no era el precio que se pedía dos pantallas después en el embudo. Los datos mostraban un fuerte abandono de usuarios concentrado en la página de checkout.
La brecha era más ancha para viajeros fuera de Estados Unidos, porque ahí es donde viven las líneas extra: un impuesto municipal que cobra el ayuntamiento, una tarifa de resort que cobra el hotel, otros cargos locales que varían calle por calle. Nada de eso estaba oculto a propósito. Simplemente aparecía tarde, sin nombre y todo de golpe.
Por una vez, dos argumentos apuntaban en la misma dirección. El negocio quería una tasa de conversión más alta. Yo quería que nuestros usuarios pudieran responder la pregunta por qué estoy pagando esto y para qué sin abrir una segunda pestaña.
Detalles de la oferta, la única pantalla del embudo cuyo trabajo entero es responder esa pregunta.
Objetivos
Lo que el trabajo tenía que lograr
La visualización del precio está en la ruta de ingresos de cada reserva que toma la empresa, así que cambiarla es un cambio con el que nadie puede estar tranquilo. Poder señalar un despliegue por etapas fue lo que hizo posible la conversación siquiera.
Equipo & audiencia
Quién hizo qué
El product owner trajo el caso de negocio y fijó las prioridades. El científico de datos aportó los números en los que descansaban las decisiones y diseñó las pruebas A/B que los midieron. Un redactor era dueño de la redacción de cada etiqueta. Una agencia externa tradujo esa redacción a los idiomas en que corre el sitio.
Todo entre el problema y la entrega era mío: el benchmark, las sesiones de ideación y de definición del alcance, los wireframes y el prototipo, las pruebas de guerrilla, el plan de desarrollo, las pantallas de alta fidelidad, las pruebas manuales antes del lanzamiento, la observación posterior, y el reporte que permitió a cualquiera en la empresa seguir qué había cambiado.
Audiencia
A quién apuntamos, y en qué orden
El primer lanzamiento fue para viajeros estadounidenses que llegaban desde Google hotel ads a la página de selección de habitación. Ese era el grupo más grande y valioso del sitio, lo que lo volvía la audiencia que valía la pena mejorar y la audiencia con la que valía la pena tener cuidado.
Una vez que una hipótesis sobrevivía, el cambio salía al resto de los mercados de habla inglesa, y solo entonces a los otros veintiséis idiomas que el sitio soportaba en ese momento. Cada paso era una apuesta menor de lo que valía el anterior, que es como a un equipo se le permite tocar la ruta de ingresos más de una vez.
El grupo al que apuntamos primero no es el grupo del que vino el resultado.
Alcance y limitaciones
Lo que podíamos alcanzar, y lo que no
La empresa estaba organizada de modo que la página de selección de habitación y todo lo que venía después nos pertenecía, lo que significaba que las páginas de búsqueda y de aterrizaje no. Esa es una frontera dura trazada por la mitad del problema: el viajero forma su expectativa del precio en una pantalla que no teníamos permiso de cambiar, y luego se encuentra con la nuestra.
Tampoco había presupuesto para pruebas moderadas. Se llamó a un puñado de clientes, pero el propósito de esas llamadas era recoger lo que ya les disgustaba de la experiencia actual, no ponerles un prototipo enfrente. Así que la mitad cualitativa de este proyecto es un benchmark y un conjunto de grabaciones de sesión, no un estudio.
La primera tarjeta es la que vale la pena mirar con calma, porque es la diferencia entre cambiar una pantalla y cambiar un producto. Un desglose de precio que solo es completamente visible en el momento del pago no es honesto; es una divulgación. Así que las mismas filas tenían que sobrevivir más allá del punto donde se mueve el dinero, hasta la pantalla que confirma la reserva y el correo que la sigue.
En este wireframe se resolvió eso. Es la pantalla de confirmación, que lleva el mismo desglose que el checkout, con dos líneas adicionales que el checkout no tenía: lo que ya se pagó, y lo que el hotel todavía va a cobrar. Todo lo que viene después en esta página deriva de esa decisión.
Confirmación, en wireframe. El desglose no se detiene en el pago, y los marcadores de moneda en la letra pequeña están ahí porque también tenía que ser cierto en cada mercado.
Proceso
Nueve pasos, repetidos en cada iteración
Esto nunca fue un proyecto con final. Es un ciclo que ha corrido varias veces, y cada pasada se apoyó en los pasos que el producto más necesitaba en ese momento. El benchmark es la excepción: se hizo a fondo una vez y después se consultó.
Mapear dónde aparece un precio
Un diagrama tosco de las interacciones que un viajero puede tener con un precio y lo que se sigue de cada una. No es un recuento completo de cada estado en que puede estar el embudo, ni iba a serlo nunca. Lo que compra son los edge cases que se pueden ver por adelantado en lugar de los que un desarrollador encuentra en un sprint, y un objeto compartido al que señalar cuando alguien pregunta si pensamos en un edge case muy específico.
Comparar ocho plataformas en siete países
Empezó como una pregunta con una respuesta compleja: ¿qué incluyen las otras plataformas en el precio por noche?
Responderla con honestidad significaba decidir contra quién comparar, dónde y bajo qué reserva. Entonces: Findhotel contra Expedia, Booking, Agoda, Skyscanner, TripAdvisor, Airbnb y Kayak, porque son con los que la empresa ya se medía. En los Países Bajos, Alemania, el Reino Unido, Australia, Bielorrusia, Indonesia e Israel, porque son los mercados donde nuestras propias reglas de visualización de precios ya diferían.
Los resultados comparables necesitan un control, así que cada búsqueda fue la misma búsqueda: Park Plaza Victoria en Ámsterdam, un adulto, una habitación, para la noche del 13 de octubre de 2020, un hotel elegido precisamente porque lleva tanto un impuesto municipal como una cuota de turismo. Las búsquedas se corrieron en septiembre, con un mes de anticipación, que es más o menos cuando alguien reserva una escapada urbana. Una segunda pasada pidió dos noches, del 13 al 15 de octubre, en los cinco mercados donde la primera había levantado una duda. Donde una plataforma no tenía ese hotel, se usó el equivalente más cercano y se anotó la sustitución.
¿Plataforma incluye impuesto general en tarifa por noche?
Sí, desde los resultados de búsqueda en adelante
No, solo en el checkout
Nombra la tarifa base y el total juntos
¿Plataforma incluye impuesto local en tarifa por noche?
Sí, desde los resultados de búsqueda en adelante
No, solo en el checkout
Nombra la tarifa base y el total juntos
Two questions, asked at every platform
Does the nightly rate include the general tax – the sales tax the platform itself collects?
Does the nightly rate include the local tax – the city or tourist tax the destination collects?
- Included from the start
- Revealed in checkout
- Inconsistent
- Stated separately
Two searches, one hotel
Search 1 · 1 night
Park Plaza Victoria Amsterdam, 13–14 Oct 2020 · 1 adult, 1 room
Airbnb used a different hotel here; TripAdvisor didn’t carry this one at all.
Search 2 · 2 nights
Same hotel, 13–15 Oct 2020 · 1 adult, 1 room
Airbnb, Skyscanner and TripAdvisor didn’t carry it either; another hotel stood in for all three.
| Local | General | |||||||
|---|---|---|---|---|---|---|---|---|
| Market | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately |
| GermanyDE: Germany | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| NetherlandsNL: Netherlands | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| United KingdomUK: United Kingdom | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| AustraliaAU: Australia | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| BelarusBY: Belarus | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| IndonesiaID: Indonesia | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| IsraelIL: Israel | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| Local | General | |||||||
|---|---|---|---|---|---|---|---|---|
| Market | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately |
| GermanyDE: Germany | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately |
| NetherlandsNL: Netherlands | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately |
| United KingdomUK: United Kingdom | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately |
| AustraliaAU: Australia | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately |
| BelarusBY: Belarus | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately |
| IndonesiaID: Indonesia | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately |
| IsraelIL: Israel | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately |
| Local | General | |||||||
|---|---|---|---|---|---|---|---|---|
| Market | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately |
| GermanyDE: Germany | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately |
| NetherlandsNL: Netherlands | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately |
| United KingdomUK: United Kingdom | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately |
| AustraliaAU: Australia | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately |
| BelarusBY: Belarus | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately |
| IndonesiaID: Indonesia | Not recorded | Not: Included from the start | Revealed in checkout | Not: Inconsistent | Not: Stated separately | |||
| IsraelIL: Israel | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Stated separately |
More platforms
| Local | General | |||||||
|---|---|---|---|---|---|---|---|---|
| Market | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately |
| GermanyDE: Germany | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| NetherlandsNL: Netherlands | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| United KingdomUK: United Kingdom | *Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | *Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| AustraliaAU: Australia | *Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | *Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| BelarusBY: Belarus | Not: Included from the start | *Revealed in checkout | Not: Inconsistent | Not: Stated separately | Not: Included from the start | *Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| IndonesiaID: Indonesia | Not: Included from the start | *Revealed in checkout | Not: Inconsistent | Not: Stated separately | Not: Included from the start | *Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| IsraelIL: Israel | Not: Included from the start | *Revealed in checkout | Not: Inconsistent | Not: Stated separately | Not: Included from the start | *Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| Local | General | |||||||
|---|---|---|---|---|---|---|---|---|
| Market | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately |
| GermanyDE: Germany | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| NetherlandsNL: Netherlands | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| United KingdomUK: United Kingdom | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| AustraliaAU: Australia | Not: Included from the start | Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| BelarusBY: Belarus | Not: Included from the start | Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| IndonesiaID: Indonesia | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| IsraelIL: Israel | Not: Included from the start | Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| Local | General | |||||||
|---|---|---|---|---|---|---|---|---|
| Market | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately |
| GermanyDE: Germany | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| NetherlandsNL: Netherlands | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| United KingdomUK: United Kingdom | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| AustraliaAU: Australia | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Not: Included from the start | Not: Revealed in checkout | Inconsistent | Not: Stated separately |
| BelarusBY: Belarus | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Not: Included from the start | Not: Revealed in checkout | Inconsistent | Not: Stated separately |
| IndonesiaID: Indonesia | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Not: Included from the start | Not: Revealed in checkout | Inconsistent | Not: Stated separately |
| IsraelIL: Israel | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| Local | General | |||||||
|---|---|---|---|---|---|---|---|---|
| Market | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately |
| GermanyDE: Germany | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| NetherlandsNL: Netherlands | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| United KingdomUK: United Kingdom | *Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | *Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| AustraliaAU: Australia | Not: Included from the start | Not: Revealed in checkout | Inconsistent | Not: Stated separately | Not: Included from the start | Not: Revealed in checkout | Inconsistent | Not: Stated separately |
| BelarusBY: Belarus | Not: Included from the start | Not: Revealed in checkout | Inconsistent | Not: Stated separately | Not: Included from the start | Not: Revealed in checkout | Inconsistent | Not: Stated separately |
| IndonesiaID: Indonesia | Not: Included from the start | Not: Revealed in checkout | Inconsistent | Not: Stated separately | Not: Included from the start | Not: Revealed in checkout | Inconsistent | Not: Stated separately |
| IsraelIL: Israel | Not: Included from the start | Not: Revealed in checkout | Inconsistent | Not: Stated separately | Not: Included from the start | Not: Revealed in checkout | Inconsistent | Not: Stated separately |
| Local | General | |||||||
|---|---|---|---|---|---|---|---|---|
| Market | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately | Incl.: Included from the start | Held: Revealed in checkout | Mix: Inconsistent | Split: Stated separately |
| GermanyDE: Germany | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| NetherlandsNL: Netherlands | Not: Included from the start | Revealed in checkout | Not: Inconsistent | Not: Stated separately | Not: Included from the start | Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| United KingdomUK: United Kingdom | *Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately | *Included from the start | Not: Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| AustraliaAU: Australia | Not: Included from the start | Revealed in checkout | Not: Inconsistent | Not: Stated separately | Not: Included from the start | Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| BelarusBY: Belarus | Did not appear to sell into Belarus that month. | |||||||
| IndonesiaID: Indonesia | Not: Included from the start | Revealed in checkout | Not: Inconsistent | Not: Stated separately | Not: Included from the start | Revealed in checkout | Not: Inconsistent | Not: Stated separately |
| IsraelIL: Israel | Not: Included from the start | *Revealed in checkout | Not: Inconsistent | Not: Stated separately | Not: Included from the start | *Revealed in checkout | Not: Inconsistent | Not: Stated separately |
* Added the nights together only at checkout – search and room selection still quoted them one at a time.
El hallazgo está en las dos filas con estrella. Airbnb y Expedia fueron las únicas plataformas que respondieron ambas preguntas igual en todos los mercados, y la respuesta que dieron no fue ni sí ni no: nombran la tarifa base y el total al mismo tiempo. Todos los demás, Findhotel incluido, eligieron un número y esperaron que fuera el correcto para ese país.
El tablero también registra lo que no funcionó. Las cifras de Skyscanner no cuadraban, y TripAdvisor no parecía vender nada en Bielorrusia.
La tabla de abajo mostró sus precios de noviembre de 2020, para una sola habitación y para varias habitaciones.
Use a coupon, credit, or promotion code
Rates are quoted in US dollars. Taxes and/or property imposed fees of $15.70 will be collected by the property in the local currency (€13.34). Taxes and/or fees due at the property are based on current exchange rates, which may vary at time of travel.
Use a coupon, credit, or promotion code
Rates are quoted in US dollars. Taxes and/or property imposed fees of $60.56 will be collected by the property in the local currency (€51.47). Taxes and/or fees due at the property are based on current exchange rates, which may vary at time of travel.
Thu 22 Oct 2020Check-out
Fri 23 Oct 2020
FREE cancellation before 23:59 on 20 October 2020
No payment needed now. You’ll pay at the property.
Included in price: Hotel tax and service fees € 4.95
Not included in price (collected by the property): City Tax € 3.85
YOU SAVED € 353.76 ON THIS BOOKING!
14% OFF TODAY
Included in price: VAT 9%
Not included in price (collected by the property): City Tax € 12.50
YOU SAVED € 15.96 ON THIS BOOKING!
🚗 Free cancellation
Book now. Pay later when you stay.
Free Cancellation until Oct 18, 2020 ⓘ
Non Refundable ⓘ
1 room, 2 guests, 2 nights
Fri 09-11-2020 - Sun 09-13-2020
Charges
€288.70
2 rooms, 4 guests, 2 nights
Fri 09-11-2020 - Sun 09-13-2020
Charges
€407.12
USD 88.00
(US$44.00/night x 2 nights)
Learn moreRefundable until Oct 02, 2020
Price
USD 79.29
(US$79.29/night x 1 night)
Learn moreNon Refundable
Additional Fees (Pay at Hotel)
Taxes and fees may vary upon arrival
Check-out: Wed, Oct 141 night
Taxes due at hotel: ≈ €53.72
Prepay Online
An online prepayment of €138.04 is required to book this room.
Included in the price: Breakfast not included
other tax and fee
(Local currency: US$225.58)
Taxes and fees may vary upon arrival
130 Trip Coins = €1.11
Best stay with free cancellation
for 1 room, 2 guests, 1 night
including taxes and fees
Superior Twin Room 👤👤
Free cancellation
Executive Double Room 👤👤👤
Free cancellation
for 2 rooms, 5 guests, 1 night
including taxes and fees
(30,34€)
*Prices are quoted in CAD based on the current exchange rate. The amount due at the property is payable in EUR.
Esas siete imágenes representan la materia prima de la que se leyó la matriz. Cada uno es el panorama completo de un país capturado en una sola pasada, que es también por qué el estudio lleva fecha: así se veían estos sitios en septiembre de 2020.
Ideación, y luego acotar el alcance
Yo dirigí las sesiones de ideación, y el benchmark es lo que hizo que valieran la pena. Llevar a un equipo por lo que ocho competidores le hacen a la misma reserva es una forma más rápida de establecer qué es posible que cualquier opinión. Mueve la conversación de opiniones sobre el precio a observaciones sobre los precios.
Después de cada sesión venía el alcance, con el product owner y el científico de datos. Dos preguntas, siempre en este orden: "¿Cómo se vería la respuesta correcta si nada estorbara el desarrollo?", y "¿Cuál es la pieza más pequeña que podríamos desarrollar para poner en tráfico real?". La distancia entre esas dos respuestas formó el roadmap.
Un prototipo lo bastante barato para discutirlo
Los wireframes se volvieron un prototipo clicable, mantenido tosco a propósito. El público eran los stakeholders y cualquiera en la empresa con algo en juego en el resultado, y una pantalla que se ve terminada invita a una conversación sobre qué tan terminada se ve. Una gris invita a una conversación sobre el precio.
Después pruebas de guerrilla, que aquí significa agarrar a quien esté disponible y verlo intentarlo. No sustituye a un estudio y nunca se ofreció como tal. Atrapa lo obvio, y genera las preguntas que vuelven al equipo como investigación de verdad: qué pasa cuando la moneda del viajero no es la moneda del proveedor, qué pasa con varias habitaciones, qué pasa cuando el cargo es mayor que la habitación.
El flujo entero en un teléfono, en bandas por etapa, en la forma en que se discutió por primera vez. Sigue más allá del checkout hasta los correos, la gestión de reservas y la cancelación.
Convertirlo en tickets
Un diagrama del happy path y de los edge cases que importan, con cada rama cargando la pantalla que produce. De ese dibujo un product owner escribe tickets. También es el artefacto al que vuelvo en el paso siete, cuando la pregunta es si lo construido hace lo que se acordó.
Entregarlo al front-end
Pantallas de alta fidelidad, diseñadas con la guía de estilo y la librería de componentes de la empresa, de modo que un desarrollador ensambla piezas conocidas en lugar de interpretar una imagen. Las pantallas clave entraron a Zeplin en escritorio y móvil, que es de donde salen el padding, el color y el icono.
Revisar lo construido contra los escenarios
En cuanto los desarrolladores tenían algo sin lanzar, yo recorría a mano los escenarios acordados para ese sprint. Aquí es donde el mapa del paso uno y el diagrama del paso cinco se pagan solos, porque de lo contrario la respuesta a si todo quedó cubierto es el recuerdo que alguien tiene de una conversación.
Dos grabaciones de producción
Una vez que está en vivo, la pregunta cambia de si funciona a qué hace la gente con ello. FullStory graba sesiones reales y permite segmentar por comportamiento o por dónde está alguien, y todo lo que encontré digno de guardar, un error o una idea o un hábito que nadie había previsto, iba a un documento.
Dos de esas sesiones están aquí porque cada una muestra algo que una tasa de conversión no puede. Una es un viajero estadounidense en el lado B que va de la selección de habitación hasta el checkout. La otra es un viajero en Japón que abre el desglose del precio de una habitación, que es exactamente el gesto que este proyecto existió para volver valioso.
Estados Unidos, de la selección de habitación al checkout, en el lado B de la prueba
Japón, abrir el desglose del precio desde la página de selección de habitación
Hacer el cambio legible para los colegas
El último paso es el que decide si alguno de los otros viaja. El product owner y el científico de datos escribieron el relato legible; mi parte fue dibujar los dos lados uno contra otro para que alguien que nunca había estado en una sola reunión sobre esto pudiera hacer scroll una vez y ver qué se movió.
Los dos tableros de abajo recorren el mismo trayecto dos veces, selección de habitación a la izquierda y checkout a la derecha, con los puntos de decisión presentados como preguntas y el panel resultante bajo cada rama. Ponlos uno junto al otro y el cambio entero son tres cosas: el cargo recupera su nombre, lo que pagas ahora se separa de lo que pagas allá, y una frase dice quién lo cobra.
¿Más de una noche, o más de una habitación?
Resort Tower Two Queen …
Deal detailsCompared with 2 other sites No changes
Resort Tower Two Queen …
Non-refundable rate
Resort Tower Two Queen …
Non-refundable rate
Nightly price including taxes and fees
CLP 59,803
CLP 51,381 Nightly price including taxes and fees
Price details 14% off
- 1 night x 1 room
- CLP 17,540.28
- Taxes and fees
- CLP 2,699.71
- Due at property
- CLP 31,140.86
- Resort fee
- CLP 31,109.12
Resort Tower Two Queen …
Deal detailsCompared with 2 other sites No changes
Resort Tower Two Queen …
CLP 74,507
Non-refundable rate
Resort Tower Two Queen …
CLP 74,531
Non-refundable rate
Nightly price per room including taxes and fees
CLP 74,531
CLP 62,031 Nightly price per room including taxes and fees
Price details 17% off
- 2 nights x 2 rooms
CLP 26,773.45 average per night per room - CLP 107,093.81
- Taxes and fees
CLP 4,116.28 average per night per room - CLP 16,465.10
- Due at property
- CLP 124,563.46
- Resort fee
CLP 31,109.12 average per night per room - CLP 124,436.48
¿La moneda del huésped es distinta a la del hotel?
¿Se debe algo en el hotel?
¿Más de una noche, o más de una habitación?
1 King Bed, Nonsmoking
Non-refundable rate
Price details 5% off
- 1 night x 1 room
- CLP 41,437.44
- Taxes and fees
- CLP 12,690.22
with taxes & fees
($68.97)
The price is converted to show you the approximate cost in CLP. You’ll pay in USD.
The price is converted to show you the approximate cost in CLP. You’ll pay now in USD ($68.97).
1 King Bed, Nonsmoking
Non-refundable rate
Price details 5% off
- 2 nights x 2 rooms
CLP 41,437.44 per night per room - CLP 165,749.76
- Taxes and fees
CLP 12,643.13 per night per room - CLP 50,572.51
with taxes & fees
($275.64)
The price is converted to show you the approximate cost in CLP. You’ll pay in USD.
The price is converted to show you the approximate cost in CLP. You’ll pay now in USD ($275.64).
¿Más de una noche, o más de una habitación?
Resort Tower Two Queen Room
Partially refundable rate
Price details 14% off
- 1 night x 1 room
- CLP 17,540.28
- Taxes and fees
- CLP 2,699.71
- Due now
- CLP 20,239.99
- Due at property
- CLP 31,109.12
- Resort fee
- CLP 31,109.12
with taxes & fees
($65.47)
The price is converted to show you the approximate cost in CLP. You’ll pay in USD.
The price is converted to show you the approximate cost in CLP. You’ll pay now in USD ($25.79). Pay at property amount will be collected by the property in the local currency.
Resort Tower Two Queen Room
Partially refundable rate
Price details 17% off
- 2 nights x 2 rooms
CLP 26,773.45 per night per room - CLP 107,093.81
- Taxes and fees
CLP 4,112.08 per night per room - CLP 16,465.10
- Due now
- CLP 123,558.91
- Due at property
- CLP 124,436.48
- Resort fee
CLP 31,109.12 per night per room - CLP 124,436.48
with taxes & fees
($316.16)
The price is converted to show you the approximate cost in CLP. You’ll pay in USD.
The price is converted to show you the approximate cost in CLP. You’ll pay now in USD ($157.44). Pay at property amount will be collected by the property in the local currency.
Prototipo
El prototipo mismo
Un flujo, tres regiones: la misma figura compartida que corre el prototipo del planificador de rayos X, apuntada ahora a este archivo. Elige una región para ver cómo se arma el precio total ahí.
Prototipo
El prototipo de Figma donde se probó el concepto, con un flujo mostrado para tres regiones. Haz clic fuera de un control para ver qué se puede pulsar.
Conclusión
Lo que dijeron cinco semanas de tráfico
Conversión, para viajeros fuera de Estados Unidos, en una prueba de cinco semanas.
El efecto fue más marcado donde la gente ya espera que un precio mostrado contenga el impuesto. Lo que habíamos incorporado no era impuesto en absoluto: eran los cargos de hospedaje que estaban a su lado.
El tráfico de escritorio convirtió mejor. El tráfico móvil convirtió un poco peor, con el mismo cambio, en las mismas semanas.
Las reservas hechas con cerca de una semana de anticipación mejoraron. Las de último minuto quedaron un poco peor, que es el patrón que esperarías si leer toma un tiempo que alguien no tiene.
Apuntamos esto a viajeros estadounidenses que llegaban desde Google hotel ads, con el argumento de que eran el grupo más grande y valioso del sitio. La ganancia vino de todos los demás lados.
Eso no es un fracaso, pero es un resultado sobre el objetivo y no sobre el cambio, y merece leerse así. Un mercado donde el precio mostrado ya contiene el impuesto ha entrenado a sus viajeros para esperar que el número de la tarjeta sea el número que pagan. Rompe esa expectativa y la corrección vale mucho. Un mercado donde el impuesto se agrega al final ha entrenado la expectativa contraria, y ahí había menos que corregir.
Cada cargo con su propia línea es una línea más, y un teléfono es donde una línea cuesta más. Nadie midió cuál de los dos efectos hacía el trabajo, así que lo que el resultado dice de verdad es que la claridad no es gratis en todas partes y que este proyecto nunca averiguó dónde deja de pagarse.
Lo que vino después
Para diciembre de 2020 el trabajo se había vuelto un documento y no una pantalla: un mapa de cómo debe expresarse un precio en cada etapa del embudo, de los resultados de búsqueda pasando por la selección de habitación y los detalles de la oferta hasta el checkout. Cuatro tableros, uno por etapa, cada uno la regla y no un ejemplo de ella.
Aquí también es donde se encuentran los dos proyectos de Findhotel en este sitio. Al fondo de ese tablero de checkout hay una elección entre pagar ahora y pagar en el hotel, y darle esa elección a alguien como se debe es un caso de estudio propio. Nombrar lo que cobra el hotel es lo que hizo posible ofrecerla.
Free cancellation
Nightly price including taxes
Free cancellation
Nightly price including taxes
Free cancellation
Nightly price
Free cancellation
Nightly price per room including taxes
Free cancellation
Nightly price per room including taxes
Free cancellation
Nightly price per room
Free cancellation
Nightly price including taxes
Free cancellation
Nightly price including taxes
Free cancellation
Nightly price
Free cancellation
Nightly price per room including taxes
Free cancellation
Nightly price per room including taxes
Free cancellation
Nightly price per room
Free cancellation
before 14 Sep 2020
Nightly price including taxes and fees
Free cancellation
before 14 Sep 2020
Nightly price including taxes
Free cancellation
before Sep 14, 2020
Nightly price
Free cancellation
before 14 Sep 2020
Nightly price per room including taxes and fees
Free cancellation
before 14 Sep 2020
Nightly price per room including taxes
Free cancellation
before Sep 14, 2020
Nightly price per room
Free cancellation
before 14 Sep 2020
Nightly price including taxes and fees
Free cancellation
before 14 Sep 2020
Nightly price including taxes
Free cancellation
before Sep 14, 2020
Nightly price
Free cancellation
before 14 Sep 2020
Nightly price per room including taxes and fees
Free cancellation
before 14 Sep 2020
Nightly price per room including taxes
Free cancellation
before Sep 14, 2020
Nightly price per room
- 1 night × 1 room
- €90
- Taxes and fees
- €9
- Local tax
- €1
- Total
- €100
- 1 night × 1 room
- €90
- Taxes and fees
- €9
- Subtotal
- €99
- Local tax fee
- €1
- Total
- €100
Additional charges
- 1 night × 1 room
- $90
- Taxes and fees
- $9
- Local tax
- $1
- Total
- $100
- 1 night × 2 rooms
- €180
- Taxes and fees
- €18
- Local tax
- €2
- Total
Average nightly price per room €100 - €200
- 1 night × 2 rooms
- €180
- Taxes and fees
- €18
- Subtotal
Average nightly price per room €99 - €198
- Local tax fee
- €2
- Total
- €200
Additional charges
- 1 night × 2 rooms
- $180
- Taxes and fees
- $18
- Local tax
- $2
- Total
Average nightly price per room $90 - $200
- 3 nights × 1 room
- €270
- Taxes and fees
- €27
- Local tax
- €3
- Total
Average nightly price €100 - €300
- 3 nights × 1 room
- €270
- Taxes and fees
- €27
- Subtotal
Average nightly price €99 - €297
- Local tax fee
- €3
- Total
- €300
Additional charges
- 3 nights × 1 room
- $270
- Taxes and fees
- $27
- Local tax
- $3
- Total
Average nightly price $90 - $300
- 2 nights × 2 rooms
- €360
- Taxes and fees
- €36
- Local tax
- €4
- Total
Average nightly price per room €100 - €400
- 2 nights × 2 rooms
- €360
- Taxes and fees
- €36
- Subtotal
Average nightly price per room €99 - €396
- Local tax fee
- €4
- Total
- €400
Additional charges
- 2 nights × 2 rooms
- $360
- Taxes and fees
- $36
- Local tax
- $4
- Total
Average nightly price per room $90 - $400
Free cancellation before 14 Sep 2020
- 1 night × 1 room
- €90
- Taxes and fees
- €9
- Local tax
- €1
- Total
- €100
- Pay now
- €99
- Pay at property
- €1
The price is converted to show you the approximate cost in {userCurrencyCode}. You’ll pay now in {chargeableCurrencyCode} {CurrencySymbol}{Amount}. Local taxes or resort fees will be collected by the property in the local currency.
Free cancellation before 14 Sep 2020
- 1 night × 1 room
- €90
- Taxes and fees
- €9
- Subtotal
- €99
- Local tax
- €1
- Total
- €100
Additional charges
- Pay now
- €99
- Pay at property
- €1
The price is converted to show you the approximate cost in {userCurrencyCode}. You’ll pay now in {chargeableCurrencyCode} {CurrencySymbol}{Amount}. Local taxes or resort fees will be collected by the property in the local currency.
Free cancellation before Sep 14, 2020
- 1 night × 1 room
- $90
- Taxes and fees
- $9
- Local tax
- $1
- Total
- $100
- Pay now
- $99
- Pay at property
- $1
The price is converted to show you the approximate cost in {userCurrencyCode}. You’ll pay now in {chargeableCurrencyCode} {CurrencySymbol}{Amount}. Local taxes or resort fees will be collected by the property in the local currency.
Free cancellation before 14 Sep 2020
- 1 night × 2 rooms
- €180
- Taxes and fees
- €18
- Local tax
- €2
- Total
Average nightly price per room €100 - €200
- Pay now
- €198
- Pay at property
- €2
The price is converted to show you the approximate cost in {userCurrencyCode}. You’ll pay now in {chargeableCurrencyCode} {CurrencySymbol}{Amount}. Local taxes or resort fees will be collected by the property in the local currency.
Free cancellation before 14 Sep 2020
- 1 night × 2 rooms
- €180
- Taxes and fees
- €18
- Subtotal
Average nightly price per room €99 - €198
- Local tax
- €2
- Total
- €200
Additional charges
- Pay now
- €198
- Pay at property
- €2
The price is converted to show you the approximate cost in {userCurrencyCode}. You’ll pay now in {chargeableCurrencyCode} {CurrencySymbol}{Amount}. Local taxes or resort fees will be collected by the property in the local currency.
Free cancellation before Sep 14, 2020
- 1 night × 2 rooms
- $180
- Taxes and fees
- $18
- Local tax
- $2
- Total
Average nightly price per room $90 - $200
- Pay now
- $198
- Pay at property
- $2
The price is converted to show you the approximate cost in {userCurrencyCode}. You’ll pay now in {chargeableCurrencyCode} {CurrencySymbol}{Amount}. Local taxes or resort fees will be collected by the property in the local currency.
Free cancellation before 14 Sep 2020
- 3 nights × 1 room
- €270
- Taxes and fees
- €27
- Local tax
- €3
- Total
Average nightly price €100 - €300
- Pay now
- €297
- Pay at property
- €3
The price is converted to show you the approximate cost in {userCurrencyCode}. You’ll pay now in {chargeableCurrencyCode} {CurrencySymbol}{Amount}. Local taxes or resort fees will be collected by the property in the local currency.
Free cancellation before 14 Sep 2020
- 3 nights × 1 room
- €270
- Taxes and fees
- €27
- Subtotal
Average nightly price €99 - €297
- Local tax
- €3
- Total
- €300
Additional charges
- Pay now
- €297
- Pay at property
- €3
The price is converted to show you the approximate cost in {userCurrencyCode}. You’ll pay now in {chargeableCurrencyCode} {CurrencySymbol}{Amount}. Local taxes or resort fees will be collected by the property in the local currency.
Free cancellation before Sep 14, 2020
- 3 nights × 1 room
- $270
- Taxes and fees
- $27
- Local tax
- $3
- Total
Average nightly price $90 - $300
- Pay now
- $297
- Pay at property
- $3
The price is converted to show you the approximate cost in {userCurrencyCode}. You’ll pay now in {chargeableCurrencyCode} {CurrencySymbol}{Amount}. Local taxes or resort fees will be collected by the property in the local currency.
Free cancellation before 14 Sep 2020
- 2 nights × 2 rooms
- €360
- Taxes and fees
- €36
- Local tax
- €4
- Total
Average nightly price per room €100 - €400
- Pay now
- €396
- Pay at property
- €4
The price is converted to show you the approximate cost in {userCurrencyCode}. You’ll pay now in {chargeableCurrencyCode} {CurrencySymbol}{Amount}. Local taxes or resort fees will be collected by the property in the local currency.
Free cancellation before 14 Sep 2020
- 2 nights × 2 rooms
- €360
- Taxes and fees
- €36
- Subtotal
Average nightly price per room €99 - €396
- Local tax
- €4
- Total
- €400
Additional charges
- Pay now
- €396
- Pay at property
- €4
The price is converted to show you the approximate cost in {userCurrencyCode}. You’ll pay now in {chargeableCurrencyCode} {CurrencySymbol}{Amount}. Local taxes or resort fees will be collected by the property in the local currency.
Free cancellation before Sep 14, 2020
- 2 nights × 2 rooms
- $360
- Taxes and fees
- $36
- Local tax
- $4
- Total
Average nightly price per room $90 - $400
- Pay now
- $396
- Pay at property
- $4
The price is converted to show you the approximate cost in {userCurrencyCode}. You’ll pay now in {chargeableCurrencyCode} {CurrencySymbol}{Amount}. Local taxes or resort fees will be collected by the property in the local currency.
Esos tableros son las reglas. Lo que la página original ofrecía a continuación era la cosa misma: un prototipo clicable de las tres lógicas de visualización de precios que el sitio corría a la vez, para que un lector pudiera probarlas en lugar de leer sobre ellas.