DEV Community

Cover image for WhatsApp Appointment Booking Flows: A 12-Case Test for Forms and Handoffs
isabelle dubuis
isabelle dubuis

Posted on Originally published at agentic-whatsup.com

WhatsApp Appointment Booking Flows: A 12-Case Test for Forms and Handoffs

The short answer

For a routine appointment with a small set of services, a few eligibility questions, and a clear next step, start with a WhatsApp Flow: it keeps the choice structured and the customer in the chat. Use free-text AI to understand an incomplete request or answer a bounded question, not to replace the form fields that must be exact. Send people to a booking page when the task needs a complex calendar, payment, account login, or accessibility controls that your Flow cannot provide. Always keep a visible human route for exceptions.

That answer describes an interface choice, not a guarantee that a booking is committed. WhatsApp says Flows can support appointment booking and rich menus; its product description does not promise a complete scheduling engine, live capacity, or a correct calendar write. The application that owns the schedule still decides what is available and what has been saved. This article therefore evaluates the customer path into that system: what to ask, when to show a form, what a submission means, and how to recover when the path is unclear.

If you are still deciding whether to use an AI assistant, a provider, or a direct API integration, this plain-language explanation of how a WhatsApp AI agent works is a useful companion. Here the narrower decision is which booking experience to put in front of the customer.

What a Flow is—and what it is not

WhatsApp introduced Flows as structured menus and customizable forms that let people complete tasks such as choosing a service or booking an appointment without leaving the chat. The current WhatsApp Business page also presents Flows as a way to build interactive journeys for bookings, sign-ups, quotes, and other actions. Those statements establish a supported interface pattern. They do not establish that every Flow is dynamic, connected to a calendar, accessible to every user, or able to reserve a slot by itself. WhatsApp’s product page and the launch explanation describe the customer-facing form layer.

AWS’s documentation makes an implementation distinction that is useful even if you do not host Flows on AWS: static Flows define screens, components, and navigation in the Flow JSON; dynamic Flows call a business HTTPS endpoint during the interaction so screen content can depend on backend data. AWS lists appointment booking among the use cases and describes form controls such as date pickers, radio buttons, checkboxes, and dropdowns. That describes the provider’s implementation of WhatsApp Flows, not a promise that the calendar integration is included or that a static screen is a live inventory check. AWS End User Messaging Social documentation.

Use that distinction when a vendor demo says “the customer books in WhatsApp.” Ask what happens between the screen tap and the real appointment record. Does the screen merely collect a preferred time? Does a backend return current options? Does a booking service create the record? Which system owns the source of truth? Who sees the request if the endpoint is unavailable? These questions separate the visible chat experience from the transaction behind it.

There are three different states a customer may encounter:

State shown to the customer What it actually means Suitable wording
Request captured The business received the customer’s service and time preferences “We received your request. The team will confirm shortly.”
Slot offered The scheduling system has returned a slot that may still require a final choice or confirmation “This time is available to select. Review the details before submitting.”
Appointment confirmed The system that owns the calendar has confirmed a booking and returned a durable reference “Confirmed: Tuesday 14:30 with the Neuchâtel team. Reference A….”

Do not use the last sentence merely because a Flow reached its final screen. A polished form is not evidence of a saved appointment. This article does not teach calendar locking, idempotency, retry reconciliation, or concurrent booking control; those are backend transaction responsibilities and are deliberately outside this user-experience test.

The unresolved question users actually ask

The baseline in official material is clear: Flows are structured screens; they can collect fields and support an appointment-booking use case. The remaining question is more practical: when should a business use a Flow, keep a conversation open, or send a booking link—and what does the person see if the request changes, the form cannot express it, or they need help?

A developer in the n8n Community described building a WhatsApp appointment-setting agent with booking and cancellation triggers and asked whether the trigger setup explained inconsistent behavior. The discussion is one implementation thread, not a representative survey. It still captures a real operator question: whether booking and reminder work belong in one interaction path or separate ones. The thread is useful as a question signal, not proof that a particular architecture is common or superior. n8n Community discussion.

The gap is not solved by adding more prompts. The user needs to know whether they are browsing options, sending a request, confirming an appointment, changing an existing appointment, or asking a person to take over. The interface should make that state explicit at every boundary.

Choose the interaction by task shape

