Infrastructure Checks
Before testing any feature, verify the server environment is correct. A booking system that passes functional testing in a development environment can still fail in production due to differences in server configuration, DNS routing, or network-level access restrictions. Taking time to review the infrastructure before launch prevents embarrassing failures on day one.
SSL Certificate Verification
The SSL certificate must be active and loading over HTTPS on all pages, not just the booking flow. Test a full customer journey from the marketing page through to the confirmation screen on HTTPS. Mixed content warnings break trust at the exact moment a customer is about to enter payment details. Use browser developer tools to check for any resources still loading over HTTP, including images, scripts, stylesheets, and fonts.
DNS Configuration
DNS resolution should be confirmed for all subdomains the booking system uses: the main domain, any www subdomain, any api subdomain, and any subdomain used for webhooks or callback URLs. DNS propagation delays catch teams who deploy on a Friday afternoon and wonder why payment webhooks are failing on Monday morning. Use tools like dig or online DNS lookup services to verify all required records exist and resolve to the correct IP addresses.
Server Timeout Settings
Server timeout settings need review. The default PHP max_execution_time of 30 seconds is long enough to make a customer wait and short enough to timeout during a payment callback or email dispatch. Set it explicitly per context, not globally. The same applies to web server keepalive timeouts, database connection timeouts, and API request timeouts. Each timeout should be calibrated for the specific operation it protects.
Load Balancer Configuration
If the booking system runs behind a load balancer, confirm that session affinity is configured correctly for the booking flow. Customers who lose their session mid-booking after being routed to a different server will abandon the booking. Test the full flow multiple times from different network locations to ensure consistent routing and session persistence.
CDN and Caching Layers
Any CDN or caching layer in front of the booking system needs careful review. Caching dynamic booking pages can expose other customers' personal information or cause incorrect availability counts. Ensure that booking pages, availability API responses, and customer-specific data bypass the cache entirely while static assets like images, CSS, and JavaScript files are cached appropriately.
Payment Gateway
Payment processing is where booking systems lose money, lose customers, and face the most reputational risk. Thorough payment testing before launch prevents all three.
Test Card Flows
Payment testing should use sandbox credentials, not live credentials. Verify the test card flows produce the correct response codes for each scenario: successful payment, declined card, insufficient funds, expired card, and invalid CVV. Each response code must map to the correct customer-facing message. Document the expected behaviour for each response code so the development team can verify the implementation against the specification.
Webhook Accessibility
Webhook endpoints must be publicly accessible from the payment processor's IP ranges, not just from your browser. A webhook URL that works in your local environment but is behind a firewall that blocks outbound connections from external services will silently fail and cause lost or duplicate bookings. Contact the payment processor to confirm their outbound IP addresses and whitelist them in any firewall rules.
Idempotency Implementation
Idempotency keys must be implemented on the payment initiation endpoint. If a customer submits a booking form twice because the page takes too long to load and they click submit again, the system should recognise the duplicate and not charge twice. The idempotency key should be tied to the session or a unique form submission identifier, not the payment amount or timestamp alone.
Payment Confirmation Timing
The booking record should be created before calling the payment processor, in a pending state. This means that even if the webhook delivery is delayed, the booking slot is reserved immediately. When the webhook arrives, the booking status updates to confirmed. This prevents a customer from completing payment only to find the slot was given to someone else while waiting for the webhook.
Refund and Cancellation Handling
Test the refund flow before launch, not after the first customer requests a cancellation. Verify that partial refunds work correctly, that refund status updates reflect in the booking system, and that refund notifications are sent to the customer. Partial booking cancellations where one item in a multi-item booking is cancelled should correctly calculate the refund amount.
Email Deliverability
Confirmation emails are the primary trust signal after a booking is made. If they land in spam, customers call your support line instead of checking their spam folder. Email deliverability testing is often skipped because it is difficult to automate, but it is one of the highest-impact checks on this list.
Email Authentication Records
SPF, DKIM, and DMARC records must be present for the domain sending booking confirmations. If the sending domain is different from the website domain, both must have appropriate DNS records. Test by sending a booking confirmation to a Gmail address, a Microsoft address, and a self-hosted address immediately after deploying to production. Check the headers of received emails to verify that SPF, DKIM, and DMARC are passing.
Sender Address Format
The sender address should be a proper mailbox, not a no-reply address. Customers who need to query a booking need somewhere to reply to. The reply-to address can be different from the sender address if needed, but there must be a monitored address that customers can use to reach the business.
Email Template Rendering
Test email templates across multiple email clients: desktop Outlook, Outlook.com, Gmail (both web and mobile), Apple Mail, and at least one mobile webmail client. HTML email rendering varies significantly between clients, and broken layouts in confirmation emails undermine confidence in the booking process. Plain text fallback versions should also be tested for clients that block HTML email.
Unsubscribe and Preference Links
If the booking system sends marketing emails or reminder emails in addition to confirmation emails, each email must include a working unsubscribe link that complies with relevant regulations. The unsubscribe process should be immediate, require no login, and not redirect to the main website. Unsubscribe requests should be processed within the timeframe required by applicable law.
Database and Backend
A booking system that works correctly with ten test bookings but slows to a crawl with five hundred real bookings usually has a missing database index or an inefficient query. Backend performance testing is often skipped under time pressure, but it is far easier to fix before launch than after.
Query Performance Under Load
Run the most common booking system queries under simulated load before launch. The most common query pattern is "get all bookings for a given date range and status" — a composite index on (date, status) makes that query fast under load. Use database EXPLAIN plans to identify slow queries and add appropriate indexes. Test with a dataset size comparable to what is expected in the first three months of operation.
Inventory Locking
Inventory or availability counts must be protected by a row-locking transaction to prevent overselling when two customers attempt to book the same slot simultaneously. Race conditions in availability checking are a common source of double bookings that are expensive to resolve after the fact. Use database-level locking or atomic operations, not application-level checks that run before the insert.
Session Storage
Session storage should be configured for the production environment. File-based sessions work in development but cause issues in load-balanced production environments where subsequent requests may hit a different server. Use a Redis or database-backed session store from the start. Verify that session data persists correctly across page loads and that session timeouts work as expected.
Data Retention and Privacy
Review what personal data the booking system stores and ensure the data retention policy is documented. Remove any test data or development records from the production database before launch. If the system stores payment card details (which it should not, if using a proper payment processor), verify that PCI DSS requirements are met. For other personal data, ensure the system can respond to data subject access requests, correction requests, and deletion requests.
Booking Flow UX
The booking flow is where technical decisions meet customer behaviour. A technically sound booking system still fails if the flow confuses customers, loses their data, or asks for information they are not willing to provide.
Form Field Requirements
Every form field that is not absolutely necessary to complete a booking should be optional. Long forms with mandatory fields for phone number, company name, and special requirements lose customers at the step before the payment screen. Collect optional data after the booking is confirmed, not before. The minimum viable form for a basic booking is name and email, with everything else optional or collected post-confirmation.
Error Message Quality
Error messages must be specific. "An error occurred" is not a useful message. "This time slot is no longer available — please select another" tells the customer exactly what to do next. Validation errors on individual fields should appear inline, not at the top of the form after submission. Each field-level error should point to the specific field that needs attention and explain the expected format or value.
Back Button Behaviour
The back button during the booking flow should not lose entered data. Browsers cache form state on back navigation by default in many configurations, but single-page booking flows implemented with AJAX may not preserve state correctly. Test every step of the booking flow using the back button from each subsequent step. If the booking flow spans multiple pages, consider using a session-based approach that restores form state server-side rather than relying on browser caching.
Mobile Responsiveness
Test the booking flow on a range of mobile devices and screen sizes, not just on desktop browsers resized to mobile dimensions. Touch targets for date pickers, time slot selectors, and form fields must be large enough to tap reliably. The payment card input fields should use appropriate keyboard types for each part of the card number, expiry date, and CVV.
Progress Indicators
Show customers where they are in the booking flow and how many steps remain. A progress indicator reduces abandonment by setting clear expectations about the time and effort required to complete the booking. If the booking flow has conditional steps that are skipped for certain booking types, the progress indicator should update dynamically to reflect the actual steps the customer will see.
Security Review
Booking systems process personal data and payment information, making them attractive targets for attackers. A security review before launch identifies vulnerabilities before they are exploited.
HTTPS Implementation
Verify that HTTPS is enforced not just on the booking pages but across the entire website. HTTPS and TLS security for business websites involves more than just installing a certificate. Ensure that HTTP requests are redirected to HTTPS, that HSTS headers are set, and that the TLS version is not below 1.2. Check for any hardcoded HTTP URLs in configuration files or database records that could cause mixed content warnings.
Input Validation and Sanitisation
All user inputs must be validated on the server side, not just the client side. JavaScript-based form validation improves the user experience but provides no security against a determined attacker. Test with inputs designed to exploit common vulnerabilities: SQL injection attempts in text fields, XSS payloads in name fields, and abnormally long inputs to test length validation.
Rate Limiting
Implement rate limiting on booking submission endpoints to prevent automated abuse. Without rate limiting, a malicious actor could submit thousands of fake bookings, creating phantom demand that disrupts operations and potentially triggers inventory management problems. Rate limiting should be applied per IP address and per session, with clear feedback to legitimate users who hit limits temporarily.
Confirmation and Post-Booking
After payment is confirmed, the customer should see a confirmation page immediately, without waiting for email to send. Email dispatch is slow and failure-prone. The confirmation page should display the booking reference, date and time, what happens next, and a calendar invite download link if applicable.
Analytics Tracking
Booking analytics should be tracked from day one. At minimum, track the booking flow completion rate per step, the payment conversion rate, the most common drop-off step, and the distribution of booking values. Analytics tells you where to focus improvement effort after launch and prevents arguments about which version of the booking form performs better. Set up a dashboard that shows these metrics at a glance before the launch announcement goes out.
Monitoring and Alerts
Monitoring should be active before the launch announcement goes out. Set up alerts for error rate, average response time, and payment failure rate. The first real traffic spike is not the time to discover that your monitoring is not configured correctly. Define clear thresholds for each alert and ensure that alerts reach the right person or channel immediately, not just to a log file that no one checks until the next morning.
Backup Verification
Verify that backups are running correctly and that a restoration can be completed successfully. Backups that appear to run but fail to restore are worse than no backups because they create false confidence. Test the backup restoration process in a staging environment before launch to confirm that database backups and file backups can be combined to produce a working system.
Going Live
Once the checklist is complete, do a final walkthrough of the complete customer journey as an incognito user with an empty cache. This catches cached redirects, browser-specific CSS issues, and JavaScript that only runs on first load that a cached session would hide.
Traffic Ramp-Up
Notify your hosting provider or infrastructure team before sending any marketing traffic to the booking system. A sudden spike in traffic from an email campaign or social post can overwhelm an unprepared server. Scale up temporarily if needed for launch day and scale back once the initial traffic spike settles. Have a rollback plan ready in case the launch causes unexpected problems.
Stakeholder Sign-Off
Before announcing the launch publicly, confirm that all stakeholders have reviewed the system in a pre-production or staging environment and signed off on the functionality. This includes whoever handles bookings on the business side, whoever manages customer support, and whoever is responsible for finance and accounting. Document any issues raised during sign-off and track them to resolution.
Related practical reading
These related guides can help you connect this topic with the wider website, server, security, and support decisions around it.
- SSH Config Tips That Save Hours of Time - useful background for related technology decisions