Product Craft Bible
Booking & Reservation Flows
Inicio E-commerce Booking & Reservation Flows
E-commerce

Booking & Reservation Flows

8 reglas Baymard "Date Picker UX" · Baymard "Travel Accommodations Booking Search"NN/g "Date-Input Form Fields: UX Design Guidelines"NN/g "Date-Input Form Fields" · W3C WCAG 2.2 SC 1.3.1 Info and RelationshipsBaymard "Office Depot Order Review Experience" (11.6% confunde review con confirmación)
110

Booking & Reservation Flows

8 reglas
996

Muestra disponibilidad real con tres estados visibles, no solo los slots libres

El selector de disponibilidad debe distinguir tres estados simultaneamente, libre, ocupado y fuera de rango (pasado o bloqueado), usando forma, texto y color a la vez, nunca color solo. Ocultar los días sin disponibilidad en vez de mostrarlos deshabilitados priva al usuario del contexto temporal que necesita para replantear su busqueda: no distingue entre "no hay cupo", "el local cierra" o "fallo de carga". Cuando el inventario escasea, exponer cuanto queda ("Solo 2 lugares") genera urgencia legitima y reduce la ansiedad.

Baymard "Date Picker UX" · Baymard "Travel Accommodations Booking Search"
Preferir
Julio 2025
L
M
M
J
V
S
D
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Libre
Completo
Pasado
Solo quedan 2 lugares el 14 jul a este precio
Evitar
Horas libres, 14 jul
09:00
11:30
15:00
18:30
Solo muestra lo libre: el usuario no sabe si las 13:00 están tomadas, si el local cierra o si fallo la carga.
997

Calendar picker para rangos cercanos; campo de texto para fechas lejanas o ya conocidas

NN/g es explicito: los calendar pickers sirven para eventos cercanos, dentro de menos de un año, y son especialmente potentes para rangos, donde muestran dos meses en paralelo para ver check-in y check-out de una vez. Para fechas lejanas o usuarios que ya saben la fecha exacta, un campo de texto con parsing flexible es más eficiente que navegar meses. Los tres dropdowns segmentados día/mes/año elevan el costo de interacción a 9+ acciones por una sola fecha y deben evitarse.

NN/g "Date-Input Form Fields: UX Design Guidelines"
Preferir
Marzo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Abril
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Dos meses en paralelo: 15 mar → 2 abr en un vistazo
Evitar
Fecha de salida
Día
Mes
Año
Tres dropdowns = 9+ interacciones por una fecha. Ni rango ni eficiencia.
998

Deshabilita los horarios ocupados; no los ocultes ni los dejes seleccionables

Las fechas y horarios no disponibles deben permanecer visibles pero claramente deshabilitados: aria-disabled, estilo diferenciado y cursor not-allowed. Ocultarlos rompe el modelo mental del calendario, el usuario cree que el restaurante no abre a esa hora cuando en realidad solo esta lleno. Mostrarlos sin marcar es peor: el usuario selecciona, avanza y recibe un error en el paso siguiente, lo que dispara abandono. WCAG 1.3.1 exige que el estado deshabilitado se comunique por más de un canal.

NN/g "Date-Input Form Fields" · W3C WCAG 2.2 SC 1.3.1 Info and Relationships
Preferir
La Trattoria
Mesa para 2 · lunes 14 jul
18:00
18:30
19:00
19:30
20:00
20:30
21:00
21:30
Las horas tachadas existen pero están completas, no ocultas
Evitar
Mesa para 2, 14 jul
18:00
19:30
21:00
22:00
Las 19:00 y 20:30 desaparecen del grid: el usuario cree que el local no abre a esa hora.
999

Resumen completo antes de confirmar: que, cuando, cuanto y politica de cancelación

El paso de revisión previo al pago debe mostrar en una vista escaneable el servicio contratado, las fechas y horas exactas, el desglose de costos (tarifa + impuestos + cargos) y la politica de cancelación resumida con enlace al detalle. La tolerancia a sorpresas de precio o politica al momento de pagar es muy baja. Baymard documenta que el 11.6% de los usuarios confunde el paso "Order Review" con una confirmación final y abandona creyendo que ya reservo: por eso el CTA debe decir explicitamente "Confirmar y pagar", no un ambiguo "Continuar".

Baymard "Office Depot Order Review Experience" (11.6% confunde review con confirmación)
Preferir
Habitación Estandar
Hotel Centro · 1 huesped
Entra 14 jul Sale 16 jul
2 noches × $1,200$2,400
Impuestos (16%)$384
Cargo por servicio$120
Total$2,904 MXN
Cancelación gratuita hasta el 12 jul. Ver politica completa
Confirmar y pagar $2,904
Evitar
Habitación Estandar, $1,200 MXN
Continuar
Sin desglose de impuestos, sin fechas, sin politica, sin editar. "Continuar" no dice si ya reservaste.
1000

