March 7th, 2008

This is not about the iPhone SDK…

… it is about whether listening to users makes sense. Steve Jobs in a Fortune interview recently said: “So you can’t go out and ask people, you know, what the next big [thing.] There’s a great quote by Henry Ford, right? He said, ‘If I’d have asked my customers what they wanted, they would have told me “A faster horse.” ‘ ”

On the iPhone special event, however, Phil Schiller said something different. “… there are a lot of things, these and others, that enterprise customers have told us… So we have been hard at work listening to them, compiling lists, trying to understand, what do they really want…”

Of course both Jobs and Schiller know that there are times when you listen to users and times you better not. And the interesting thing is, even when developers don’t listen, they might do it for the best of their users. But how is that?

By all means developers need to follow their vision without asking anybody. They need to think out of the box and innovate. How else could they surprise and ultimately delight?

One of the main responsibilities of a developer is to keep guard over the gestalt of a program. It is all too easy to let your application burst into a universe of hardly connected little features. We have all seen it happen. But it is equally easy to ignore your customers’ needs and to embark on a journey where nobody is following you.

It is not about listening or not, it is about what to do with all the things you have learned from listening. And that is integration. The best feature is worth nothing when not integrated properly. When we read a feature request, we don’t think about doing it or not doing it. After all, if software development is not about satisfying users, then what is it? We are thinking about how we could nicely integrate it with the rest of the application without diluting its identity.

So let us worry about the identity and gestalt of Things. Let us surprise you every once in while, but for everything else we are all ears.

And why didn’t we write about the iPhone SDK? Because it is covered quite well elsewhere.

Posted by Jürgen

February 22nd, 2008

Forum’s Ready

It was missing. Users wanted it. And the “Blog” and “Wiki” buttons really needed another companion: today we added a Forums section to our Things pages.

The user forums are based on the open source Phorum software. We took some time to create a suitable template however. Forums around the internet have a tendency to look cluttered, which is why we tried to cut down everything to the essentials. One of the key design features is that, even when only briefly glancing, the user always knows which level of the hierarchy he or she is looking at:

  • the list of all forums,
  • the topic list of a selected forum, or
  • the list of posts of a selected topic.

These three levels have a distinct look and feel without compromising the visual unity of the user forums as a whole. We also carefully made sure that the forums would fit in well with blog and wiki. We even redesigned the comments section of the blog to use the same visual approach as posts do in the forum.

Not every aspect is completely finished. In particular, users will need to create a new account for the forums even if they already have a Wiki account. The software for the Wiki (MediaWiki) and the Forums (Phorum) is completely different and it would have taken us much more time to write unified user management for both. We hope to be able to do it some time down the road. But the level of refinement should be more than sufficient for discussing everything Things.

Now who will be the one to create the first topic?

Posted by Jürgen

February 4th, 2008

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:

blog_repeatingtasks_old.jpg

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:

blog_repeatingtasks_dialogposter.jpg

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:

blog_repeatingtasks_createfinal.jpg

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).

blog_repeatingtasks_duefinal.jpg

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

Posted by Chris, Jürgen, and Werner

January 25th, 2008

Don’t follow us on Twitter

It was German web designer extraordinaire Manuela Hoffmann who suggested we might publish status updates on Twitter. And a point she has.

Posting blog entries and following the comments always takes focus away from actually evolving Things itself. Often the question is: shall we continue implementing that user request or shall we rather explain what we are doing? Very simple you might say: do both!

Tweets to the rescue: Writing a line or two shouldn’t be that distracting or time consuming, should it? We decided to give it a try. All credits to Manuela if it works, we take the blame if it doesn’t :)

Oh yes, why shouldn’t you follow us on twitter? Well, why would you want to be frequently updated with boring details about writing code?

twitter.com/culturedcode

Tip: Tweets will be signed, so you can see who wrote them. Chris (ck), Jürgen (js), Oli (om), Werner (wj).

Posted by Jürgen

January 24th, 2008

The best recurring tasks we’ve ever made

22 days since the last blog post — how could that happen? Well, let’s face it, we got a bit carried away with working on Things. That both our coders got sick a week ago certainly didn’t help. Neither did those hard to track bugs in Tiger that required a workaround…

But we promise to be good boys now! Oh, and thanks for all the nice comments! Expect to find more specific replies here soon.

Right now we are working very hard to integrate recurring tasks into Things. And not just any recurring tasks…

Thank you all for your great support.

Posted by Werner

