10 Conversational Design Patterns That Actually Work

·11 min

After analyzing thousands of successful conversations, we've identified 10 patterns that consistently create great user experiences. Here's what works.


Pattern 1: Start Open, Then Guide


Don't start with: "What would you like to do? [Option A] [Option B] [Option C]"


Instead start with: "What can I help you with?"


Let users express their need in their own words, then guide them to the right solution.


Example:


User: "I need to change my billing"


Bot: "I can help with that. Would you like to:

  • Update your payment method
  • Change your plan
  • Cancel your subscription
  • View billing history"
  • Why it works:

  • Users aren't forced into preset categories
  • Bot understands intent, then shows relevant options
  • Feels more natural
  • When to use: Starting conversations, unclear user intent


    ---


    Pattern 2: Confirm Before Action


    Always confirm before doing something important.


    Bad:

    User: "Cancel my subscription"

    Bot: "Done. Your subscription has been canceled."

    (User meant "cancel my upcoming meeting")


    Good:

    User: "Cancel my subscription"

    Bot: "Just to confirm—you want to cancel your Pro subscription ($99/month)? You'll lose access at the end of your billing period on September 30."

    User: "Yes"

    Bot: "Subscription canceled. You'll remain active until September 30. Feedback on why you're leaving?"


    Why it works:

  • Prevents mistakes
  • Gives users a chance to clarify
  • Shows what will happen
  • When to use: Destructive actions, important changes, ambiguous requests


    ---


    Pattern 3: Progressive Disclosure


    Don't dump all options at once. Reveal complexity gradually.


    Bad:

    
    Bot: "Configure your integration:
    
  • API Key
  • Webhook URL
  • Retry Strategy (Exponential/Linear/None)
  • Timeout (ms)
  • Max Retries
  • Error Handling (Fail/Skip/Log)
  • Rate Limit
  • Authentication Method (OAuth/API Key/Basic)
  • ..."

    Good:

    
    Bot: "Let's set up your integration. First, connect your account:"
    [Show OAuth button]
    
    (After connected)
    Bot: "Connected! Want to customize how it works, or use the defaults?"
    
  • Use Defaults
  • Customize Settings

  • Why it works:

  • Doesn't overwhelm users
  • Most users don't need advanced options
  • Power users can still access them
  • When to use: Complex configurations, multi-step processes, optional features


    ---


    Pattern 4: Show, Don't Tell


    Use rich components instead of describing things.


    Bad:

    User: "Show me available times"

    Bot: "I have availability at: 9:00 AM, 9:30 AM, 10:00 AM, 10:30 AM, 11:00 AM, 2:00 PM, 2:30 PM, 3:00 PM, 4:00 PM. Which one works?"


    Good:

    User: "Show me available times"

    Bot: [Shows interactive calendar with available slots highlighted]


    Why it works:

  • Easier to scan visually
  • Fewer messages needed
  • Better mobile experience
  • When to use: Dates, times, products, locations, any visual data


    ---


    Pattern 5: Provide Escape Hatches


    Always give users a way out.


    Example conversation:


    Bot: "What's your company name?"

    User: "Actually, never mind"

    Bot: "No problem! Is there anything else I can help with?"


    Or:


    Bot: "What's your email?"

    User: "I don't want to share that"

    Bot: "That's okay. You can still browse our docs without an account. Want me to show you around?"


    Why it works:

  • Users don't feel trapped
  • Reduces frustration
  • Maintains trust
  • When to use: Always have an escape hatch available


    Implementation:

    javascript
    bot.onIntent('cancel', () => ({
      content: "No problem! What would you like to do instead?",
      actions: [
        { label: 'Browse Features', action: 'show_features' },
        { label: 'Talk to Sales', action: 'human_handoff' },
        { label: 'Just Looking', action: 'goodbye' }
      ]
    }));
    

    ---


    Pattern 6: Handle Failure Gracefully


    When things go wrong, be helpful.


    Bad:

    User: "Show me my invoices"

    Bot: "Error 500: Database connection failed"


    Good:

    User: "Show me my invoices"

    Bot: "I'm having trouble accessing your invoices right now. While I work on that, you can:

  • Download them from your account page
  • Email hello@company.com for immediate help
  • Try again in a few minutes
  • I've notified our team about this issue."


    Why it works:

  • Gives users alternatives
  • Maintains trust
  • Provides context
  • When to use: API failures, timeouts, unexpected errors


    ---


    Pattern 7: Personalize Based on Context


    Use what you know about the user.


    Generic:

    Bot: "Welcome! What brings you here?"


    Personalized:

    Bot: "Welcome back, Sarah! I see you were looking at the Pro plan last time. Want to continue where you left off, or can I help with something else?"


    Or:


    Generic: "Our plans start at $29/month"


    Personalized: "Based on your team size (15 people), I'd recommend the Business plan at $199/month. It includes everything you mentioned you needed."


    Why it works:

  • Feels like continuing a conversation, not starting over
  • Saves time by remembering context
  • More relevant responses
  • When to use: Returning users, mid-conversation, follow-ups


    Implementation:

    ``javascript

    bot.onMessage(async (message, context) => {

    const user = await getUser(context.userId);

    const lastAction = user.lastAction;


    if (lastAction?.type === 'viewed_plan') {

    return {

    content: Welcome back! Still interested in the ${lastAction.plan} plan?,

    actions: [

    { label: 'Yes, Sign Up', action: 'start_signup' },

    { label: 'Compare Plans', action: 'show_plans' },

    { label: 'Start Over', action: 'reset' }

    ]

    };

    }


    // Default greeting

    });

    
    
    ---
    
    

    Pattern 8: Chunk Information

    Break long responses into digestible pieces. Bad: User: "Tell me about your product" Bot: [Sends 500-word description in one message] Good: User: "Tell me about your product" Bot: "Acme helps teams manage projects more effectively. We focus on three things: 1. Simple task management - Create tasks in seconds 2. Real-time collaboration - See updates instantly 3. Intelligent automation - Less busywork Want to dive deeper into any of these?" Why it works:
  • Easier to read
  • Users can ask about what interests them
  • Works better on mobile
  • When to use: Long explanations, lists, multi-part responses ---

    Pattern 9: Suggest Next Steps

    Don't end with "anything else?" Always suggest what's next. Bad: Bot: "I've created your account. Anything else I can help with?" (User doesn't know what to ask next) Good: Bot: "Account created! Here's what most people do next:
  • Import your existing projects
  • Invite your team
  • Take a quick tour
  • Which sounds good?" Why it works:
  • Guides users through journey
  • Reduces "now what?" moments
  • Increases feature discovery
  • When to use: After completing any action ---

    Pattern 10: Use Natural Language Variations

    Don't be robotic. Vary your responses. Robotic:

    Bot: "Task created successfully."

    Bot: "Task created successfully."

    Bot: "Task created successfully."

    
    
    Natural:
    

    Bot: "Added that task."

    Bot: "Got it, task created."

    Bot: "Done! Your task is on the list."

    
    
    Why it works:
    
  • Feels more human
  • Less repetitive
  • Better user experience
  • Implementation:
    javascript

    const confirmations = [

    "Done!",

    "Got it.",

    "Added.",

    "All set.",

    "Task created."

    ];


    function randomConfirmation() {

    return confirmations[Math.floor(Math.random() * confirmations.length)];

    }

    ``


    ---


    Bonus Patterns


    Pattern 11: Graceful Degradation


    When AI can't understand, fall back gracefully:


    User: "asdkjfh sdkljfh"

    Bot: "I didn't quite understand that. I can help you with:

  • Creating tasks
  • Managing projects
  • Inviting team members
  • Account settings
  • Or just ask me a question!"


    Pattern 12: Use Positive Language


    Negative: "You can't access that feature"

    Positive: "That feature is available on the Pro plan. Want to upgrade?"


    Negative: "Invalid email"

    Positive: "That email format doesn't look quite right. Try again?"


    Pattern 13: Provide Examples


    When asking for input, show examples:


    Bad: "What's your use case?"


    Good: "What will you use Acme for?

    Examples: 'Managing client projects', 'Team task tracking', 'Product launches'"


    ---


    Anti-Patterns (What NOT to Do)


    ❌ Don't Pretend to Be Human


    Bad: "Hi! I'm Sarah from the support team..."

    (Then user realizes it's a bot and feels deceived)


    Good: "Hi! I'm the Acme bot. I can help you with..."


    ❌ Don't Ask Unnecessary Questions


    Every question should have a purpose.


    Bad:

    "How are you today?"

    "What brings you here?"

    "What can I help with?"

    "What specifically?"


    Good:

    "What can I help you with today?"


    ❌ Don't Make Users Repeat Themselves


    Bad:

    User: "I need to book a table for 4 people on Friday at 7pm"

    Bot: "How many people?"

    User: 🤦


    Good:

    Bot: "Table for 4 on Friday at 7pm. I have availability at 6:30pm and 7:30pm. Which works?"


    ❌ Don't Use Too Much Personality


    Bad: "OMG! 🎉 That's so awesome! 🔥 Let's totally do that! 💪"


    Good: "Got it. I'll set that up."


    ---


    Putting It All Together


    Example conversation using multiple patterns:


    User: "I need help" *(vague request)*


    Bot: "I'm here to help! What are you trying to do?" *(Pattern 1: Start open)*


    User: "Set up a new project"


    Bot: "Great! What should we call this project?" *(Pattern 9: Suggest next step)*


    User: "Website Redesign"


    Bot: "Added 'Website Redesign'. Want to add team members now or skip that for later?" *(Pattern 3: Progressive disclosure, Pattern 5: Escape hatch)*

  • Add Team Members
  • Skip for Now
  • User: *Clicks "Add Team Members"*


    Bot: "Who should I add? You can type their emails or names." *(Pattern 13: Provide examples)*


    User: "sarah@company.com, mike@company.com"


    Bot: "Added Sarah and Mike to the project. They'll get an invite email." *(Pattern 10: Natural language)*


    What's next?

  • Create some tasks
  • Set a deadline
  • I'm done for now *(Pattern 5: Escape hatch)*
  • ---


    Measuring Success


    Track these metrics to see if your patterns are working:


    Efficiency:

  • Messages per successful conversation
  • Time to complete task
  • Abandonment rate
  • Satisfaction:

  • NPS after conversations
  • "This helped" vs "Not helpful" clicks
  • Repeat usage
  • Understanding:

  • How often does bot not understand?
  • How often do users rephrase questions?
  • Human handoff rate

---


Get Started


Want to implement these patterns in your product?


Read our documentation →


See working examples →


---


*Have a pattern we missed? Email hello@ilq.ai*