Writing App Copy That Does Not Nag: Empty States and Reminders
Learn how to replace nagging notifications and blank screens with helpful, context-aware copy that respects user attention.
Empty states and reminders are the most common places where mobile apps cross the line from helpful assistant to digital pest. When a user opens a new app and sees a blank screen that says "No data found," they feel a friction that isn't their fault. When a notification chirps just to say "We haven't seen you in a while," the app is demanding attention without offering value. At AIA Innovations, we focus on utility-first design, which means our copy must serve a functional purpose rather than just filling space or boosting daily active user metrics. Writing copy that does not nag requires a shift from shouting at the user to providing a clear path forward.
The Engineering of a Helpful Empty State
An empty state is not just a UI placeholder; it is a critical branch in your application logic. From an engineering perspective, an empty state occurs when a data query returns a null or empty set. The temptation is to handle this with a generic catch-all. However, the copy should reflect the specific reason why the state is empty. Is it because the user hasn't started a task yet, or is it because a search filter was too restrictive?
In our app Employ Ready, the interview rehearsal screen starts empty. Instead of saying "No rehearsals found," which sounds like a system error, we use the space to explain the benefit of starting. "Your first rehearsal is ready. Practice 5 common questions to get your baseline score." This transforms a technical null state into a starting block.
The Three Layers of Empty State Copy
- 1.Status: Briefly explain why the screen is empty (e.g., "You haven't tracked any habits today").
- 2.Benefit: Remind the user why they are on this screen in the first place (e.g., "Tracking helps you see your progress over time").
- 3.Action: Provide a clear, singular button or instruction (e.g., "Log your first habit").
| Bad Copy (Nagging) | Better Copy (Functional) | The Logic Shift |
|---|---|---|
| "Nothing to see here!" | "Search for a ticker symbol to see its Shariah status." | Moves from a dead end to a specific instruction. |
| "You are lazy! No chores done." | "The chore list is clear. Add a new task for the weekend?" | Removes judgment and offers a next step. |
| "No data found." | "We couldn't find a match for that filter. Try broadening your search." | Acknowledges the user's action and suggests a fix. |
Designing Reminders That Respect Attention
Reminders are intrusive by nature. They trigger a haptic buzz or a sound that breaks a user's focus. If that interruption does not provide immediate value, it is perceived as a nag. In our work on Salah Companion: Prayer Times, we deal with time-sensitive notifications that occur multiple times a day. If these reminders were phrased as demands—"Open the app now!"—they would quickly become annoying. Instead, we treat the notification as a service.
Effective reminder copy should follow the principle of "Information First, Action Second." If a user can get the value they need just by glancing at their lock screen without opening the app, the notification is a success. This might seem counter-intuitive to engagement metrics, but it builds long-term trust. When we discussed designing prayer reminders that respect attention, we emphasized that the goal is to facilitate a habit, not to capture a click.
The Anatomy of a Non-Nagging Notification
To avoid sounding like a nag, avoid using imperative verbs that focus on the app's needs. Avoid "Open," "View," or "Check." Instead, use verbs that focus on the user's goal.
- The Nagging Way: "Don't forget to check your stocks! You haven't looked at Shariah Signal in two days."
- The Respectful Way: "3 of your watched stocks have updated compliance reports. Review them at your convenience."
In the second example, the copy provides the "Why" (updated reports) and grants the user agency ("at your convenience"). It acknowledges that the user's time is their own.
Context-Aware Friction
Sometimes, the best copy is no copy at all. In Mindful Assistant, we experiment with reducing the frequency of alerts based on the user's current activity. From a development standpoint, this involves checking system states before triggering a notification. If the user is in a "Do Not Disturb" mode or has a high-priority calendar event, the app should remain silent rather than sending a reminder that will just be swiped away in irritation.
When you do need to communicate, use "Passive Assistance." This means providing information that is ready when the user wants it, rather than pushing it when they don't. For example, if a user is using Trophy Tykes to manage chores, a nagging app might send a notification every hour until a chore is marked done. A passive assistant would instead update a persistent widget or a single, quiet notification at the end of the day summarizing what remains. This distinction is vital for maintaining a healthy relationship between the user and the software.
Practical Copywriting Checklist for Developers
When writing strings for your strings.xml or localizations, run them through this filter:
- [ ] Is there a pronoun? Try to use "You" or "Your" rather than "The user." It feels more like a conversation.
- [ ] Is it an error or a state? Don't use "Error" unless something actually broke. If there's just no data, describe the absence, not a failure.
- [ ] Is it actionable? Can the user do something about this message right now? If not, why are you showing it?
- [ ] Is it judgmental? Words like "forgot," "failed," or "missed" can feel accusatory. Use neutral words like "remaining," "pending," or "upcoming."
- [ ] Does it require the app to be open? If the information can be fully conveyed in the notification body, do it. Don't force a click.
The Role of Timing in Tone
Copy doesn't live in a vacuum; it lives on a timeline. A message that feels helpful at 10:00 AM might feel like a nag at 10:00 PM. As engineers, we can use logic to adjust the tone based on time. For instance, an empty state in a task app might say "Plan your day" in the morning, but change to "Review your wins" in the evening. This contextual awareness makes the app feel like it understands the user’s reality.
This relates closely to the technical implementation of triggers. As we explored in our post on exact alarms vs. periodic work, the timing of your background tasks dictates how your copy is received. A reminder that arrives 15 minutes late because of battery optimization isn't just a technical delay; it makes the copy (e.g., "Starting now") look incorrect and unpolished. Matching the technical trigger to the promise of the copy is essential for reliability.
Handling "Edge Case" Copy
We often spend 90% of our time writing copy for the "Happy Path"—when everything is working and the user is engaged. But the personality of an app is truly revealed in the edge cases.
Consider the "No Internet" state. Most apps show a generic "No Connection" message. A non-nagging app acknowledges the situation without blaming the user or the ISP. It offers offline utility. For example, in Shariah Signal, if the user is offline, the app shouldn't just nag them to reconnect. It should say: "You're offline. You can still view your recently checked stocks, but live updates are paused until you reconnect."
This approach respects the user's current situation. It tells them what they can do, rather than just what they can't. It turns a technical limitation into a guided experience.
What to do next
- 1.Audit your empty states: Open every screen in your app with a fresh account (zero data). Replace every instance of "No [item] found" with a benefit-driven instruction that tells the user how to get started.
- 2.Rewrite your notifications: Look at your most frequent reminders. Remove all imperative verbs like "Check" or "Open" and replace them with the actual data the user is looking for.
- 3.Implement context checks: Add logic to your notification triggers to suppress or alter the message if it’s outside of a user’s preferred active hours. Ensure your Android notification reliability isn't coming at the cost of the user's peace of mind.