This is related to this question I asked here earlier. I want to handle the full range of options for monthly reminders in my Android app. So I handle:

  • Repeat on the day of the month (e.g. the 17th of every month)
  • Repeat on the same day of the week every month (e.g. the second Sunday of every month)
  • Repeat on the number of days from the end of the month (e.g. three days before the end of every month. This is good for remembering to pay rent, for example)
  • Repeat on the same day of the week every month, counting from the end of the month (e.g. the last Saturday of every month)

I have a number of questions on how to handle this clearly. The first is what do I do when the given pattern does not occur in a given month (e.g. many months don't have a 31st, and there are only 4 5th Fridays a year)? Based on the responses I got from the last question I'm leaning towards pushing it to the last day of the month if the pattern can't be met. Or the first of the month for the patterns that count from the end. But I have the example of a group I used to belong to that met on every fifth Saturday. If a month didn't have a fifth Saturday, we didn't meet. So I wonder if it would be reasonable to have a checkbox or other boolean selector to switch between a strict pattern match and a flexible pattern match?

My other issue is how to display these things to the user. Currently I have a pretty technical description, but I'm moving everything to a more conversational tone. I'm also changing from my existing system, where users select from a drop-down, to one in which all the options are available in a sidebar and the user can click the option they want and it will disappear from the sidebar and appear in the reminder details (eventually I want the user to also be able to drag and drop). When you click the option (or finish dragging, when I implement that), a dialog appears to customize the required details of the repeat pattern. I'm thinking of something like this:


download bmml source – Wireframes created with Balsamiq Mockups

My tagline is "The most versatile reminder app for Android", and it is that or pretty darn close, but I'm struggling with how to present all of the options that implies in a clean and clear interface.

2 Answers 2


If you want to keep it conversational you could try to make one sentence out of it with a Natural Language form: http://tympanus.net/Tutorials/NaturalLanguageForm/

Something like: This reminder will repeat on the | 1st | | day | of | every | | month |.

You could combine this with javascript to enable conditional extra options to make it work.

  • That's very similar to what I want to do, but in a native Android app. I'll definitely use that for inspiration, though
    – TBridges42
    Aug 3, 2015 at 12:40

If you want this to be the most flexible reminders app ever, I would allow users to select their own 'plan B', and present the options in plain language.

Here's is an example of how it could be done. Suppose they've selected '5th Friday' of every month. A dialog could appear that says something like so:

What would you like to do if there's no 5th Friday?
- move it to previous Friday
- move it to following Friday
- skip it

Of course, more options could be added if needed. Additionally, I would consider adding some kind of icon or indicator for items that have a 'plan B'. Clicking on the icon would allow the user to edit 'plan B'.

  • I was just thinking about this. In my head, when the user selects an option from the details dialog that is not present in every month, a drawer slides down from the bottom of it with options for how to handle these cases.
    – TBridges42
    Aug 1, 2015 at 1:01
  • Ah, right.. I was forgetting we're already in a dialog at this point. So your idea for displaying the options makes better sense.
    – Nick Todd
    Aug 1, 2015 at 1:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.