Guides/How to build Slack & Microsoft Teams notifications/Best Practices and Optimization

Chapter 3

Best Practices and Optimization

Message design principles that respect user attention, timing and frequency strategies to prevent fatigue, platform-specific optimization for Slack vs Teams threading and formatting. Covers delivery reliability patterns, error handling, monitoring and observability, user preference management, and edge case handling.

How to build Slack & Microsoft Teams notifications

Getting notifications delivered is the baseline. Making them useful requires thoughtful design, appropriate timing, and respect for user attention.

Designing Messages That People Actually Read

Users scan notifications in seconds. Frontload the important information so they can decide quickly whether to act. "Budget approval needed: $45,000 for Q4 marketing" tells someone immediately what they're looking at. "Update on your request" makes them click through to find out what happened.

design slack templates

Specificity helps users prioritize. "Server db-prod-01 connection failed" beats "Error occurred." "Sarah Chen commented on the Q4 roadmap document" beats "New comment on your document." You have the specific information when sending. Include it instead of making users click through for basic context.

Action buttons work when they're obvious and limited. Two or three clear options are fine. Five buttons with ambiguous labels create decision paralysis. "Approve" and "Reject" are immediately clear. "Process," "Review," and "Consider" require thought about what each does.

Tailor content to the recipient's role. A "Deal closed" notification means something different to a sales rep (commission incoming) versus a support engineer (provision the new customer's environment). What matters to them? What action do they need to take?

Preventing Notification Fatigue

Users tolerate notifications up to a point. Cross that line and they disable notifications entirely or start ignoring everything you send.

Batch similar notifications when it makes sense. If ten people comment on the same document within an hour, send one notification: "10 new comments on Q4 Roadmap" instead of ten separate messages. The information value is nearly identical but the interruption cost is ten times lower.

Implement frequency caps. When one user generates fifty events in an hour, sending fifty notifications trains others to ignore your app. Cap notifications per user per time period. Queue extras for later or batch into a digest.

Timing affects reception. A reminder about tomorrow's meeting sent today is helpful. The same reminder a week early is noise. Non-urgent notifications can wait for business hours in the recipient's timezone instead of arriving at 3am.

Workflow

Courier Journeys handles batching and timing through workflow rules. Configure digest windows, add timezone-aware delays, and implement frequency caps without building custom scheduling logic.

Platform-Specific Optimization

Slack and Teams have different cultures that affect how users receive notifications.

Slack users expect asynchronous communication. Notifications arrive anytime; people respond when convenient. Thread replies work well because threading is central to how Slack organizes conversations. Ephemeral messages let you show information to one person without cluttering channel history.

Teams users expect more structured communication. Teams is built around organizational hierarchy, so notifications relating to ongoing work should go to the appropriate Team's channel. The Office 365 integration means you can link directly to SharePoint documents or Calendar events.

Message formatting differs. Slack's Block Kit includes dividers, context blocks, and specific layouts. Teams' Adaptive Cards support different elements like fact sets for key-value pairs. Design for each platform's constraints rather than forcing identical layouts.

Delivery Reliability

Notifications that don't arrive are worse than no notification system. Users expect reliability, and failures erode trust.

Implement retry with exponential backoff. When delivery fails due to network issues or temporary outages, retry after a short delay. If it fails again, wait longer. After several failures, give up and log the error. Distinguish between retryable errors (network timeouts) and permanent failures (invalid tokens, channel not found).

Circuit breakers prevent cascading failures. If Slack's API starts failing consistently, stop sending new notifications for a cooldown period. Monitor failure rates and open the circuit breaker when they exceed thresholds.

Queue notifications when delivery fails. Store them for retry when the platform becomes available. Users would rather get an alert fifteen minutes late than not at all.

Fallback channels provide alternatives. If Slack fails after retries, send via email instead. The Courier routing engine handles this with method: "single" and an ordered channel list, trying each until one succeeds.

Monitoring

Track delivery metrics by channel and notification type. What percentage succeed? Which types have highest failure rates? If Slack fails 20% but Teams succeeds 99%, you have a Slack-specific issue.

Analytics Notifications

Measure engagement beyond delivery. Which notifications get clicked? Which actions do users take? Low engagement suggests a notification isn't providing value.

Set up alerts for anomalies. If volume drops significantly, something might be broken. If failure rates spike, a platform might be down or authentication failed. Catch problems before customers report them.

The Courier Analytics dashboard provides delivery rates, engagement metrics, and failure patterns across channels with detailed logs for debugging.

User Preferences and Control

Without preferences, even useful notifications become spam when they're too frequent or poorly timed.

preference management

Category opt-outs let users want task assignments but not routine status updates. Breaking notifications into toggleable categories gives meaningful control without all-or-nothing choices.

Channel preferences matter too. Critical alerts via both Slack and SMS, routine updates only in Slack. Per-category channel selection.

Quiet hours respect work-life boundaries. Non-urgent notifications wait for business hours. Critical alerts might break through; feature announcements can wait.

Frequency preferences help power users. Someone collaborating on fifty documents might prefer a daily digest summarizing all activity. Others want real-time everything.

Courier's preference management provides a hosted preference center that automatically filters notifications based on user settings.

Platform-Specific Tips

For Slack:

  • Use ephemeral messages for responses only one person needs to see
  • Thread replies keep channels organized. Post first message to channel, updates as replies
  • Mention users sparingly. @user triggers additional alerts; use only when you need attention
  • Update messages instead of posting separate status updates ("Deployment: 10%", "20%", "30%")

For Teams:

  • Understand channel types: standard channels work normally, private channels require bot invitation, shared channels span tenants with additional complexity
  • Adaptive Card versioning matters. Use latest version but verify rendering in Teams clients
  • Save activity IDs to update messages later, similar to Slack timestamps

Handling Edge Cases

Production surfaces scenarios that don't appear during development:

  • Workspace deletion or reinstallation: Detect when tokens stop working and notify customers to reauthorize. Don't silently fail.
  • User deletion: Check for this error and remove users from future notifications instead of continuing failed attempts.
  • Channel archiving: Update records to stop targeting archived channels. Notify admins the destination is invalid.
  • Permission changes: Handle gracefully when admins remove scopes or restrict bot access.
  • Rate limit exhaustion: Queue messages instead of dropping them. Consider batching if you're hitting limits regularly.
  • Platform outages: Queue for recovery, provide email fallback for critical notifications, monitor status pages.

Courier's delivery infrastructure handles these through automatic retry logic, error categorization, fallback routing, and queue management.


Previous chapter

Technical Implementation

Step-by-step setup for Slack OAuth and Teams Bot Framework, then connecting both to Courier. Covers sending notifications through the unified API, designing templates in the visual editor, targeting users and channels, adding interactive buttons, handling webhooks, managing rate limits, and debugging delivery issues.

Next chapter

Evaluating Your Options

Platform landscape comparison covering Courier, Knock, Novu, SuprSend, MagicBell, and others with focus on Teams support gaps. Includes ROI expectations, pilot program guidance, build vs buy cost analysis, migration strategies from custom integrations, and customer examples from DroneDeploy, LaunchDarkly, HiPages, and Twilio.

Multichannel Notifications Platform for SaaS

Products

Platform

Integrations

Customers

Blog

API Status

Subprocessors


© 2025 Courier. All rights reserved.