January 2nd, 2008

0.8.5 - Quick Filing and Due Items That Move

The Quick Entry dialog now allows to file new todos under existing projects or areas of responsibility. Just open the dialog with your favorite shortcut (-> Preferences) and select a project or area from the “Where” menu.

We have introduced new keyboard shortcuts that are also useful in the Quick Entry dialog. Hold down ⌘1, ⌘2,… to select “Today”, “Next”, etc. from the “Where” menu.

The ⌘1, ⌘2,… shortcuts can also be used in todo lists (see the Todos > Move To menu). Please note that previously these shortcuts have been used to switch to different lists. To go to the Inbox, Today, Next,… lists use ⌘⌥0, ⌘⌥1, ⌘⌥2, etc. (see the View > Go To menu).

Items due today are now automatically moved to the Today list. This is the default behavior, but it can be turned off in Preferences.

Undo/Redo has been completely revised and works much more reliable now. Not every operation can be undone yet, but we will continue to improve the situation in future releases.

Further improvements include:

  • Bug fixes and performance improvements
  • Several visual improvements for Leopard users
  • Changed style for displaying projects and areas in lists.
  • “Check Spelling While Typing” now remembers setting across launches.
  • Larger drop target for todos dragged to the bottom of a list.
  • Double clicking into the empty space below a list now creates a new todo.
  • Toolbar button and action menu item for emptying the trash.
  • Hot key for Quick Entry dialog now works as a toggle.

Posted by Jürgen

December 23rd, 2007

Recovering from Apple’s Core Data Bug

So far only very few users actually did run into the Apple (Tiger-only) Core Data bug we mentioned in the previous post. It is also very easy to help. We encourage everyone who cannot open his or her Things library to contact us.

To make this easier, we added a dialog in version 0.8.4 (Release Notes) to assist users in the process. This dialog is displayed automatically should there be a problem with the library.

Posted by Jürgen

December 22nd, 2007

Version 0.8.3

By now, we have sent out invites to more than 13,000 people. And everyone who purchased the recent MacUpdate bundle also got access to Things. With so many new users, it is no surprise that new bugs were discovered. This release fixes the most important ones and greatly increases stability. For more details, see the Release Notes.

User reports indicate some potential crashes related to Undo/Redo. We therefore temporarily disabled undo functionality until we had a chance to get a clear picture of what is going on.

We would like to thank Dan, Grant, and Alex for helping us to discover one of the most serious bugs we ever encountered in one of Apple’s frameworks (Core Data XML Store). Under Tiger, notes that contained hashes (#) were garbled when Things was closed and subsequently reopened. This could even lead to archives becoming inaccessible. Apple already fixed this bug in Leopard and we have included a workaround in 0.8.3 so that Tiger users are now safe as well.

Posted by Werner

December 16th, 2007

Version 0.8.2

One of the pleasant surprises of the previous 0.8.1 release, from our point of view, was the extend to which the integrated feedback dialog was adopted. Already 4 days after the release, I cannot imagine how we ever managed without it.

We fixed most of the new bugs introduced in 0.8.1 and some older ones as well. In total, 9 bugs were fixed and 4 new features added.

The various lists like Inbox, Today, Next, … are now accessible via the keyboard shortcuts ⌘0, ⌘1, ⌘2, …. The other new features are mostly targeted to users new to Things:

  • For each list, we added brief explanations which are only displayed when the corresponding lists are empty. Of course, there is also a close button to hide them permanently. The close button is displayed when the mouse is over the boxes containing the explanations.
  • We added a start-up screen that is displayed when Things is opened for the first time. Later it can be invoked from the Help menu, which now also contains an item which opens the Things wiki. The start-up screen contains a graphical introduction that will be most helpful for user that hadn’t a chance to take a closer look at our web site.
  • The current version has some limitations when it comes to drag and drop:

    a) Projects cannot be reordered in the sidebar (will be fixed soon).
    b) To-dos in active projects cannot be postponed or put on hold.

    Interestingly perhaps, we deliberately introduced the latter limitation to make Things easier to understand and use. However, we are much less sure about it now and are indeed working on improvements. That might take us a while, however, which is why Things now displays feedback when the user attempts such operations and explains that these limitations are acknowledged as such and will be fixed.

A complete list of improvements is in the Release Notes.

Posted by Jürgen

December 11th, 2007

Version 0.8.1

The new release contains 21 improvements and bug fixes. More detailed information about the new features can be found in the articles below:

Posted by Jürgen