A client needs to design or overhaul their notification system across channels (email, push, in-app, SMS). Common when users are complaining about notification overload, engagement metrics are declining, or a product is adding new communication channels and needs a coherent strategy before shipping.
How it works
- You provide the product, available notification channels, user segments, and current notification volume
- The skill builds a multi-channel notification framework covering channel selection, frequency capping, personalization tiers, opt-in/opt-out flows, content templates, and engagement health metrics
- It returns a notification strategy document the product, engineering, and marketing teams can use to implement a system that respects user attention while driving engagement
Prompt
You are building a multi-channel notification strategy for a Kate Makrigiannis consulting engagement. Kate helps clients stop treating notifications as an afterthought and start treating them as a product surface that directly impacts retention and trust. Before writing, read knowledge/voice-tone-guide.md -- use the client-facing voice.
Inputs I will provide:
- Product: {{PRODUCT}} (what the product does, key user actions, business model)
- Notification channels available: {{CHANNELS}} (e.g., "email, push (iOS + Android), in-app, SMS" -- list what's currently live or planned)
- User segments: {{USER_SEGMENTS}} (key segments -- e.g., "free users, paid users, enterprise admins, churning users")
- Current notification volume: {{CURRENT_VOLUME}} (current state -- e.g., "we send 3 emails/week and 1-2 push/day" or "we have no system, sending ad hoc" or "users are complaining about too many notifications")
- Context (optional): {{CONTEXT}} (what triggered this work -- engagement drop, channel expansion, user complaints, regulatory requirements)
Step 1: Notification audit and channel assessment
Current State Assessment
Evaluate the inputs and identify:
- What notifications are being sent today (transactional, marketing, product, social)
- Which channels are being used for which message types
- Known pain points (over-sending, wrong channel, no personalization, no opt-out)
Channel Capability Matrix
| Channel | Best For | Urgency Level | Rich Content? | Cost per Send | User Control |
|---|---|---|---|---|---|
| [Use cases] | Low-Medium | Yes (HTML, images) | Low | Unsubscribe link | |
| Push (mobile) | [Use cases] | Medium-High | Limited (title + body) | Free | OS-level control |
| In-app | [Use cases] | Low | Yes (full UI) | Free | Dismissible |
| SMS | [Use cases] | High | No (text only) | Medium-High | Opt-out reply |
| [Other channels from inputs] | [Use cases] | [Level] | [Y/N] | [Cost] | [Control mechanism] |
Step 2: Notification taxonomy
Classify every notification type by category and assign channels:
Message Type Classification
| Message Type | Category | Primary Channel | Fallback Channel | Priority | Example |
|---|---|---|---|---|---|
| Password reset | Transactional | SMS | Critical | "Reset your password" | |
| Purchase confirmation | Transactional | Push | Critical | "Your order is confirmed" | |
| New feature announcement | Product | In-app | Medium | "Try our new dashboard" | |
| Weekly digest | Marketing | None | Low | "Your weekly summary" | |
| Friend activity | Social | Push | In-app | Medium | "Alex commented on your post" |
| Inactivity re-engagement | Marketing | Push | Medium | "We miss you" | |
| [Product-specific types] | [Category] | [Channel] | [Fallback] | [Priority] | [Example] |
Categories:
- Transactional: User-triggered, expected, often legally required
- Product: Feature updates, usage nudges, onboarding
- Marketing: Campaigns, promotions, content
- Social: User-to-user interactions, community activity
Step 3: Frequency capping rules
Per-Channel Caps
| Channel | Hard Cap (per day) | Soft Cap (per week) | Cool-down After Dismiss |
|---|---|---|---|
| [N] total | [N] non-transactional | [N hours/days] | |
| Push | [N] total | [N] non-critical | [N hours] |
| In-app | [N] simultaneous | [N] per session | Next session |
| SMS | [N] total | [N] non-transactional | [N days] |
Aggregate Caps (across all channels)
- Maximum total non-transactional notifications per user per day: [N]
- Maximum total non-transactional notifications per user per week: [N]
- When a cap is hit, prioritize by message priority tier (critical > high > medium > low)
- Transactional messages are never capped
Priority Queue Logic
When cap is reached and a new notification triggers:
- If new notification priority > lowest queued notification priority, replace it
- If equal priority, use recency (newer wins)
- Dropped notifications are logged but not sent; review dropped-notification reports weekly
Step 4: Personalization tiers
Define four personalization tiers and map each notification type to its appropriate tier:
Tier 0: No Personalization
- Same message to all recipients
- Use for: system-wide announcements, legal notices, maintenance alerts
- Example: "Scheduled maintenance on Saturday 2am-4am EST"
Tier 1: Segment-Based
- Content varies by user segment (free vs. paid, role, plan tier)
- Use for: feature announcements, marketing campaigns, onboarding sequences
- Example: "New feature for Pro users" vs. "Upgrade to unlock [feature]"
Tier 2: Behavioral
- Content varies by user behavior (usage patterns, engagement history, lifecycle stage)
- Use for: re-engagement, usage nudges, milestone celebrations
- Example: "You've created 10 projects this month -- here's a power tip"
Tier 3: Individual
- Content is unique per user (recommendations, personalized digests, activity summaries)
- Use for: weekly digests, recommendation engines, activity feeds
- Example: "3 items need your review: [specific items]"
Personalization Mapping
| Notification Type | Current Tier | Target Tier | Data Required | Implementation Effort |
|---|---|---|---|---|
| [Type] | [0-3] | [0-3] | [What data is needed] | Low / Medium / High |
Step 5: Opt-in / opt-out flow design
Opt-In Strategy
- Progressive permission: Don't ask for all channels at once. Earn each channel through demonstrated value.
- Push notification priming: Show an in-app prompt explaining value before triggering the OS permission dialog
- Email permission: Collect at signup with clear expectation-setting ("You'll receive [frequency] emails about [topics]")
- SMS permission: Only request when high-urgency use case is demonstrated
Opt-In Flow
| Channel | When to Ask | How to Frame | Fallback if Declined |
|---|---|---|---|
| Signup | "Get [value] delivered to your inbox" | In-app notifications only | |
| Push | After first value moment | "Get notified when [specific valuable event]" | Email fallback |
| SMS | When user enables high-urgency feature | "Get instant alerts for [urgent thing]" | Push fallback |
Preference Center Design
Users should be able to control:
- Channel preferences per notification category (not per individual notification -- too granular)
- Frequency preferences ("daily digest" vs. "real-time" vs. "weekly summary")
- Quiet hours (no non-critical notifications between [time] and [time])
- Pause all non-transactional notifications for [N] days
Opt-Out Flow
- Every non-transactional message must include an easy opt-out mechanism
- One-click unsubscribe for email (no confirmation page)
- Opt-out from a category should not opt out from all categories
- Opt-out confirmation message: acknowledge the change and link to preference center
- Track opt-out reasons when possible (dropdown on unsubscribe: "too many," "not relevant," "switched to competitor," "other")
Step 6: Notification content templates
For each major notification type, provide a content template:
Template: [Notification Type]
- Subject / Title: [Template with {{variables}}]
- Body: [Template with {{variables}}, under character limit for channel]
- CTA: [Primary action, one verb + object]
- Fallback (no-CTA version): [For channels that don't support buttons]
Character limits by channel:
- Push title: 50 characters
- Push body: 150 characters
- Email subject: 60 characters
- SMS: 160 characters (1 segment)
- In-app: flexible, but keep under 200 characters for banners
Step 7: Engagement metrics and health indicators
Per-Channel Metrics
| Metric | Push | In-app | SMS | Healthy Range | |
|---|---|---|---|---|---|
| Delivery rate | Track | Track | N/A | Track | > 95% |
| Open rate | Track | Track | Track (view) | N/A | Email: 20-40%, Push: 5-15% |
| Click-through rate | Track | Track | Track | Track | Email: 2-5%, Push: 1-3% |
| Opt-out rate | Track | Track | Track (dismiss) | Track | < 0.5% per send |
| Complaint / spam rate | Track | N/A | N/A | N/A | < 0.1% |
Fatigue Detection Signals
Monitor these indicators for notification fatigue:
- Open rates declining week-over-week for 3+ consecutive weeks
- Opt-out rate spiking above 1% on any single send
- Push notification permission revocation rate increasing
- Time-to-open increasing (users are ignoring and catching up later)
- In-app dismissal rate above 80% without click
Fatigue Response Protocol
When fatigue is detected:
- Reduce frequency by 30% for the affected segment
- A/B test send times (current vs. shifted by 2-4 hours)
- Review content relevance -- are notifications adding value or just filling a schedule?
- Consider switching from push to digest format
- Re-test after 2 weeks; if metrics recover, stabilize at new frequency
Related skills: Pairs with
/email-campaign-builderfor email-specific campaign design. Uses/personalization-playbookfor deeper personalization strategy. Feeds into/activation-optimizationfor onboarding notification sequences.
Example Output
Input
- Product: Folia — a B2C personal finance app that helps users track spending, set savings goals, and get AI-generated budget recommendations. Revenue model is freemium (free tier with ads, Folia Plus at $9.99/month). Key user actions include linking bank accounts, categorizing transactions, reviewing weekly spending summaries, and hitting savings milestones.
- Notification channels available: Email, push (iOS + Android), in-app. SMS is planned but not yet live.
- User segments: Free users (68% of base), Folia Plus subscribers (24%), churning users (identified as 30+ days inactive, 8%)
- Current notification volume: Sending approximately 5–6 emails/week per user (mix of marketing and product), 2–3 push/day, and in-app banners with no frequency logic. Users are actively complaining — App Store reviews mention "notification spam" and the unsubscribe rate on marketing emails hit 2.1% last month.
- Context: Engagement drop triggered this work. DAU/MAU ratio fell from 34% to 26% over 90 days. The team suspects notification fatigue is a major contributor. SMS is also being evaluated for bill-due alerts, and the team wants a coherent strategy before adding another channel.
Output
Folia Notification Strategy
Prepared by Kate Makrigiannis Consulting Channels in scope: Email · Push (iOS + Android) · In-app · SMS (pre-launch planning)
Current State Assessment
Folia's notification system grew without a framework. What you have today is a volume problem masquerading as an engagement problem — and your users are telling you directly in App Store reviews.
What's being sent today:
- Transactional: Account link confirmations, password resets (email only — correct)
- Product: Spending summary emails, savings milestone push alerts, budget recommendation in-app banners
- Marketing: Upgrade-to-Plus campaigns (email), feature announcements (email + push), win-back attempts for churning users (push)
- Social/Behavioral: "You're on track!" encouragement push messages, triggered by no clear behavioral logic
Known pain points:
- Email frequency (5–6/week) is 3–4x industry norm for a utility-first finance app
- Push cadence (2–3/day) sends regardless of whether the user has opened the app recently
- In-app banners have no session cap — a user who checks their balance three times in a day sees the same banner three times
- No preference center exists; the only escape is full unsubscribe or disabling push at the OS level
- Churning users and active Plus subscribers receive identical notification streams — no segmentation logic
Channel Capability Matrix
| Channel | Best For | Urgency Level | Rich Content? | Cost per Send | User Control |
|---|---|---|---|---|---|
| Weekly digests, upgrade campaigns, onboarding sequences, milestone summaries | Low–Medium | Yes (HTML, images) | Low | Unsubscribe link | |
| Push (iOS + Android) | Real-time alerts (bill due, unusual spend, goal reached), time-sensitive nudges | Medium–High | Limited (title + body) | Free | OS-level toggle |
| In-app | Feature discovery, budget tips, upsell prompts, onboarding checklists | Low | Yes (full UI) | Free | Dismissible |
| SMS (planned) | Bill-due alerts, large transaction flags, critical account events only | High | No (text only) | Medium–High | STOP reply opt-out |
Channel verdict for Folia: Email should be reduced to 1–2/week maximum. Push should be need-triggered, not scheduled. In-app is your safest channel for non-urgent product messaging — lean into it. SMS should launch with a tight scope (bill alerts only) and explicit opt-in before you send a single message.
Message Type Classification
| Message Type | Category | Primary Channel | Fallback Channel | Priority | Example |
|---|---|---|---|---|---|
| Password reset | Transactional | SMS (when live) | Critical | "Reset your Folia password" | |
| Bank account link confirmation | Transactional | In-app | Critical | "Your Chase account is connected" | |
| Unusual transaction detected | Transactional | Push | Critical | "New $340 charge at Best Buy" | |
| Bill due reminder | Transactional | Push | SMS (when live) | High | "Your Amex bill is due in 3 days" |
| Savings goal reached | Product | Push | In-app | High | "You hit your Emergency Fund goal 🎉" |
| Weekly spending summary | Product | In-app | Medium | "Here's where your money went this week" | |
| AI budget recommendation | Product | In-app | Medium | "You could save $80/month on subscriptions" | |
| Onboarding step nudge | Product | In-app | Medium | "Link your second account to get the full picture" | |
| Upgrade to Folia Plus | Marketing | In-app | Low | "Unlock unlimited goals — try Plus free for 30 days" | |
| Feature announcement | Marketing | In-app | Low | "New: Bill tracking is here" | |
| Inactivity re-engagement (30+ days) | Marketing | Push | Medium | "Your budget hasn't been reviewed in a while" | |
| Monthly financial health recap | Marketing | None | Low | "Your October in numbers" |
Frequency Capping Rules
Per-Channel Caps
| Channel | Hard Cap (per day) | Soft Cap (per week) | Cool-down After Dismiss |
|---|---|---|---|
| 1 total | 2 non-transactional | 48 hours before next marketing email | |
| Push | 2 total | 5 non-critical | 4 hours after any push |
| In-app | 1 simultaneous banner | 3 per week | Next session (not same session) |
| SMS (planned) | 1 total | 2 non-transactional | 7 days |
Aggregate Caps (Across All Channels)
- Maximum non-transactional notifications per user per day: 3
- Maximum non-transactional notifications per user per week: 7
- Transactional messages (password reset, unusual transaction, bank confirmation) are never capped
- When cap is hit, priority order: Critical > High > Medium > Low
- Dropped notifications are logged; review dropped-notification report in weekly growth standup
Segment-Level Adjustments
| Segment | Cap Modifier | Rationale |
|---|---|---|
| Free users | Standard caps apply | Baseline experience |
| Folia Plus subscribers | +1 push/week soft cap | Higher engagement intent; upgrade content irrelevant |
| Churning users (30+ days inactive) | Email only; push suppressed | OS-level permission likely already revoked; don't burn the channel |
Personalization Tiers
Personalization Mapping
| Notification Type | Current Tier | Target Tier | Data Required | Implementation Effort |
|---|---|---|---|---|
| Weekly spending summary | 0 (same to all) | 3 (individual) | Transaction categories, vs. prior week | Medium |
| Upgrade to Folia Plus | 0 | 1 (segment) | Plan tier, feature usage | Low |
| AI budget recommendation | 1 | 3 (individual) | Spending patterns, recurring transactions | High |
| Inactivity re-engagement | 0 | 2 (behavioral) | Last active date, last completed action | Low |
| Savings goal alert | 1 | 2 (behavioral) | Goal progress %, goal type | Low |
| Feature announcement | 0 | 1 (segment) | Plan tier, feature availability | Low |
| Bill due reminder | 0 | 2 (behavioral) | Bill amount, due date, payment history | Medium |
Quick win: The weekly spending summary goes out identically to all users today. Swapping in the user's top spending category, their week-over-week delta, and their goal progress requires three data fields you already collect — and it converts a generic email into the kind of message users actually open.
Opt-In / Opt-Out Flow Design
Opt-In Flow
| Channel | When to Ask | How to Frame | Fallback if Declined |
|---|---|---|---|
| Signup | "Get your weekly money summary and savings tips — no more than twice a week |