Hunchbite
ServicesGuidesCase StudiesAboutContact
Start a project
Hunchbite

Software development studio focused on craft, speed, and outcomes that matter. Production-grade software shipped in under two weeks.

+91 90358 61690hello@hunchbite.com
Services
All ServicesSolutionsIndustriesTechnologyOur ProcessFree Audit
Company
AboutCase StudiesWhat We're BuildingGuidesToolsPartnersGlossaryFAQ
Popular Guides
Cost to Build a Web AppShopify vs CustomCost of Bad Software
Start a Project
Get StartedBook a CallContactVelocity Program
Social
GitHubLinkedInTwitter

Hunchbite Technologies Private Limited

CIN: U62012KA2024PTC192589

Registered Office: HD-258, Site No. 26, Prestige Cube, WeWork, Laskar Hosur Road, Adugodi, Bangalore South, Karnataka, 560030, India

Incorporated: August 30, 2024

© 2026 Hunchbite Technologies Pvt. Ltd. All rights reserved.· Site updated February 2026

Privacy PolicyTerms of Service
Home/Guides/How to Build a Booking and Scheduling System
Guide

How to Build a Booking and Scheduling System

A guide to building custom booking and scheduling software — calendar management, availability logic, payment integration, notifications, and when you should build custom vs use an existing tool.

By HunchbiteFebruary 8, 202610 min read
bookingschedulingcalendar

When do you need a custom booking system? You need a custom booking system when off-the-shelf tools (Calendly, Acuity, Cal.com) can't handle your specific requirements — complex availability rules, multi-resource scheduling, custom pricing logic, integration with your existing software, or brand-specific user experience. If your booking logic is straightforward (one person, one time slot), use an existing tool. If it's complex (multiple rooms, overlapping resources, dynamic pricing, waitlists), custom development delivers a better user experience and operational efficiency.

Let's start with an honest assessment: most businesses don't need a custom booking system.

Calendly, Cal.com, Acuity Scheduling, and similar tools handle standard appointment booking well. They're cheap, reliable, and maintained by teams whose entire job is making booking work. If your needs are "people book time with me," use one of these and move on.

This guide is for the situations where off-the-shelf tools break down — and they break down more often than you'd expect once your scheduling logic gets even moderately complex.


When to build custom vs. use an existing tool

This is the most important decision, so let's get specific.

Use an existing tool when:

  • One-to-one appointments. A consultant, therapist, or coach booking 30/60 minute slots. Cal.com handles this perfectly. It's open-source, customisable, and free to self-host.
  • Simple team scheduling. A team of 5 people who each have their own availability and book independently. Calendly's team plan covers this.
  • Standard payment collection. You charge a fixed amount per booking and need a Stripe integration. Every major booking tool does this.
  • You're testing an idea. If you're not sure people will book, don't build a system to find out. Embed Cal.com, validate demand, then invest in custom.

Build custom when:

  • Multi-resource scheduling. Booking a room, an instructor, and equipment simultaneously — and all three must be available. Off-the-shelf tools handle people well but struggle with combined resource types.
  • Complex availability rules. Availability that depends on other bookings, staff-to-customer ratios, seasonal schedules, or business rules that go beyond "available Monday 9–5."
  • Dynamic or conditional pricing. Peak/off-peak rates, group discounts, duration-based pricing, membership tiers — any pricing that can't be expressed as a single fixed amount.
  • Waitlists and overbooking logic. Airlines and hotels do this. If a cancellation opens a slot, the next person on the waitlist gets it automatically.
  • Deep integration requirements. Your booking system needs to talk to your POS, your CRM, your inventory system, or your custom ERP. Zapier connections only go so far.
  • Industry-specific workflows. Medical practices with insurance verification, salons with service-provider matching, fitness studios with class-based booking and capacity limits.

If more than two items on the "build custom" list apply to you, building is probably worth it.


Core features of a custom booking system

1. Availability management

This is the foundation — and it's harder than it looks.