Use a Flow when the customer can make progress through a short sequence of stable choices: appointment type, location, preferred date, available option, contact detail, and a review step. This is a good fit for repeatable services with known fields and clear policies. A Flow reduces the amount of free-form interpretation required, but it cannot make an ambiguous business rule clear. If the service duration depends on symptoms, the location depends on a postal code, or the customer needs to describe a special situation, a rigid form can send them down the wrong path.

Use free text when the customer’s request is genuinely underspecified: “I need help this week,” “I’m not sure which treatment to choose,” or “Can someone call me?” The assistant can ask one clarifying question, summarize the request, and then open a Flow or route to staff. Keep the AI task narrow. Ask it to classify the request into an approved set, identify missing information, and explain uncertainty. Do not ask it to invent inventory, infer a medical need, or silently choose a service with different duration or price.

Use a booking page when the scheduling product already handles multiple calendars, resource assignment, deposits, account-specific entitlements, complex accessibility needs, or several changes to one appointment. A link can be less seamless than an in-chat Flow, but it may provide a mature calendar view, keyboard navigation, screen-reader behavior, and a more complete rescheduling interface. Do not hide that trade-off behind a claim that “everything happens in WhatsApp.”

Use a human handoff when the request falls outside the tested paths: a customer cannot use the form, a requested service is absent, there is a language mismatch, the business rule is unclear, a customer is upset, or the system cannot establish what happened. A handoff is only real if a named team can see the request, has enough context to continue, and has a response expectation. A button that opens a generic inbox without the selected service or requested time simply moves the customer’s work elsewhere.

Choose Best fit What the screen should say Boundary to verify
WhatsApp Flow A short, predictable form with a small set of choices Why each answer is requested and what happens after submit The Flow itself may only capture preferences; verify the backend status before saying “confirmed”
Free-text assistant Intent discovery or one bounded clarification What the assistant understood and which choice needs confirmation Unclear or sensitive requests must stop and hand off
External booking page Complex availability, payment, login, or calendar features Why the person is leaving chat and how to return for help Preserve the selected service and language; avoid asking for the same details twice
Staff handoff Exceptions or requests that do not fit the tested path Who will respond and how the customer can continue Carry the transcript summary, chosen options, and contact reference without exposing unnecessary details

This is a decision matrix, not a product ranking. Test the simplest route that accurately completes the task. Bain’s customer-experience material describes customer insights, experience design, analytics, and customer-journey management as distinct capabilities; the practical implication here is to measure the whole episode from first question to resolved appointment, not just whether a form was submitted. Bain’s page is a consulting service description, not independent evidence that a particular Flow increases conversion. Bain MyCX.

The route can be represented as a small, reviewable decision tree:

flowchart TD
  A[Customer starts] --> B{Request is specific?}
  B -- No --> C[Ask one bounded question]
  C --> D{Structured choices fit?}
  B -- Yes --> D
  D -- Yes --> E[WhatsApp Flow]
  D -- No, complex calendar or payment --> F[Booking page]
  E --> G{Exception or uncertainty?}
  F --> G
  G -- Yes --> H[Human handoff]
  G -- No --> I[Show request or confirmed status]

A reusable 12-case acceptance test

The following table is an original, synthetic test asset designed on 7 November 2026. It contains twelve deliberately chosen scenarios, not observations from real customers. The sample size is twelve test cases because the artifact is a coverage checklist; it is not a statistical estimate. No production WhatsApp account, calendar, participant, or model output was tested. Each test should be replayed in a sandbox after changing the Flow, endpoint, template, prompt, provider, or calendar configuration.

