Habemus Dialogum – We Have a Dialog

This article is about a single dialog. The dialog with which users will be able to specify the repeat settings of a recurring task.

When you set out to do something new, it is a good idea to have a look at what others in the field have done before. When we began to approach recurring tasks, we looked at iCal’s recurring events. We wanted Things to be as flexible and powerful as iCal. The corresponding interface in iCal also seemed well done. Naturally, we copied it. Here is an example:


Not too shabby, is it? It seemed fine in theory. But after implementing and combining it with the underlying logic, it took us only minutes to discover that it didn’t work as expected. Not that anyone was able to tell exactly why. And that’s often the case when developing user interfaces. It just didn’t feel right. But how to improve it? We don’t remember how many mock-ups we passed to each other in the search for a solution. Here is a selection of them, together with the iCal inspired ones:


In hindsight it is much easier to tell why we didn’t like the previous approach:

  • We made users think about whether recurring tasks have a due date even before they had a chance to enter the recurrence pattern.
  • Regardless of the chosen interval (daily, weekly, monthly, yearly), the last option was always “after completion”. Repetition in user interfaces is often a bad sign.
  • We wanted to have the option of generating tasks for iCal events (think birthday calendar). But the user had to select “yearly” first in order to even discover this option.
  • The iCal inspired controls itself weren’t optimal. They took up a lot of space. And we often accidentally selected multiple days when we just wanted to change the current setting.
  • We wanted to add support for start and end dates as well and felt that this would clutter up the dialog even more.

To cut a long story short, we are still friends :), but we fought uncompromisingly, and now each one of us is satisfied with the result:


Why we like this one:

  • The user gets to choose “daily”, “weekly”, “monthly”, “yearly”, “after completion”, “for iCal events” first. No more repetition of the “after completion” option. The “iCal events” option is easily discovered.
  • The box below the pop-up collects precisely those controls that depend on the chosen selection. (“Next” and “Ends” don’t apply for the “after completion” and “iCal events” selection and needn’t be shown in those cases.)
  • Simple recurrence rules can be specified using just one line of controls, e.g. “every 1 month on the 1st day”, or “every 1 month on the 2nd Sunday”. If the recurrence rule is more complex, additional lines can be added by clicking the + button. So, the complexity of the dialog scales with the complexity of the recurrence rule!
  • Unlike iCal we don’t have the luxury of a large calendar to show the result of specifying a recurrence rule. Yet, we still found a good place to show upcoming dates: right after “Next”.
  • Some repeating tasks have due dates, some don’t. Just before the user confirms the dialog, he or she is invited to clarify whether the specified dates were actually meant as due dates (e.g., “pay rent on the last day of every month”). In that case, the user might want to also specify how many days before the due date she would like to see the corresponding task in her Today list (for the better part of the month she probably doesn’t want to know about the payment).

