How to choose a booking approach and scope it
Stay hosted, add a plugin or build custom
A hosted scheduling tool is the right answer when you sell one-to-one time, your rules are simple and a link or embed on your site is enough. A WordPress booking plugin such as WooCommerce Bookings, Amelia or Bookly makes sense when the booking must sit inside your own site and checkout, share customers with a store or membership, and follow rules those plugins already model: services, staff, locations, capacity. Custom software earns its place when availability depends on combinations (this instructor, that room, a boat and the tide), when pricing is dynamic, or when booking is the core of a product you sell to other businesses.
Write the rules as sentences, then test them
The quickest test of any approach is to write your rules in plain language and see whether the tool can express them. Working hours minus breaks, holidays and external calendar events. Buffers before and after. Minimum notice and how far ahead people may book. Resources shared between services. We turn those sentences into test cases with expected results, and run them against the plugin or our own engine before design starts. If a plugin fails three of twenty cases, you know what the workaround will involve.
Closing the gap that causes double bookings
Double bookings happen in the gap between showing a slot and taking payment. The fix is a short hold. When a customer starts checkout the slot is reserved for a few minutes, and the final write is protected by a database constraint or lock so two requests cannot both succeed. Synced calendars add another gap, since an external event may arrive seconds late, so we check availability again at the moment of confirmation.
Clock changes and customers abroad
Store every booking in UTC together with the named time zone it was made for, never a fixed offset. Show times in the customer zone on the site and in the staff zone in the back office, and say which is which in every email. Recurring classes must follow local wall-clock time through a clock change. These are small rules, and they are where homemade booking code most often fails.
What to include in the first version
One booking type done properly: rules, payment or deposit, confirmation, reminders, reschedule and cancel, staff calendar sync and the front-desk view. Packages, memberships, a customer mobile app and extra locations are sensible second steps once the calendar is trusted.