# Customer input or event Expected interface behavior Release evidence
1 “I need an appointment” with no service or location Ask only for the next decision needed; do not guess a service The first follow-up names the missing field and offers a person route
2 Customer chooses a service that is not offered at the selected location Explain the mismatch and offer valid locations or another service No unsupported service-location pair is submitted
3 Customer enters “next Friday afternoon” Show an unambiguous date, local time, and time zone or location before submission The review screen spells out calendar date and local time
4 Customer selects a date outside the displayed options Reject the stale or invalid choice and return to current options The customer is not shown a success message for a rejected selection
5 Customer changes the service after choosing a time Recompute the next step because service duration or location may differ The old time is not silently carried forward as a confirmed choice
6 Customer edits their phone number or contact method Show the revised value in the review screen and explain the purpose The previous value is not sent in a confirmation
7 Customer presses Submit twice or repeats the last message Show a stable status instead of creating two visible requests or two confusing replies The interface displays one request reference or an explicit pending state
8 Customer says “cancel” while still on the intake form Ask whether they mean to abandon this request; do not cancel an unrelated existing appointment No appointment identifier is inferred from the current conversation alone
9 Customer asks to reschedule an existing appointment Confirm which appointment they mean, then offer a supported change route The customer can see the existing date and the proposed new date before confirming
10 Customer enters a medical or other sensitive detail in a general booking field Do not request more detail than the booking task needs; route to the proper protected channel if necessary The Flow has no unnecessary free-text field and the handoff explains the safer route
11 Customer uses a language unsupported by the form State the supported languages and offer staff or a reliable alternative No translated summary is presented as exact if it has not been checked
12 The Flow or scheduling endpoint becomes unavailable Preserve the customer’s entered choices where safe, say no appointment is confirmed, and offer a human or booking-page route The fallback tells the truth and staff can find the pending request

These cases intentionally test the edges of the interface: field dependencies, a human-readable summary, the difference between changing a form and changing an appointment, and truthful status language. They do not certify that an API handles concurrency, retries, calendar time zones, or durable writes. A separate backend acceptance suite must test those properties with the scheduling system that owns the record.

Run each scenario as a human would: start from the business’s real entry point, use the actual language and phone layout, and record every tap or message. Test both the happy path and the point where the user changes their mind. Capture what the customer saw, what the system stored, and what staff received. Do not use a screenshot of a successful final screen as the only proof; compare the visible statement with the system state behind it.

A small executable validator for the form boundary

This standard-library Python example checks whether a submitted Flow response contains a known service, a displayed option, an explicit review step, and a supported next action. It validates the interface contract only. It deliberately does not connect to WhatsApp, read a live calendar, create a booking, resolve two simultaneous users, or prove that an appointment exists.

from dataclasses import dataclass
from typing import Optional

SERVICES = {"consultation", "repair", "follow_up"}
OPTIONS = {"slot_2026_11_10_1430", "slot_2026_11_11_0900"}
NEXT_ACTIONS = {"request_confirmation", "open_booking_page", "human_handoff"}

@dataclass
class FlowSubmission:
    service: Optional[str]
    option_id: Optional[str]
    reviewed: bool
    next_action: Optional[str]
    customer_message: Optional[str] = None

def validate(submission: FlowSubmission) -> list[str]:
    errors = []
    if submission.service not in SERVICES:
        errors.append("Choose a service from the published list.")
    if submission.option_id not in OPTIONS:
        errors.append("Choose an option that was displayed to the customer.")
    if not submission.reviewed:
        errors.append("Show a human-readable review before sending.")
    if submission.next_action not in NEXT_ACTIONS:
        errors.append("Choose a supported next step.")
    # Free text is not a substitute for a required structured field.
    if submission.customer_message and not submission.reviewed:
        errors.append("Do not submit an unreviewed free-text interpretation.")
    return errors

example = FlowSubmission(
    service="consultation",
    option_id="slot_2026_11_10_1430",
    reviewed=True,
    next_action="request_confirmation",
)
problems = validate(example)
print("FORM ACCEPTED" if not problems else "\n".join(problems))
Enter fullscreen mode Exit fullscreen mode

The allowed option IDs above are fixture data, not live availability. They are fixed so the example is reproducible. A real integration must obtain fresh options from its approved scheduling service and separately verify the result of any transaction. If the server returns “pending,” the chat must say “request received” rather than “appointment confirmed.” If the service cannot identify the transaction outcome, the interface should say it is checking and route to a person or a status page; it should not tell the customer to submit again blindly.

The validator is useful as a design review: it makes the distinction between what a customer selected and what the backend committed visible in code. It is not a security boundary. The server must validate every incoming value, authorize the requested operation, and apply its own business rules; clients can alter payloads and fields can be stale. The example also omits date parsing, identity checks, appointment policy, localization, retention, accessibility, and provider-specific Flow schema. Those belong in the implementation contract for the selected platform.

Design the customer path one decision at a time

