
A travel booking platform phase one runs 1,580 hours across eight modules. At $40 per hour that is $63,200, at $100 per hour $158,000, and about $102,700 at a $65 blended rate. The full span is 1,170 to 2,280 hours.
The largest module is the booking and order record at 200 to 380 hours, and the one that decides whether anything else works is the inventory and availability model at 180 to 340. Availability is the product. A travel business sells the right to occupy something at a time, and almost every expensive failure in this category is a failure to know, reliably, what is still available.
The module people underestimate is changes, cancellations and refunds at 150 to 300 hours. It gets specified in one line and it is where margin leaks, because a change is not a cancellation followed by a booking — it is a repricing against rules that were set when the original was made, against inventory that has moved since.
The ordinary failure is not a crashed site. It is one unit sold twice, discovered at check-in, costing a free upgrade or a relocation and a review that outlives both.

Module | Worked example | Published range |
Discovery and channel inventory | 90 h | 60 to 120 |
Inventory and availability model | 240 h | 180 to 340 |
Rate plans and pricing rules | 210 h | 160 to 300 |
Booking and order record | 270 h | 200 to 380 |
Supplier and channel integration | 250 h | 180 to 360 |
Payments, deposits and capture | 190 h | 140 to 280 |
Changes, cancellations and refunds | 200 h | 150 to 300 |
Reconciliation and reporting | 130 h | 100 to 200 |
Total | 1,580 h | 1,170 to 2,280 |
Note the first module: discovery and channel inventory. Before anything is designed, the list of places your product can be sold — your own site, an OTA, a bed bank, a phone line, a walk-in — has to exist, because every one of them reads the same availability and each has its own rules about what it may sell.
The naive version is a count: three rooms left. It survives until two channels read it at once.
Real availability has to express things a count cannot. Holds, where a unit is reserved for minutes while someone completes a payment, and which must expire reliably. Allocations, where a channel is given a block it may sell from without checking. Stop-sells, where a date is closed regardless of physical availability. And restrictions — minimum stay, closed to arrival, closed to departure — which mean a unit can be physically free and still unsellable for a particular request.
Then the same date range has to be queryable from several directions at once, quickly, because a search across a month of dates for a flexible traveller is a far heavier read than a single availability check.
The decision that matters most is who is authoritative. If your system is, channels must ask it. If a channel manager is, your system has to accept that its own view may be stale and behave accordingly. Either is workable; what is not workable is leaving it implicit, which is how the same unit gets sold twice.
160 to 300 hours, and the range reflects how quickly this compounds.
A rate is not a price. It is a price for a unit type, for a date range, for an occupancy, under a plan with its own conditions — refundable or not, breakfast included or not, minimum stay, advance purchase window. Multiply those dimensions and a modest property has hundreds of sellable combinations, each of which has to be derivable rather than stored individually.
Then come the modifiers: seasonal uplifts, day-of-week differences, length-of-stay discounts, early-bird and last-minute rules, channel-specific margins and negotiated corporate rates. Each is a rule, and the order in which they apply has to be decided rather than emergent.
Build this as a rules engine with derivation, not as a rate table, because a table of every combination is unmaintainable the first time a base price changes. The practical test: can somebody change next season's base rate once and have every derived rate follow?
270 hours in the worked example, the largest line, and the reason is that a booking changes.
A booking made in March for a stay in August may be modified four times before arrival. Dates shift, occupancy changes, a room type is upgraded, a guest name is corrected. Each change produces a new state, and the previous ones have to remain reconstructable — because the cancellation policy that applies is the one in force when the booking was made, not today's, and because a payment taken under a previous state has to reconcile against a booking that has since changed shape.
That is effective dating again, the same discipline a policy or a tenancy needs, and it is the reason this module is the largest. A booking stored as its current state cannot answer what the customer agreed to, which is the only question that matters in a dispute.
The order record also has to hold things that are not rooms: transfers, excursions, insurance, extras added at check-in. Each has its own supplier, its own cancellation terms and its own margin, and a system that models only the primary unit pushes all of it into notes.
Guest identity deserves a line of its own. The person who books is frequently not the person who travels, and neither is necessarily the person who pays. A corporate booker, a parent paying for a family, an agent acting for a client — each produces a booking with three different parties attached, and a record with a single customer field forces two of them into free text where no policy, communication or loyalty rule can reach them.
Travel software covers several businesses that share vocabulary and need different builds, so it is worth placing yourself first.
An accommodation operator — a hotel, a serviced-apartment group, a villa portfolio — owns the inventory and sells it across its own site and several channels. That is what the module list above prices, and the hard parts are availability authority and channel sync.
A tour operator sells a package assembled from components it mostly does not own: a flight, a transfer, three nights, an excursion. The booking record is the same shape but heavier, because each component has its own supplier, cancellation terms and margin, and a change to one can invalidate another. Availability becomes a question asked of suppliers rather than held internally.
An OTA or marketplace owns no inventory at all and is a distribution and settlement business. Much of this list still applies, but the seller side — onboarding, commission, payouts — is a different problem, closer to a multi-vendor marketplace than to a booking engine.
A transport or activity operator has capacity rather than rooms, often with a per-departure manifest rather than a date range, which changes the availability model more than it changes anything else.
Establishing which of the four you are is the first thing discovery settles, and it moves the estimate more than any feature choice inside it.
150 to 300 hours for the module most often specified in a single line, and it deserves the detail.
A change is not a cancel-and-rebook. If you treat it as one, the customer loses their original rate, which is either a refund argument or a goodwill concession, and your inventory briefly releases a unit that may be taken by someone else in the gap. The correct implementation modifies in place, reprices against the rules that applied at booking, and never releases the unit mid-transaction.
Refunds carry their own structure. A deposit may be non-refundable while the balance is not. A cancellation inside a window may forfeit a percentage. A partial cancellation — one of four guests, one of three nights — has to reprice the remainder, which may cross a length-of-stay threshold and change the per-night rate of what is left.
That last case is the one that quietly loses money, because a system that simply subtracts the cancelled night leaves a booking priced under a discount it no longer qualifies for. Multiply by a season and it is a real number.
180 to 360 hours, and the figure depends almost entirely on what the other side exposes.
Channel managers, bed banks, GDS connections and direct supplier APIs vary enormously in quality, and the published range reflects integrations that are well-documented at one end and file-based at the other. The determinant is the supplier's interface at your contracted version, not the one on their public documentation, which is the most common source of a mid-build surprise in every sector but particularly this one.
Two-way sync is the part to scrutinise. Pushing rates and availability out is straightforward. Receiving bookings back, reliably, with duplicates handled and failures retried, is the half that needs engineering, because a booking that arrives twice and a booking that never arrives produce the same visible symptom: a discrepancy nobody notices until reconciliation.
Which is why reconciliation is its own module at 100 to 200 hours rather than a report.
What reconciliation actually does is compare three things that should agree and usually do not: what your system thinks it sold, what the channel reports it sold, and what the money says. Daily, automatically, with breaks raised rather than discovered. A break found the next morning is an operational task; the same break found at month end is an investigation across thirty days of transactions, and the difference in effort is an order of magnitude.
100 to 200 hours shared with reconciliation, and it is worth separating because it is frequently the reason a project was funded.
An accommodation or tour business runs on a handful of figures that no generic report produces. Occupancy against the same period last year. Average achieved value per unit, which is not the advertised figure because of discounts, length-of-stay rules and channel margin. The booking pace curve — how full you are for August, today, against how full you were for last August at the same distance out — which is the number that drives whether you discount.
Then the channel view: what each channel delivered net of its commission, so the apparently expensive channel that brings longer stays can be compared properly with the cheap one that brings single nights.
None of these is hard arithmetic. All of them need the model underneath to be right, which is why reporting sits at the end of the module list rather than the start. A business that cannot produce them today is usually not short of a dashboard; it is short of a booking record that holds what was actually agreed.
One caution on the pace curve, because it is the figure most likely to mislead. It compares against a prior year whose shape may not repeat: a changed event calendar, a new competitor, a route that opened or closed. Treat it as a prompt to ask why rather than as an instruction to discount, and keep enough history that two prior years are visible instead of one.
140 to 280 hours, and the difference from ordinary ecommerce is timing.
Retail authorises and captures at purchase. Travel frequently takes a deposit now and a balance later, sometimes months later, against a card that may have expired in the meantime. That means stored credentials, scheduled capture, retry logic and a dunning path for balances that fail — none of which a simple checkout needs.
There is a second wrinkle: you often collect money for services you have not yet paid a supplier for, which makes the gap between collection and settlement a working-capital position rather than just an accounting entry. A system that cannot report what is held against future supplier payments leaves the finance team reconstructing it.
Add multi-currency where it applies, and the question of who carries the exchange risk between booking and settlement, which is a commercial decision the system then has to encode.
Chargebacks are the last piece and they behave differently here. A disputed retail purchase concerns goods that either arrived or did not. A disputed travel booking frequently concerns a service the customer chose not to use, where your cancellation policy is the whole defence and the evidence you can produce is what the customer agreed to at the moment they booked. That is the booking record's version history earning its hours again, and a platform that cannot produce the terms in force on the booking date will lose disputes it should win.
Not in search or the booking funnel, which are well-understood and well-demonstrated.
They fail on availability, when authority is implicit and the same unit sells twice. They fail on rate plans, when a table of combinations becomes unmaintainable and the business stops changing prices because changing them is frightening. They fail on changes, when a modification is implemented as cancel-and-rebook and the margin goes out through goodwill concessions. And they fail at reconciliation, when two-way sync drops bookings in both directions and nobody can say whether the discrepancy is a missing booking or a duplicate.
Every one is a question about the model rather than the interface, which is the argument for settling inventory authority, rate derivation and change policy in discovery rather than discovering them in sprint six.
There is one more failure that is organisational rather than technical, and it is common enough to name. Nobody owns the availability policy. Revenue management wants to oversell, operations wants never to relocate a guest, and the system sits between them implementing whichever view was loudest during the build. Decide the policy, write it down, and give it an owner who can change it — because it will need changing, and a policy embedded in code gets changed by a release rather than by a decision.
A phase one runs 1,580 hours across eight modules: discovery and channel inventory at 90 hours, the inventory and availability model at 240, rate plans and pricing rules at 210, the booking and order record at 270, supplier and channel integration at 250, payments and deposits at 190, changes and refunds at 200, and reconciliation and reporting at 130. That is $63,200 at $40 per hour, about $102,700 at a $65 blended rate, and $158,000 at $100. The full span is 1,170 to 2,280 hours.
Because a count cannot express holds that reserve a unit during checkout and must expire reliably, allocations that give a channel a block to sell from without checking, stop-sells that close a date regardless of physical availability, and restrictions such as minimum stay or closed-to-arrival that make a free unit unsellable for a particular request. The decision that matters most is which system is authoritative, because leaving that implicit is how the same unit gets sold twice.
Because a rate is a price for a unit type, for a date range, for an occupancy, under a plan with conditions — refundable or not, minimum stay, advance purchase — and those dimensions multiply into hundreds of sellable combinations for even a modest property. Add seasonal uplifts, day-of-week differences, length-of-stay discounts and channel margins, each a rule with an order of application. Build it as a derivation engine rather than a rate table, or a single base-price change becomes unmaintainable.
Commercially, everything. A change modifies a booking in place, reprices against the rules that applied when it was made, and never releases the unit mid-transaction. A cancel-and-rebook loses the customer their original rate, which becomes a refund argument or a goodwill concession, and briefly frees inventory someone else may take. Partial cancellations are the subtle case: removing one night may push the stay below a length-of-stay threshold, so the remainder has to be repriced rather than simply reduced.
180 to 360 hours, and the figure depends on the supplier rather than on you — channel managers, bed banks, GDS connections and direct APIs vary from well-documented to file-based. The determinant is their interface at your contracted version rather than their public documentation. Pushing rates and availability out is straightforward; receiving bookings back reliably, with duplicates handled and failures retried, is the half that needs real engineering, which is why reconciliation is a separate module.
Timing. Retail authorises and captures at purchase; travel often takes a deposit now and a balance months later, against a card that may have expired. That requires stored credentials, scheduled capture, retry logic and a dunning path. There is also a working-capital dimension: you frequently hold money for services not yet paid to a supplier, and a system that cannot report what is held against future supplier payments leaves finance reconstructing the position by hand.
Yes, and the honest reduction is scope rather than quality. A single property selling only through its own site, with one rate plan structure and no channel integration, sits near the 1,170-hour floor. What should not be cut is the availability model or the booking record's history, because both are the things everything else reads and both are expensive to retrofit. Cut channels, cut extras, cut reporting — not the model underneath them.

Vikas has around fifteen years of experience building software and now builds generative AI systems at Zyneto. His work covers retrieval augmented generation, agentic AI, knowledge graphs, AI memory, and the evaluation and guardrails that decide whether any of it is safe to put in front of customers. He has shipped enterprise copilots, document AI, chatbots and predictive analytics for e-commerce, fintech and marketing teams, and works day to day in Python, JavaScript and SQL. He follows multimodal models, business process automation and enterprise AI security closely, and mentors engineers moving into AI. He writes about architecture, inference cost and the failure modes that only show up at production scale.
Share your details and we will talk soon.
Be the first to access expert strategies, actionable tips, and the trends actually shaping the digital world. No fluff - just practical insights delivered straight to your inbox.
Dive into our blog and stay ahead of the curve with expert perspectives, future-ready trends, and tech tips written for decision-makers and doers alike.