Returning hundreds of options is useful only if we can help a customer make sense of them, and that has become one of the most demanding parts of building Constellation.
I want the holiday business using our product to be able to put a worthwhile journey in front of its customer without having to sort through every possible combination by hand. Doing that requires us to understand what makes each service suitable, how the services affect one another and what we can learn from the choices made on each site.
Our example is still the family travelling from Delhi to Bangkok for three nights, then Pattaya for four, over 10–17 May. In the first essay I described the data that allows us to identify the places and properties consistently. The next challenge is to use that foundation to make good decisions about the holiday.
Deciding what makes an option suitable
A low fare may involve long layovers, while an inexpensive hotel can lead to costly or inconvenient journeys across a city. Similarly, a set of appealing activities may leave the family spending too much of the day travelling between them. We have to account for those consequences when we decide what to recommend.
For flights, that means evaluating price, duration, stops and layovers with trade-offs that depend on the traveler and the journey. A family with children may value a connection differently from a solo traveler, and time lost in transit matters particularly on a short holiday. Hotels need a separate view of relevance, while activities need a planner that can work with geography, usable time, buffers and spending.
I think of this as a recommendation product within the wider company because it carries a continuing responsibility for the quality of what we put in front of people. Access to inventory gives us possibilities; the ranking and planning work helps turn those possibilities into something a customer would want to choose.
Learning from the holiday business using the site
Our customers serve different travelers and have developed different ways of selling holidays, so relevance also has to reflect the site on which the results appear. The selections made there give us evidence about what that business and its customers value, which we can bring back into improving the ordering for that site.

Interpreting that evidence takes care. A hotel may be chosen for its location, cancellation terms, price or an existing supplier relationship, and its position in the results can influence the choice too. A customer who makes no selection may be dissatisfied with the options or may simply be considering a holiday they are not ready to buy.
We therefore have to consider the context of the selections as we improve relevance, while giving a site with little history a useful starting point. The current journey’s constraints remain important throughout. This is ongoing product work as businesses use the system, rather than something we can finish by assigning a recommendation label to a few results.
Keeping the budget useful while results arrive
Hotel offers and activity results arrive at different times, which creates another ranking problem. If the hotel budget is calculated from whatever happens to remain after the latest activity response, the list can change underneath the traveler even though their preferences have stayed the same.
We give the hotel ranker a stable allocation that accounts for required travel, reserves a share for activities and works within a package ceiling. This allows new inventory to arrive without repeatedly changing the spending target against which the stays are judged. Actual price changes and customer edits can still affect the options, but the timing of the next museum result should not determine how suitable a hotel appears.
Even the representation of an unset budget needs attention. On the relevant path, zero or one is a placeholder for a budget that has not been supplied; interpreting it as a small spending target would unintentionally turn the ordering into cheapest-first.
Keeping the two cities part of the same holiday
The family’s Bangkok checkout and Pattaya check-in both fall on the 13th, with an intercity drive between them. Flight search, hotel dates, activities and ground transport all have to respect that shared timeline, because treating each city as an independent round trip could send the family home halfway through the holiday.
We use child packages for the cities and a parent for the chain. The city flight inputs are one-way, the journey home belongs at the end, and a cached fare based on a conventional single-city return cannot simply be carried into the intermediate leg. Day planning also has to preserve the time available in Bangkok before the family leaves for Pattaya, rather than treating that morning as preparation for a long-haul departure.
These are decisions across several parts of the product, which is why improving the individual ranking algorithms is only part of the task. Their results also need to agree about the journey they are helping to create.
We had to make a trade-off
A hotel with roughly ten room categories can arrive from several bedbanks as a hundred to five hundred offer rows, with variations in names such as “Deluxe King – BB” and “Deluxe King, breakfast.” Some describe the same offer, while others carry meaningful differences in meal plan, bed configuration or cancellation terms.
We separate meal plan, occupancy and refundability before comparing names, preserve meaningful bed choices and keep bundled two-room offers distinct. Ambiguous matches need sufficient confidence before they share a display group, and each rate underneath retains the key needed to book it.

The trade-off is to keep uncertain offers separate, including when the matching judgment is unavailable, so the page remains usable without hiding a choice the customer may care about. I am comfortable with that decision because the holiday business needs confidence in what it is selling, even if some of the remaining room descriptions look similar.
Keeping all the moving parts reliable
Alongside the recommendation work, we have to keep the system reliable while many people use it at once. Suppliers answer at different speeds, with some returning options immediately and others needing repeated follow-up. Bookings and cancellations can also take time to settle, so we have to keep track of unfinished work while letting the customer continue with the information already available.

We have seen repeated supplier responses double the hotel rows on a page, which meant changing how we update the results so the same response refreshes the existing list. When several searches run together, we also need to establish which have finished before telling the customer that the search is complete.
The way we wait for responses matters just as much. Ending the wait too early can make a healthy search appear broken, while leaving too many connections open can use up the capacity needed for the next customer. From the traveler’s side, either may appear as a hotel page that sometimes fails to load.
Our responsibility therefore includes controlling how much work runs at once, setting sensible waits, handling late or repeated responses and understanding whether a delay comes from a supplier or from our own systems. Each new source adds to that work, even when the experience on the page remains familiar.
What supporting another supplier means for us
I want our customers to have useful supply, and I have to weigh that benefit alongside the continuing work of supporting search, pricing, booking, holds, expiry, traveler information, timezones, cancellations and documents for each source.
A transfer reservation that has been accepted but remains unconfirmed is a good example of why that scope matters. If we record it as failed merely because we have not received an answer in time, a retry can buy another car before the first reservation eventually confirms. Keeping it pending allows us to continue checking against the existing purchase.
By this point we are maintaining a recommendation product, a planner and a collection of supplier services alongside the travel data work from the first essay. Once the family pays, that foundation also has to support the commercial and operational responsibilities of delivering the trip, which is where I will turn in the final part.