Start with the action, not a menu of every service the business sells. “Book a consultation” is a clearer entry point than “How can we help?” followed by ten internal department names. If customers arrive with varied intents, let them choose between “book,” “change,” “cancel,” and “ask a question.” These are customer jobs; internal work queues can be mapped afterward.

Keep the first screen short. Ask for a service only if it changes the available choices. Ask for location only if there is more than one location or a location-specific rule. Ask for a preferred date only after explaining the time zone and the date format. A form that collects everything “just in case” creates data exposure and increases effort. The European Data Protection Board explains that data protection by design includes collecting only data necessary for a defined purpose, providing understandable information, and limiting access. Apply that as a product design constraint; have counsel or your privacy lead determine the legal basis and retention rules for your jurisdiction. EDPB small-business guidance.

Before submission, show a compact summary with the service, location, date, local time, requested contact route, and any relevant cancellation or deposit policy. Let the person correct each value without restarting. The summary should use the same terms as the service page and calendar. If the Flow says “first consultation” but the scheduler stores “new client assessment,” map those labels deliberately. Hidden internal names make staff reconciliation harder and can make the customer think the appointment is for something else.

Separate “submit a request” from “confirm a booking.” Some businesses need staff approval; others can book directly. Choose one path for each service and label it. A request path should give a reference and an expected response window. A direct-booking path should state confirmation only after the scheduling service returns a confirmed result. If the answer is still pending, say so. Do not send a template confirmation just because the customer tapped “Finish.”

Give people an obvious way to leave the path. “Talk to the team” should be available from the first screen and from error screens. It should not be hidden only after several failed attempts. A transfer should preserve the minimum context needed to continue: chosen service, preferred location, selected date or request, and the point where the Flow stopped. Avoid copying unrelated history into the staff queue.

When the customer asks something the Flow cannot answer, explain what is possible instead of forcing a menu selection. For instance: “I can show consultation times. For a treatment recommendation, a clinician needs to speak with you. Would you like a call or the clinic’s contact details?” This is a boundary statement, not a medical decision. Similar copy works for insurance approvals, eligibility exceptions, refunds, or custom service requests.

Make dates, local time, and language explicit

Dates are easy to misunderstand in chat because people use relative phrases: “Friday,” “tomorrow,” “after lunch,” or “the first week of December.” A choice shown as “10/11” may mean 10 November or 11 October depending on the locale. Convert a selected date to an unambiguous review form such as “Tuesday, 10 November, 14:30, Europe/Zurich” when that zone is relevant. The calendar service must own time-zone conversion; the UI should not guess based on the phone’s current location.

If the business serves customers in more than one time zone, say which one applies before selection and repeat it in the confirmation. If local time changes seasonally, avoid building a custom one-hour offset rule into the Flow. The scheduling system should accept a time-zone identifier or a canonical local date-time representation and return the final display value. The interface should show the returned value, not reformat a stale request with a different rule.

Test all supported languages with actual service names, cancellation text, date formatting, and the handoff copy. Translating a label is not the same as translating a policy. If the customer switches language halfway through, preserve previously selected structured values and explain which text will be passed to staff. Do not pretend that a machine translation of a medical or legal detail is verified. Offer a staff route when an exact interpretation matters.

Also test text scaling, narrow screens, long service names, and screen-reader output. A visual form may look orderly while labels are announced out of order or error messages are not associated with their fields. WhatsApp controls the native client, but the business still controls its Flow schema, label text, field count, error wording, and alternatives. For a long list or complex date choice, compare a Flow with a booking page using the real task on a phone; choose the version that customers can complete and correct.

Keep the discovery path consistent

Some people start from a search result rather than a WhatsApp conversation. Google’s LocalBusiness structured-data documentation describes information publishers can provide about a local business and warns that structured data does not guarantee a rich result. Use official business details and visible page content that agree with one another. Do not imply that LocalBusiness markup automatically creates an appointment-booking button or guarantees more traffic. It is a way to describe business information for Search, not a substitute for a booking interface. Google Search documentation for LocalBusiness structured data.

The same consistency principle applies after a customer taps WhatsApp. If a Google result says “book online,” the destination should either open the booking path or explain why the person will be asked to request a callback. If a WhatsApp Flow offers only a request, do not label the search action “book now” in a way that implies an immediate confirmed appointment. An accurate entry point prevents a mismatch before the customer types.

