Monthly Archives: February 2009

Ugly reminders

In my “last post about family pricing”:, I mentioned that I modified my PayPal scripts for backend order processing to support family packs, but I left out that the whole system is a hack. A hack that processes a nice chunk of money, but a hack nonetheless. Hard-coded PayPal buttons and coupons, PHP that would make even newbie web developers cringe, too few lines of code to really be taken seriously.

I refactored it a few months ago, but kept some ugliness in there to remind myself that I should move to a “mature store solution”: Sometimes we build systems that are flawed from the start, and it’s wasted effort to invest time into something that will be replaced. Instead, let the thing stand out like a sore thumb.

It’s a complement to doing things simply and taking shortcuts even when it’s tempting to overengineer and build the perfect system.

This ugliness trick works for other things too. For example, the Wii Transfer product page is /software/wiitransfer/ instead of just /wiitransfer. I gave this URL more thought and second-guessing than it deserved, and every time I type /software/ or see the link I cringe a little. But I did it for a purpose: one day I hope to sell or promote things other than software. For example, when I registered I was working on an independent animated film which I planned to sell on DVD direct to customers. (I’ve had that shelved for years now, though, as I’ve recently discovered there are only 24 hours in a day.)

Others will say that you shouldn’t mix such different projects under the same brand, and that makes a lot of sense. But I also know it to be true that if you want to build a strong blog following, you should stick to one subject and become a respected voice in that field, and I didn’t do that either. I made a conscious decision with my personal blog to keep it loose and cover several different things that I am passionate about, and because of that I’ll likely never have tens of thousands of readers as other popular Mac development blogs have.

So maybe one day Riverfold will sell something other than Mac software. When that time comes, it won’t matter what the URLs are, but until then, the /software/ URL won’t let me ever forget that I have other things in mind.

Defending Safari 4 tabs

The first reaction most people had to Safari 4 — especially the new tabs interface — was negative. I’m here to defend it.

But first, let’s get the mistakes out of the way, because they are substantial. Safari 4 tabs have several new usability problems:

Clicks to close or drag in inactive tabs should not be allowed. As Daniel Jalkut pointed out on Twitter, these “landmines” decrease the available space to click when dragging a window. And the problem only gets worse as you add more tabs. It requires too much thinking before being able to drag a window. (You can bet Apple has research that shows most people only have 1 or 2 tabs open at a time, but nevertheless you are going to sometimes have a bunch.)

Click-through should not be enabled. Same point as above, but don’t allow closing tabs or clicking the drag handle when Safari is not the frontmost app. John Gruber has written extensively on this issue, and this post from 2003 is a good place to start.

Title bar font is different than every other app. I understand this decision, but it’s unnecessary for small numbers of tabs. If you have 1 or 2 or even 3 tabs open, there’s no reason not to use the full font size so that Safari’s title bar is consistent with other apps. It’s distracting.

Too subtle. Because nothing in the content area of the window changes, it’s easy to miss the tabs. They are in a more prominent place but somehow fade into the background. I’m not sure whether this is a good or bad thing yet, but I’m leaning toward bad.

There are other largely aesthetic complaints about the new tabs, such as how the default wider tabs look odd compared to previous versions of Safari, but a lot of that is just unfamiliarity and doesn’t point to a specific usability problem.

So why do I like what Apple is doing here? Because I’m hopeful that this is the first experiment to bringing system-provided tabs to applications.

Here’s what I wrote about this issue in 2005:

“Instead, Apple should have built upon Exposé to offer system-wide window grouping state, so that in any document-based application the user is in control of how windows are tabbed. Actions like dragging to rearrange tabs could be implemented once and work consistently across all applications.”

In the last 4 years the problem has only gotten worse. Developers are rolling their own tab solutions and there is no consistent behavior or keyboard shortcuts that I have seen. Worse, coding fully-featured tabs with the ability to drag windows in and out of a tab group is very difficult, and most apps don’t go that far.

The Safari 4 tabs are conceptually the right way to go. It’s not “tabs” at all. Instead, think of it as an efficient way to dock multiple windows together.

Getting the tabs out of the content area of the window is also the first real step to making this available to other developers. While I don’t think you should stamp this on to all applications, certain classes of document-based applications could “opt-in” to this new system and get it mostly for free, with consistent UI and behavior provided by the system. Developers who had special requirements or wanted a custom tab look-and-feel could continue to build their own tabs without worry that their UI would be interfered with.

I have no idea if this is the direction Apple is going in, but the Safari 4 design makes me think that at least someone at Apple has this in the back of their head.


While not a major blockbuster, Coraline seems to be quietly doing pretty well. It has recouped about half of its production costs, and according to “Box Office Mojo”: actually added a few theaters in its second week of release.

One of the artist blogs I follow is by Matt Williames. I didn’t realize “until he posted about it”: that he worked on facial expressions for the film:

“A couple years ago I got a call from this new studio called ‘Laika’. They were doing a new Henry Selick film called Coraline and needed someone to design and animate the facial expressions (including design mouth shapes for dialogue) for all the characters in the film. And they wanted it ALL to be 2D upfront (it would later be modeling in the computer then molds would be made from that). It was a sweet gig– I lived in Portland for 6 weeks, all expenses paid and was scared to death every day of failing miserably.”

Cartoon Brew also links to a collection of “YouTube clips from an artists panel”: about Coraline. It’s a shame the “art of” book seems so incomplete.

I thoroughly enjoyed the movie. A packed theater and applause when the credits rolled only added to my impression that this movie is something special that is being carried by word of mouth.

Better software, less support

A few months ago “Ars carried a story”: about Apple canceling a call center in Colorado. This part stuck out to me:

“Somewhat surprisingly, the iPhone 2.1 update was also named as one of the reasons for the cancellation. The software update has apparently been so successful at resolving iPhone 3G problems that its release has caused a noticeable drop in support calls.”

In this case it was just bug fixes, but it reminded me of “Getting Real”: Make software easy to use and simple and then there are fewer things that can break and users are less confused. I have been obsessed with following this advice lately. Some of the limitations I’ve put in a couple recent projects:

  • No preferences (for Mac, no prefs window; for web, no options or settings screen).

  • Single toolbar (no status bar or need to look in multiple places, e.g. both the top and bottom of the window).

  • Minimal toolbar buttons (only the absolute basics are exposed outside of menus).

  • Opinionated defaults (no customization, similar to others above).

On a few occasions this has hurt my ability to add features, but on others it forces me to see a user interface problem from a new angle, something I wouldn’t have done if I hadn’t had these limits to work in.

Limiting features in an app does not come naturally to me, but the more I embrace it, the more value I see in it. I “tweeted a bonus side effect”: to this approach last week: “Maybe another reason why simple software succeeds: customers see in it all the possible features to come, implemented just right for them.”

Five stages of podcasting

“Daniel”: and I have now recorded 13 episodes of Core Intuition. Each time I go through these stages of denial and acceptance:

During recording. Great! This will be our best show yet.

Hours later. I wish I had said “X” instead of “Y”.

The next day. Disappointed. Maybe I won’t even bother to edit it.

Listening. Hey, this isn’t bad stuff.

Editing. Pretty good! We made some good points, had a few laughs. Success!

Our latest episode is out now on the “Core Intuition web site”: We talk about getting started, making mistakes, business, pushing to 1.0, and the upcoming “NSConference”:

A special thank you to our listeners. The feedback is very encouraging.