Muestra la hora en la zona del usuario y la del recurso; deja cambiar la zona

Cuando usuario y recurso están en zonas horarias distintas, detecta automáticamente la del usuario (vía navegador), muestra los slots en su hora local e indica también la hora en la ubicación del recurso. Un slot "3:00 PM" sin zona horaria hace que un usuario en otro huso confirme y llegue tres horas tarde. Ofrece un selector explicito de zona horaria para quienes usan VPN o reservan para terceros: herramientas como Calendly y OnceHub lo tratan como requisito funcional, no como extra.

Eleken "Time Picker UX Best Practices" · OnceHub / YouCanBook.me timezone docs (criterio)
Preferir
AM
Ana Mendez
Llamada de 30 min
Tu hora: Ciudad de Mexico (UTC−6) Cambiar
10:00 AM tu hora
5:00 PM
anfitrion · Londres
11:30 AM tu hora
6:30 PM
anfitrion · Londres
Evitar
Llamada de 30 min
3:00 PM
4:00 PM
Sin zona horaria: el usuario en otro huso confirma y llega 3 horas tarde.
1001

Confirma con todos los detalles y deja modificar o cancelar sin obligar a iniciar sesión

La confirmación post-reserva debe llegar por email en menos de dos minutos, repetir todos los detalles del resumen (que, cuando, cuanto, politica) y contener botones de acción directa para modificar o cancelar sin login previo, usando un token de acceso en la URL. Los recordatorios, al menos 24 horas antes y opcionalmente 1 hora antes, reducen los no-shows y la carga de soporte. Un correo genérico con solo "Tu reservación fue procesada. Código #38472" obliga a llamar por telefono para cualquier cambio.

Baymard "Mobile Receipt UX" · Calendly / OpenTable confirmation & reminder patterns (criterio)
Preferir
Reserva confirmada
Hotel Centro · #38472
14–16 jul · 2 noches
Habitación Estandar · $2,904 MXN
Cancelación gratuita hasta el 12 jul
Modificar
Ver reserva
Te recordaremos 48 h y 2 h antes · los botones abren sin pedir login
Evitar
Tu reservación fue procesada
Código: #38472
Sin fechas, sin total, sin politica. Para cambiar algo hay que llamar por telefono.
1002

Permite reservar como invitado; ofrece la cuenta después de confirmar, no antes

El flujo de reserva debe ofrecer la vía de invitado con el mismo peso visual que el login, no enterrarla en letra chica al pie. La cuenta se ofrece, no se impone, en la pantalla de confirmación, cuando el usuario ya cumplio su objetivo y esta en un estado emocional positivo. Baymard documenta que el 37% de los compradores expresa rechazo explicito al ser forzado a crear cuenta, que el 19% de los usuarios con cuenta abandona el checkout por olvidar la contrasena, y que el 62% de los sitios no da suficiente prominencia al guest checkout.

Baymard "Checkout Flow UX Optimization" (37% rechazo, 19% olvida contrasena, 62% sin prominencia)
Preferir
Como quieres reservar?
Continuar como invitado
Reserva en 2 pasos, sin contrasena
Iniciar sesión
Usa tus datos guardados
Tras confirmar: Guardar tus datos para la proxima vez? Crea tu cuenta en un clic.
Evitar
Inicia sesión para continuar
Iniciar sesión
continuar como invitado
Login obligatorio antes de ver disponibilidad; el guest checkout es letra chica al pie.
1003

El selector debe ser operable por teclado y anunciado por lectores de pantalla

Un date picker accesible sigue el patrón del WAI-ARIA APG: el botón del calendario lleva aria-expanded y aria-controls; el dialogo tiene role="dialog" con aria-modal="true" y aria-label; la grilla usa role="grid" con flechas para navegar días, Home/End para límites de semana y Page Up/Down para mes; cada celda lleva un aria-label completo ("Lunes 14 de julio de 2025"); la fecha elegida marca aria-selected="true" y los días bloqueados aria-disabled="true". La disponibilidad nunca se comunica solo por color. Los date pickers violan con frecuencia WCAG 1.3.1, 2.1.1 y 4.1.2.

W3C WAI-ARIA APG Date Picker Dialog · WCAG 2.1 SC 1.3.1 / 2.1.1 / 4.1.2 · USWDS Date Picker accessibility tests
Preferir
role="grid" · aria-modal
7
8
9
10
11
12
13
14
15
16
17
18
19
20
← → ↑ ↓ Home End PgUp PgDn
aria-label="Lunes 14 de julio de 2025"
celda foco anuncia día completo vía live region
Evitar
div con onclick, color solo
7
8
9
10
11
12
13
Divs sin roles, solo navegables por click, disponibilidad solo por fondo verde: invisible para lector y daltonismo.