Note how the dialog slightly changes to reflect that dates are now meant as due dates.


  1. Mathew Patterson Feb 04, 2008

    I love these kinds of posts – both for the insight into the design process, and for the implicit admittance that great products are not just popped out of some brilliant persons head, directly into code, but are created through thought and effort.

  2. Alan Bristow Feb 04, 2008

    Respect. The cumulative effect of repeated dedication to detail is why excellent products are excellent. I love this level of care because I know it will end up helping me. Brilliant.

  3. Trevor Carty Feb 04, 2008

    Really nice to see that you guys do in fact mean simple when you say “simple”. And this kind of “simple” is just great of course.

    Keep up the amazing work!

  4. Leonardo Cassarani Feb 04, 2008

    As a beginner Cocoa programmer, I know how hard it is to design the perfect UI, and I believe you guys made it. I love how you explained the details of previous discarded ideas, and the whole process seemed terribly familiar. Great post, and great dialog!

  5. marlyse Feb 04, 2008

    great work and great outcome. The only thing I miss is the clue which weekday I have selected as I do Cardin for example 3x a week and I know it is Monday Wednesday and Saturday but I do not care which dates those days have.

  6. Iani Feb 04, 2008

    You write: ‘The user gets to choose ‚Äúdaily‚Äù, ‚Äúweekly‚Äù, ‚Äúmonthly‚Äù, ‚Äúyearly‚Äù, ‚Äúafter completion‚Äù, ‚Äúfor iCal events‚Äù first.’
    The “for iCal events” phrase is unclear to me. Do you mean “attached to an iCal event”? If yes, is there a better way of expressing it so it is clear right away?

    Otherwise, great work!

    Iannis Z.

  7. Rudy Feb 04, 2008

    You say so yourself: “…it is a good idea to have a look at what others in the field have done before.” Should you have looked at the calender application in the Psion PDA, you have have had the result you have reached now. Which also says it is a pitty the Psion is obsolete.

  8. Thomas Lund Feb 04, 2008

    Please please – also put in a “quarterly”. I have some tasks that need to be done for each quarter (tax related), and I am missing that in other solutions too.

  9. pauldwaite Feb 04, 2008

    Nice job. I’ve tried to design interfaces for recurrent date stuff too, it’s an nightmare.

  10. vandozza Feb 04, 2008

    @thomas: for quarterly items can’t you just make the task re-occur every 3 months? (from the screenshot above it seems that making a 3 month reoccuring task would be possible!)

    @ dev-team: nice job guys!

  11. Werner Feb 04, 2008

    @marlyse: You can do that by selecting “weekly” from the popup menu. The line below then changes to “every 1 week on Monday +”. By pressing + twice you get two additional lines where you can enter “Wednesday” and “Saturaday”, respectively.

    @Iani: if you choose “for iCal events”, you get to choose the calendar to take events from, e.g. “Birthdays”. Then you could have a recurring task called “Think about birthday present” which will be due every time one of your friends has his birthday. you could then set the task to be created, e.g. 7 days before.

    @Thomas: In addition to vandozza’s suggestion, this is also possible by first selecting “yearly”. The line below changes to “every 1 year on ___ +”, where you can enter, say “Jan 1″, then you press + three times and enter “Apr 1″, “Jul 1″, “Okt 1″, respectively.

  12. Kevin Feb 04, 2008

    Bravo. I especially love how you can set the interval at which the task is created when each has its own due date.

  13. Josh S. Feb 04, 2008

    Insightful post, thanks! I’m really looking forward to this feature, it will help make Things a reliable life management app.

    This is certainly the best todo app I’ve used so far, and I’ve used alot.

  14. Jorge Feb 04, 2008

    My iGTD is dying, I hope the wait won’t be too long! Start dates, repeating tasks, iCal sync – that’s all I need to switch now. The “F6 trick” to enter stuff in the inbox has become a habit too but I’m willing to live without it…

  15. Daniel Beck Feb 04, 2008

    This is so incredibly simple and powerful, I can’t wait to use it. I previously stated that support for recurring events isn’t that necessary, but I might need to change my views on this :-)

    By the way, it would be great if you guys fix the (known) broken stuff first, before working on another major feature once this is done.

  16. marlyse Feb 04, 2008

    thanks for the answer regarding weekdays. Happy camper I am! Next to that I have to say that the iCal option will be very useful and was abright idea to implement like this!

  17. Andrew G Feb 05, 2008

    It’s for the thought and effort like this that Things is gaining its reputation. I’ve two converts from iGTD already and more to come I hope.

    I’m really looking forward to this and sending you all good vibes…

  18. [...] Code writes about designing the user interface for creating repeating items in their upcoming task management application, Things: It seemed fine [...]

  19. Glenn Feb 05, 2008

    For the final item “Each copy has a due date”, which causes “And is created n days before due” to appear when checked, would it make more or less sense to change it to

    “Each copy is created n days before due” (or “before the event”)

    where the text field for n is disabled until the checkbox is checked?

    Thanks for sharing!

  20. [...] Things Blog : Cultured Code | Habemus Dialogum – We Have a Dialog (tags: mac things spooky post hig ui dialog design) [...]

  21. Alan Feb 05, 2008

    I really appreciate the effort you’ve put into this feature. (It’s great that you’ve included recurrences like “pay rent on last day of every month” which aren’t possible in OmniFocus.) You probably have the best recurrence engine on the Mac right now, and that’s something to be proud of.

  22. Matt Bland Feb 05, 2008

    Quarterly is an excellent suggestion I think.

    Also, why the word ‘yearly’ instead of ‘annually’? Is it an American thing? Or, is it that is just sounds friendlier?

  23. charles Feb 05, 2008

    I had been unsure about Things for it’s lack of recurrent tasks. Looks like you’ve scored a touchdown in the last quarter.
    I look forward to trying this new recurrent feature dialog.

    Q. Are you suggesting that with Things, I will be able to create a repeating iCal calendar event(?!), and not just a iCal todo item?


  24. vauha27 Feb 05, 2008


    My guess is that yearly is a direct translation of “jaehrlich” which is German and derives from Jahr (year in English) and actually translates into annually or yearly. Culturedcode is currently located in Germany and those guys seem all to be native Germans.

    Doing all this blogging and developing and communication in a foreign language shows what great and capable minds are working on Things. I am just lucky, that I am allowed to do my bug reports and feature requests in German. ;-)

  25. Jürgen Feb 05, 2008

    @Daniel Beck: We try to work on new features and broken stuff at the same time. The next update will also fix some bugs. The idea is to have both new as well as fixed stuff whenever possible. But your mileage may vary.

    @Glenn: Every checkbox lets the user make a binary decision. In our case it is whether he or she wants due dates. The text besides the checkbox ‚ÄúEach copy has a due date‚Äù describes exactly this decision. We didn’t want to show the textbox unless the user actually opted for due dates, since we rather only show controls when they are are needed.

    @charles: It is the other way round. Suppose you have entered birthdays in Address Book. In iCal there is an option to create a “Birthday” calendar from the Address Book data. You will be able to have Things create todo items for each event in this (or any other) calendar.

  26. [...] creators of the forthcoming OS X personal task manager, “Things” have written a great blog post describing¬† this phenomenon.¬† In the process of designing a single dialog box, they threw out [...]

  27. Jürgen Feb 05, 2008

    Funny that “yearly” is getting so much attention. It is one of the things we kept from iCal :). In iCal, open the inspector on an event. Click “Repeat” and choose “Custom…”. The “Frequency” popup contains “yearly” among all the other usual suspects.

  28. Adam Wishneusky Feb 06, 2008

    google calendar does it perfectly, IMHO. tons of options, you only see a few at a time

  29. Marco Feb 06, 2008

    Can’t wait to see the next beta!

    I check for updates twice a day… ;-)

  30. Felix Feb 06, 2008

    I love this post. Especially the mockups. Really give us the experience about the building process of one of the greatest application for daily use Mac.

    Good luck guys!

  31. [...] bumped into this article today from the creator of Things, a Getting Things Done (GTD) [...]

  32. Naseer Khan Feb 06, 2008

    Like the others, I’m thankful for insight into your design process. And this reinforces my opinion that I did the right thing by waiting for Things. So, when we do we get to see this next version that squashes bugs and delivers this great new function…???

    Since Things is one of the apps that running 100% of the time on my Mac, and I’m in it countless times a day, I guess it creates more angst about The Next Big Thing(s)… :-) If you were writing code that was used once a month, maybe there’d be less pressure… ;-)

  33. SSteve Feb 06, 2008

    How do you schedule election day (i.e. the Tuesday after the first Monday in November)?

  34. Philip Morton Feb 07, 2008

    This looks extremely helpful. Can’t wait until the next version comes out!

  35. Nico Hoffmann Feb 07, 2008

    @SSteve: Wouldn’T this be the first Tuesday in November?!?

  36. vauha27 Feb 07, 2008


    Monday 1st
    Tuesday 2nd

    Monday 31st
    Tuesday 1st
    Monday 7th
    Tuesday 8th

    The first tuesday in a month is not necessarily the tuesday after the first monday. See above

  37. Anonymous Feb 08, 2008

    3. WHEN? ??? :)

  38. caruso_g Feb 08, 2008

    I know it could be seem to much, but may you please add hourly recursion?
    If I need to do/remeber/remind something three times a day how can I do? Please!
    Thanks anyway, you really rock!
    A way better then your competitors.

  39. Daniel Beck Feb 09, 2008

    caruso: So far, Things does not support that level of granularity. I don’t know how it looks like under the hood, but without hours at the task level (i.e. due time etc), I don’t think hourly recurrence would make a lot of sense, and might require a great deal of work by the creators. Otherwise, maybe don’t add a recurrence rule and just never check off that one task when you finish? This’ll remind you all the time, which is probably the closest to three times a day. Have you tried using an alarm clock (your computer or a real one), or combining cronjobs with Growl notifications?

  40. Iani Feb 11, 2008

    Your solution is very very elegant. Here is a thought and suggestion from my experience with calendars. The “exceptions: feature. It is a feature that I miss a lot because the lack of it makes me have to enter all my classes and regular meetings at least twice over, if not more. To explain:

    OK, so lets say I have a busy academic schedule each semester with 8 classes, 2 seminar meetings, 3 faculty meetings and 1 research meeting, all of which occur regularly in weekly, biweekly intervals etc etc. (yes, it is Hell, I know). Let’s say also I want to publish some of these, which are my responsibility, in some web calendar or to-do list. The point is, most or all of them will have EXCEPTIONS. Because of holidays, or being away for a conference, etc. So it is a total bummer to have to enter all of these twice over, for each exception. With winter holidays and easter holidays interrupting the semester, this is no fun for calendar input. Especially when an exception happens unexpectedly (having the cold or something urgent turns up). There are some calendars that allow you to just click on the weeks or days which are excepted for a recurring event (I do not remember which). That is a feature I really miss. I realize this may be hairy to implement in your current repeat dialog, which I like a lot, but maybe with your creativity you will find a way. That would be totally cool.

    As a suggestion how you might do that: You already have a “Next” line in your —Dialogum—, that shows one field for selecting the next date plus a number of possible next dates. You could use the possible next dates information to create a pop up menu, or list, or an advance-by-tab mechanism to go to a specific date and then give the option to mark a particular repetion as “cancelled” or “excepted” or a choice of such characterizations. I realize this may be bordering on featuritis, but I do believe that being able to mark exceptions brings the list closer to the ways thing work in reality.
    Iannis Zannos

    Iannis Zannos

  41. Kirsten Feb 12, 2008

    First of all great website and great contents.
    I admit your tools, they are really simpel and practical.

    Thanks Kirsten | Consulting | Creation

  42. Naseer Khan Feb 13, 2008

    Are you taking advantage of the late snows this season and assuming that Spring 2008 will be delayed…??? ;-)

    I think we’re all hoping to see incremental improvements to the code and to participate by giving feedback, if there’s any relevant to the current state…

  43. vauha27 Feb 13, 2008

    spring is from march 15 to june 14. way to go.

  44. mbywater Feb 14, 2008

    “How do you schedule election day (i.e. the Tuesday after the first Monday in November)?”

    Um… type in what they said on TV?

    Seriously… some things are better done with pencil and paper. Isn’t it the urge to automate every single case, however complex or infrequent, that leads to bloatware? (How many times have you stumbled on something in Micro$oft Wurd & thought “Merciful lord, who on EARTH would ever want to do THAT?”)

  45. Daniel Beck Feb 14, 2008

    Iannis Zannos:
    Why don’t you use iCal for events? If iCal doesn’t meet your calendaring needs, why should an app with a different focus? More like crossing the border to featuritis, since the power of Things is its simplicity. But that’s just my opinion.
    I thought very briefly about moving to Things with events (lectures, meetings etc) myself, but decided that a task management app shouldn’t be abused as calendar. I use iCal with the incredibly useful iCalViewer, and it works great.

  46. David Feb 14, 2008

    We would like to see the option to automatically set recurring events for “Today” as they are created. Is that a planned feature/option?

  47. David Feb 14, 2008

    Duh. Nevermind. I see the “Today” option is already covered. Sorry. More caffeine!

  48. RichardM Feb 15, 2008

    @Jorge – In Prefs – General, click on box next to the “Enable hotkey for Quick Entry Panel” and press F6. Now F6 works the same as iGTD

    Great App guys – can’t wait for 1.0.

  49. Case Larsen Feb 18, 2008

    i respect your dialog choices — preciseness, but an option to not impose a due date.

    Does that mean that the task is recreated periodically, but no specific due date is assigned, so it shows up in the “next” focus. I assume multiple copies don’t get created if you just really don’t complete it soon enough.

    My preference (with paper planning) was to use something that visualized a timeline rather than a calendar based mechanism since i didn’t need exactness of date but rather a feeling of adequate attention over time.


    i would love for this analog method to inspire a digital implementation since right now, i’ve replaced all my paper based task tracking using Things except for this particular aspect.

  50. David Schloss Feb 18, 2008

    What a great walkthrough of a process.

    Is there going to be a way to set a TIME of both a dated item and a recurring process? Because many recurring processes have to happen for us at a specific time. For example our payroll has to be called in between 4pm and 5pm every two weeks. Having a reminder for the date doesn’t help trigger the person to do the payroll at exactly the right time, so they have to go to ical to do a time based reminder.

  51. Mario Braun Feb 19, 2008

    Could you please try to make all your dialogues accesible by keyword as well?

    In the current public version for example, I cannot access the mini calender for the due date by keyboard, only by mouse.

  52. Jürgen Feb 19, 2008

    @Case Larsen: The “xx days/weeks etc. after previous todo is completed” option might be for you. Visualization of a timeline is indeed interesting. In particular for people who use dates a lot (I don’t). It might be nice addition to Things, provided it is implemented in a beautiful, simple, and unobtrusive/optional way.

    @David Schloss: Hourly based reminders will not come soon. Right now the workflow of Things is based on days. Allowing hours would open up a completely new chapter. It might be useful though. But before diving into it we are certainly going to have a careful look at use cases o find out how a meaningful implementation might look like. After all, we don’t want to simply copy the existing functionality in iCal.

    @Mario Braun: Sure, simply an oversight.

  53. [...] them, and give us detailed information about what is happening on their side. One great example is this blog post in which they describe the evolution of their “recurring task” dialog, their design [...]

  54. ununcarne Feb 24, 2008

    I am necessary wish to find