Basic availability is time slots: "Dr. Patel is available Tuesday 9am–5pm." Simple enough. But real-world availability gets complex fast:

  • Buffer time. 15 minutes between appointments for cleanup, travel, or transition. This shrinks the available calendar in non-obvious ways.
  • Breaks and blocked time. Lunch breaks, admin time, personal commitments that aren't bookable.
  • Recurring schedules with exceptions. "Available every Monday except public holidays and the first Monday of each month." Your system needs to handle both the rule and the exceptions.
  • Multi-resource dependencies. A massage requires a therapist AND a room. Both must be free. If the therapist is available but all rooms are booked, the slot doesn't exist.
  • Lead time and advance booking limits. "Can't book less than 24 hours in advance" and "can't book more than 60 days out." These seem simple but interact with timezone logic in surprising ways.

Store availability as rules, not as individual slots. If you pre-generate every 15-minute slot for every resource for the next 90 days, you'll drown in data. Define rules, compute available slots on the fly, and cache aggressively.

2. Conflict resolution and race conditions

Two people try to book the same 2pm slot at the same time. What happens?

This is a concurrency problem, and it needs to be solved at the database level — not in your application code. Use database-level locks or optimistic concurrency control. The typical approach:

  1. User selects a time slot
  2. System places a temporary hold (5–10 minutes) — this slot shows as "tentative" to others
  3. User completes payment or confirms booking
  4. Temporary hold converts to a confirmed booking — or expires and releases the slot

Without this, you'll get double bookings. We've inherited systems where the original developers didn't think about concurrency. Fixing double bookings after the fact — calling customers to reschedule — is far more expensive than solving it upfront.

3. Payment integration

For booking systems that require payment, you need:

  • Payment at time of booking. Stripe or Razorpay processes payment before confirming the slot. If payment fails, the slot releases.
  • Deposits and balances. Collect 50% upfront, remainder on the day. This requires tracking partial payments per booking.
  • Cancellation and refund policies. Full refund if cancelled 48+ hours before, 50% within 24–48 hours, no refund within 24 hours. Encode your policy in the system — don't handle refunds manually.
  • No-show fees. Charge a fee if the customer doesn't show up. This requires staff to mark attendance, which means you need a simple check-in interface.

4. Notifications and reminders

Missed appointments cost real money. A good notification system reduces no-shows by 30–50%.

  • Booking confirmation — Immediately after booking. Email + SMS.
  • Reminder 24 hours before — Email and/or SMS. Include a "reschedule" or "cancel" link.
  • Reminder 1 hour before — SMS only. Short and direct.
  • Follow-up after appointment — Feedback request, rebooking prompt.
  • Cancellation/change notifications — To both the customer and the provider.

Use a service like Twilio for SMS, SendGrid or Postmark for email. Don't build your own email or SMS delivery — the deliverability problem alone isn't worth solving yourself.

5. Calendar sync

Your booking system doesn't exist in isolation. Providers use Google Calendar, Outlook, or Apple Calendar. If they have a personal appointment at 3pm and someone books a session at 3pm through your system, you've got a conflict.

Two-way calendar sync is essential:

  • Import: Read external calendar events and block those times in your system
  • Export: Push bookings from your system to the provider's external calendar

Use the Google Calendar API and Microsoft Graph API. This is integration work — not difficult conceptually, but annoying in practice. OAuth token management, webhook handling for real-time updates, and gracefully handling API rate limits and failures.


The hardest part: timezones

We're putting this in its own section because timezones are the single most underestimated complexity in booking systems.

It seems simple: "The appointment is at 2pm." But 2pm where?

  • A customer in New York books with a provider in London. The provider sees 2pm GMT, the customer sees 9am EST. The confirmation email says... what?
  • Daylight saving time changes. An appointment booked for "2pm every Tuesday" shifts by an hour relative to UTC twice a year — and not on the same dates in every country.
  • India's timezone is UTC+5:30. Not a full hour offset. Some booking tools round to the nearest hour and break.
  • A customer in Arizona (no daylight saving) books with someone in California (daylight saving). For half the year they're in the same timezone. For the other half, they're not.

The rules:

  1. Store everything in UTC in your database. No exceptions.
  2. Convert to the user's local timezone only at the display layer.
  3. Use a robust timezone library — date-fns-tz or luxon in JavaScript, pytz in Python. Do NOT roll your own timezone handling.
  4. Test with edge cases: half-hour offsets (India, Nepal), DST transitions, bookings that cross midnight in one timezone but not another.