For a search-led pilot, use Search Console to inspect the actual queries and landing pages that lead people to the integration. The targeted snapshot used to scope this guide covered 8 October through 5 November 2026, with the France country filter. It inspected two query/page rows, not the whole property: “agent ia whatsapp” matched the explanatory page at /fr/blog/comment-fonctionne-agent-ia-whatsapp at average position 16 with 4 impressions; “intégration whatsapp” matched the provider-choice page at /fr/blog/whatsapp-business-solution-provider-choisir at average position 29 with 8 impressions. The sample is two rows selected for relevance, with no device split or click outcome used here. These small, time-bounded observations are not a market estimate or an expected ranking. The useful inference is modest: the first query suggests a need to understand the agent, while the second suggests a comparison or implementation choice. The page linked near the top of this article serves the first intent; the form-choice matrix serves the more operational one.

Use these query/page pairs to decide what copy a user should see at the start of the journey, not to infer that appointment booking is a high-volume demand. Compare query wording with the content on the page, check whether the canonical page is indexable, and review impressions and average position over a consistent date range. Do not treat an average position as a promise for an individual search. Search Console data is aggregated and can change with location, device, personalization, and time.

Measure completion and customer effort

Count a useful result only when the customer’s task reaches the state promised by the interface. Track separate events for Flow opened, each decision completed, review displayed, request submitted, booking confirmed, customer corrected a field, customer exited, human handoff requested, handoff accepted, and the final outcome. A form completion rate alone cannot tell whether the customer received the appointment they expected.

Use denominators that match the question. For example:

Measure Definition What it can reveal What it cannot prove
Flow completion Completed submissions divided by Flow starts Whether people finish the selected path Whether the appointment was accepted or attended
Correction rate Submissions with at least one field changed on review divided by review screens shown Whether labels or initial interpretation need improvement Whether every correction is a defect
Request-to-confirmation time Time from request received to scheduler-confirmed or staff-confirmed status Operational delay after form submission Whether WhatsApp caused the delay
Handoff completion Handoffs accepted by staff divided by handoffs requested Whether the fallback actually reaches a person Whether the person resolved the issue
Repeat contact Same customer recontacts about the same appointment before resolution Possible confusion or missing status information The cause without conversation review

Do not optimize only for fewer messages or shorter completion time. A quick path can still create confusion if the customer sees the wrong language, misses a policy, or believes a request is confirmed. Bain’s consulting page presents analytics, customer-experience design, and customer-journey management as separate pieces of a broader capability. For this pilot, use that as a reminder to combine operational measures with review of customer-facing copy and staff outcomes, not as a claim that a specific metric guarantees improved loyalty.

Review a small, privacy-approved sample of failed sessions each week. Classify issues into a stable taxonomy: missing service, unclear label, stale option, date ambiguity, unsupported language, user changed intent, delivery uncertainty, unavailable staff, and endpoint error. Do not log full message contents by default if a structured event can answer the question. Define a retention window and access policy with the people responsible for privacy, security, and operations.

Failure modes: where this design breaks

The Flow is treated as the calendar. A completed form is stored as a request but the message says “confirmed.” Fix this by separating status labels and requiring the system that owns the calendar to provide the confirmed state.

The customer cannot correct one field. If changing a service restarts the entire Flow, people may abandon or repeat the task. Preserve safe answers, recompute dependent choices, and show the revised summary before the next submit.

The form gathers too much. Asking for a full clinical history, identity details, or open-ended sensitive information to book a basic consultation increases risk and customer effort. Ask only for data needed for the stated booking purpose and route protected details through the correct channel.

The fallback is decorative. A “contact us” button that opens a generic page without context does not transfer the conversation. Pass a short, minimal summary and give the customer an expectation of what happens next.

The CTA promises more than the destination. If a search result or WhatsApp message says “book now” but the customer has only submitted a callback request, the product has created a trust problem. Match each label to the state actually delivered.

The assistant and form disagree. The assistant says a service is available while the Flow’s allowed list does not include it, or the assistant uses a different duration than the scheduler. Maintain one approved service catalogue and have both surfaces read from it. If they cannot, use the Flow as the source for visible choices and let the assistant hand off for exceptions.

A reply looks like an answer but is only a template. Confirm, cancel, and reschedule buttons need defined meanings and a resulting status. Avoid ambiguous “yes” handling if several questions or requests are active in the conversation.

