Vehicle rental
Vehicle Rental Management Software Case Study
GOI Car & Taxi
The challenge
Bookings reached GOI Car & Taxi, a self-drive vehicle rental operator, through several channels at once, walk-ins, phone calls, aggregator partners and repeat customers messaging directly, and each was written into a different place. Availability was judged from a wall board and a booking register that were both updated after the fact, so a vehicle could be promised to a customer while it was still out on hire or sitting in a workshop. Maintenance was scheduled from memory and from whatever the last driver mentioned, which meant servicing tended to happen when a vehicle was already unavailable for a booking rather than in a planned gap. Commission owed to partners was reconstructed at month end from booking slips, so disputes were common and there was no straightforward way to see which channel was actually profitable once commission was accounted for.
The approach
We made the vehicle, not the booking, the thing the system reasons about. Each vehicle has a single timeline covering hires, buffer time for turnaround, scheduled servicing and any period it is off the road, and every channel books against that same timeline, so availability is computed rather than asserted. Bookings from aggregators and direct customers enter the same record with their source retained, which lets commission be calculated from the booking rather than reconstructed from paperwork. Maintenance intervals are tracked against odometer readings and elapsed time and appear on the same timeline as hires, so a service occupies a slot in advance instead of colliding with one. Condition photographs, fuel level and odometer are captured at handover and return against the booking, so damage and fuel disputes have a record attached to the hire.
The outcome
A vehicle can no longer be promised while it is out, in the workshop or still being turned around, because every channel reads the same timeline and availability is derived from what is actually booked against it. Servicing now competes for a slot like a hire does, so it is planned into a gap rather than discovered as a conflict on the morning a customer is due to collect. Commission is computed from the booking that generated it with its source retained, so a partner statement is produced rather than reconstructed and the true position of each channel after commission can be examined instead of estimated. Handover photographs, odometer and fuel readings sit against the hire, which turns a return dispute into a matter of checking the record.
Rental operators are running a scheduling problem while mostly using tools designed for record-keeping. The register tells you what happened; it does not stop you promising a vehicle you do not have.
What happens when bookings arrive from four places at once
Walk-ins, phone calls, aggregator partners and repeat customers messaging directly do not stop arriving because an operator has bought software. The question is whether they land in one record.
They do here, keyed on the booking reference, with bookings from the sales channels reconciled into the operational system on a short cycle rather than re-keyed. The channel a booking came through is kept on the booking itself, resolved from the partner integration it arrived on to the partner and, where one applies, the sub-account beneath it.
That is the fact commission arguments are settled with. A partner statement assembled at month end from booking slips is a reconstruction; a channel recorded on the booking at the moment it arrived is evidence.
Why handover and return are the part worth engineering properly
Almost every unpleasant conversation in self-drive rental happens at return, and it is about one of three things: fuel, distance or damage. All three are settled by what was recorded at handover.
So the booking carries a fuel level and an odometer reading at pickup and again at drop-off, and a handover is not complete until a driver is assigned, a photograph exists, and both readings have been captured. Completeness is a rule evaluated from the record rather than a status somebody remembers to set.
There is one validation worth singling out. A drop-off odometer reading below the pickup reading is physically impossible, and it is rejected — but it is rejected in the single service path that every writer goes through, not in the mobile app. Put a validation where the writes converge, not where the user is, or you will enforce it in the app you fixed and not in the portal, the integration or the next client you build.
How photographic evidence stays a checklist rather than a folder
The condition photographs are tagged by what they show, and the tagging is enforced to be one-per-slot: attaching a photograph to a slot releases whatever was there before, so a checklist cannot hold two contradictory answers for the same view.
Damage is the deliberate exception. A damage photograph never replaces anything — every one is kept, because the argument about a scratch is settled by the whole set and not by the latest picture. A damage photograph can also carry structured annotations alongside the image, so what was marked is data rather than a drawing somebody has to interpret.
On the phone, photographs are written to local storage the moment they are taken and only queued for upload when the handover is completed. A basement car park with no signal is a normal working condition, not an error state.
Why the money is a ledger and not a set of columns
This is the change that closes the gap between what was delivered and what was charged.
Every financial fact about a hire is an entry with a type, a direction and an amount: the rental itself, collision damage waiver, inter-state charges, an extension, an additional driver, a discount, an advance, a toll-tag charge, a traffic fine, a damage deduction, a security deposit, a payment, a refund, an adjustment. Entries are grouped into buckets — rental, administrative, security, ad hoc and tax — and tax is applied only to the buckets that are the operator’s own charges, because the rental total already arrives with its tax inside it.
A balance that is stored in a column will eventually disagree with the entries that produced it. A balance derived from entries cannot. It also means a shortened hire or a mid-flight change is an entry rather than a correction somebody has to remember to apply, and that the difference between what the booking engine said a line was worth and what was actually charged is a recorded variance rather than an unexplained gap.
How servicing gets planned instead of discovered
Each vehicle carries its own service interval in kilometres, and the next service is due at the reading of the last periodic service plus that interval. The remaining distance is what the fleet list is ordered and coloured by, and it warns while there are still five hundred kilometres to run rather than at the point of being overdue.
One subtlety is worth stating because it is easy to get wrong: only a periodic service advances the clock. A repair or an accident job records a reading without resetting the interval, which is correct — a body shop visit is not a service, and treating it as one would silently push the next service a full interval away.
Documents work on the same principle from the other direction. A vehicle’s regulatory paperwork is held as typed records carrying their own expiry dates, and a nightly job raises a ticket ten days before one lapses, so a vehicle is not discovered to be uninsured on the morning it is due out.
What we would do differently
The status vocabulary. Booking state here is a defined progression — document pending, pickup coordination, pickup assigned, on rent, drop-off pending, drop-off assigned, return pending, returned, refund pending, refund done, with cancellation reachable from anywhere and three terminal states — and every change is checked against a map of permitted transitions.
Getting there meant carrying a translation layer for the eight status strings the business had used before, because live bookings were sitting in those states and could not be stranded. A status field that begins life as free text buys you a normalisation layer you will maintain forever.
The other lesson came from a specific hole in the map: a cancelled booking still owed a refund, and because cancellation had been treated as terminal, the refund was recorded and the status change that should have followed it was refused, leaving cancelled bookings half-closed. Terminal is a strong word in a state machine, and money outlives the booking it belongs to. That is the model Sazinga Rentals reasons about, and the discipline that makes vehicle rental software worth replacing a register with.
Applications used
Tell us what yours looks like.
Vehicle rental is where this one ran, and GOI Car & Taxi had one particular set of constraints. Describe how the same work runs for you — what is done by hand, what arrives late, and what it costs when it goes wrong — and we will say which part of this transfers and which part was specific to them.
Thank you — that has reached us
Your enquiry is with the team. We read every one ourselves and normally reply within one working day.
If it is quicker to talk, reach us directly:
While you wait — the platform overview covers what each application does, and Insights is our writing on building this kind of software.