Advanced features (build these after launch)

Waitlists

When a slot is full, offer a waitlist. If a cancellation occurs, automatically notify the next person and give them a time window (30 minutes) to confirm before moving to the next.

Recurring bookings

"Every Tuesday at 2pm for 12 weeks." This interacts with availability rules, holidays, and cancellation policies. Don't treat it as 12 individual bookings — treat it as a series with shared metadata and the ability to cancel individual occurrences or the entire series.

Dynamic pricing

Peak and off-peak rates, last-minute discounts, surge pricing, early-bird rates. This requires a pricing engine that evaluates rules at booking time. Keep the rules configurable by admins — hardcoding pricing logic guarantees a code change every time the business adjusts rates.

Multi-location support

If the business operates from multiple locations, each location has its own resources, availability, and potentially its own pricing. The system needs a location hierarchy that cascades settings while allowing per-location overrides.

Reporting and analytics

  • Utilization rate per resource
  • No-show rate
  • Revenue per time slot / per provider
  • Peak demand times
  • Cancellation patterns

Build this on top of your booking data — don't try to shoehorn booking data into a generic analytics tool. A simple dashboard with these metrics helps businesses optimise their scheduling.


Tech stack for a booking system

Layer Technology Why
Frontend Next.js or React Calendar UI components, real-time availability display
Backend Node.js (Express/Fastify) Event-driven, handles async operations well
Database PostgreSQL Strong consistency for availability and concurrency (use row-level locking)
Caching Redis Cache computed availability, manage temporary slot holds
Calendar Google Calendar API + Microsoft Graph API Two-way calendar sync
Payments Stripe or Razorpay Payment processing, refunds, subscription billing
Notifications Twilio (SMS) + Postmark (email) Reliable delivery, templates, scheduling
Hosting Vercel (frontend) + Railway or AWS (backend) Managed, scalable

Cost and timeline expectations

Scope Timeline Cost (India, quality studio)
Basic system (single resource, availability, booking, payments, notifications) 6–8 weeks ₹6–12 lakhs ($7K–$15K)
Standard system (multi-resource, calendar sync, waitlists, admin dashboard) 10–14 weeks ₹12–25 lakhs ($15K–$30K)
Complex platform (multi-location, dynamic pricing, recurring bookings, analytics, mobile app) 16–24 weeks ₹25–50 lakhs ($30K–$60K)

For a broader view of web application costs, check our detailed cost-to-build guide.

An honest note on ongoing costs: A booking system isn't build-and-forget. Calendar APIs change. Timezone databases update. Payment processor rules evolve. Budget 15–20% of the initial build cost annually for maintenance, or ensure you have a team that can handle it.


Getting started

Before you commit to a custom build:

  1. Document your scheduling rules — Write out every availability rule, exception, and edge case. If you can't articulate it clearly, a developer can't build it.
  2. Map your current workflow — How are bookings handled today? Manually? Via a tool that's not working? Understanding the current pain points tells you what to prioritise.
  3. Decide: custom or off-the-shelf? — If Cal.com or Calendly can handle 80% of your needs, start there. Customise within their limits before building from scratch.
  4. Define your MVP — What's the minimum that replaces your current (broken) process? Build that first.

If you've outgrown off-the-shelf booking tools and need a system built for your specific workflow, let's talk. We'll give you an honest assessment of whether custom development is worth it — and if it is, we'll scope it properly before writing a line of code.

Next step

Ready to move forward?

If this guide resonated with your situation, let's talk. We offer a free 30-minute discovery call — no pitch, just honest advice on your specific project.

Book a Free CallSend a Message
Continue Reading
guide

How to Build a Customer Portal That People Actually Use

A practical guide to building a customer portal — the features that matter, the tech stack, the UX principles, and how to avoid the common mistakes that make portals go unused.

11 min read
guide

How to Build an Internal Dashboard (That Your Team Won't Hate)

A guide to building internal dashboards and admin panels — what to include, what to skip, the technology options, and why most internal tools fail at adoption.

11 min read
All Guides