The team cannot support the fallback volume. A visible human route is not free. Estimate who receives it, what hours they cover, how they distinguish routine from urgent requests, and how they close the loop. If staffing is not available, give a truthful alternative such as a published phone number or booking page rather than promising a person immediately.

A proportionate rollout

Start with one low-risk service, one location, one language, and one operational team. Write down the service name, required inputs, allowed choices, cancellation terms, supported hours, and who owns the calendar. Exclude medical triage, payment decisions, complex eligibility, and special cases until their processes have owners and test evidence.

Before launch, run every one of the twelve scenarios above in a test account. Save the expected screen, the actual response, and the corresponding business record or handoff. If a case cannot be tested because the provider or business system does not expose the state, record it as unknown instead of marking it passed. Keep backend write, retry, and concurrent-user scenarios in a separate technical suite; this article’s acceptance table is a customer-path complement, not a replacement.

Then invite a small, consented group of internal staff or representative users to complete a defined task. Observe without coaching. Ask what they expected the submit button to do, whether they knew the time zone, and how they would correct a wrong choice. This is qualitative usability work, not a statistical experiment. Record where they hesitate and what label they misunderstand. Do not claim a conversion uplift from a handful of sessions.

Roll out gradually. Monitor the task-completion events and handoff queue daily at first. Pause new entry points if the confirmed state diverges from the text customers see, if handoffs are not acknowledged, if duplicate or stale options appear, or if sensitive data is being collected without a defined purpose. Assign one owner for copy and Flow changes and one owner for the underlying appointment policy.

After each change, replay the same acceptance cases. Version the Flow, message template, prompt, service catalogue, and policy together so a support person can reconstruct which experience a customer saw. Keep a rollback path to the old Flow or a stable booking page. A human operator needs a short instruction for identifying an unfinished request and giving the customer a verified status.

What this guide does not establish

The twelve cases are synthetic design scenarios, not customer research, a defect-rate estimate, or a test of WhatsApp production behavior. The Search Console figures describe only the selected property, 8 October–5 November 2026 window, France filter, and two query/landing-page rows noted above. They are not a complete measure of demand for appointment booking, and average position is not the position every searcher saw. The n8n forum thread is one developer discussion and should not be generalized to clinics, businesses, or all WhatsApp API users.

Official WhatsApp and AWS pages establish that Flows can provide structured in-chat experiences and identify static and dynamic implementation modes. They do not certify a specific third-party provider, prove that your calendar is synchronized, or tell you what a customer will experience in every client version. Validate the exact account, Flow, template, endpoint, calendar, language, and process you plan to deploy. Features and provider consoles can change; verify current official documentation before implementation.

The privacy material cited here is a high-level design reference, not legal advice. Applicable rules depend on where the business and customer are, what the appointment concerns, and what data is collected. Ask a qualified privacy or legal reviewer about lawful basis, notices, retention, sensitive categories, and processor roles. Likewise, do not infer accessibility compliance from the fact that a Flow appears inside WhatsApp; test the actual path with assistive technology and alternative routes.

Release checklist

  • [ ] The first screen identifies the customer task in plain language.
  • [ ] Each field changes a real decision and has a clear reason.
  • [ ] Service, location, date, local time, and contact route appear in a readable review.
  • [ ] The customer can correct choices without starting over.
  • [ ] The screen distinguishes a request, an offered option, and a confirmed appointment.
  • [ ] “Confirmed” is shown only after the system of record confirms the booking.
  • [ ] A request that cannot be completed has a named owner and a useful handoff.
  • [ ] The supported languages, local date format, long labels, and narrow screens were checked.
  • [ ] The form does not ask for unnecessary sensitive information.
  • [ ] The Google or website entry point promises exactly what the WhatsApp destination does.
  • [ ] The twelve synthetic cases were replayed after the final change.
  • [ ] Analytics measure resolved tasks and handoff outcomes, not just form completion.
  • [ ] Staff can identify the Flow version and understand what the customer already selected.
  • [ ] There is a fallback and rollback path that does not falsely claim success.

The simplest decision rule is still the most reliable: use a Flow for a short, structured choice; a conversation for clarification; a booking page for complex scheduling; and a person for exceptions. Keep the calendar and business rules authoritative, make the customer’s current status explicit, and test the path where it stops being easy.

Top comments (0)