Things Are Happening

January 31st, 2008

I’ve been so busy working on the next release of MarsEdit that I haven’t had a lot of time to do much else, aside from my normal second job as head of customer support!

But I’ve been seeing a lot of exciting things happening, and I want to help spread the word, along with my modest commentary. This is going to sound sort of like an annual holiday letter. And in a way, it is one, even if it only covers the events of the past few weeks, and even if it’s not about my family. Well, it’s about my indie development family.

Gus Mueller, developer of VoodooPad and more recently Acorn, has reached a milestone in the development of his business, Flying Meat. He just announced that he has hired his first part-time employee. Congratulations, Gus. I’m sooooooo jealous.

Chris Liscio quit his full-time, stable job, and took a leap into the indie pool. Chris is the author of the Apple Design Award Runner-Up application Fuzzmeasure Pro, apparently a must-have for audio acoustic analysis. Lots of luck to Chris moving forward. Here’s to a break-even first year!

Rogue Amoeba also knows a thing or two about building impressive audio applications, and they’ve just updated Nicecast with Leopard support. Nicecast makes it easy, no scratch that, makes it possible to transmit streaming audio from your Mac to just about anywhere in the world.

Jon Trainer, one of my developer buddies from here in the greater Boston area, has just released a significant update to his LicenseKeeper software. The application is dedicated to keeping track of all of your software registration codes. Which will need organizing once you’ve added all these killer indie products to your virtual shelf!

IconFactory has been hard at work with partners Panic and ARTIS Software. A few weeks ago they came out with an incredible update to CandyBar, designed to both organize your icon collection, and facilitate replacement of system icons and dock graphics at your discretion. Yesterday they struck again again with an update to xScope, an incredibly intuitive and powerful on-screen measurement and design assistant.

Ian Baird released a beta and is inching closer to a full 1.0 release of his brand-new application, Changes. Somebody needed to tackle the problem of “building a better file comparison app” and it looks like Ian decided it might as well be him. I consider myself something of a god-father to this product, because I suggested the incredibly perfect name.

Oh, and Red Sweater Software will also be releasing an updated product soon. MarsEdit 2.1 is a modest update that addresses a few very common feature requests. Coming very soon to a website near you. This one!

Designing For The First Launch

January 26th, 2008

Brent Simmons writes about designing the first-launch experience for NetNewsWire 3.1. I find his reasoning especially interesting because MarsEdit also has a strong incentive to provide users with a smooth first-launch experience.

One of the points that resonates most for me is Brent’s point about friction:

Present as little friction as possible—don’t overwhelm the new user so that he quits without trying the app. Ask for just the minimum required to make an account: username and password.

I think about friction a lot, both when designing features into my products, and when thinking about how to market them. If you’re an indie software developer and you get me talking for more than about 30 seconds about business, I’ll invetiably start talking about the first-launch experience and how it relates to sales. I call it the “run away screaming” factor.

Every product has shortcomings that will cause some users to run away screaming. The best we can do is try, with each iteration, to make fewer and fewer people do so. If 100 people download your product, and 90 of them run away screaming after launching it once, then you’ve only got a chance of selling to 10 of them. We can assume that statistically, some fixed percentage of the people who remain will end up buying. So cut the flee factor down to 80 and you’ve just doubled your sales.

The easiest way to make a user run away screaming from MarsEdit would be to require that they perform some tedious and complicated setup process in order to get up and running. The truth is, most of the time MarsEdit can figure out how to configure everything just by peeking at your blog’s home page. So I try to alleviate that fear with MarsEdit’s very simple first-launch dialog:

The first screen is intended to be inviting to both established bloggers and curious users who just happened to download a copy of the app before they’ve even started blogging.

For users who already have a blog, they proceed to the second screen:

By the time users have stopped laughing with joy at how easy the process was, MarsEdit is asking them for their user name and password, and proceeds to download the last several posts from their weblog.

Don’t believe me that it’s so simple? Go ahead, I dare you to try it!

NSURLConnection Crashing Epidemic

January 24th, 2008

I’m proud to say that all of my apps are pretty solid. They rarely crash. At least, I assume they rarely crash, because I very rarely receive crash reports from users. When I do, it’s usually from beta testers before the application has been shared with the general public.

But after Apple released 10.4.11, I started receiving crash reports at an accelerated pace. The log is the same in every instance, and culminates in what appears to be a threaded NSURLConnection caching operation:

-[NSURLConnection(NSURLConnectionInternal) 
	_didFinishReturnCachedResponse:]
-[NSHTTPURLProtocol startLoading]
-[NSURLConnection(NSURLConnectionInternal)
	_performOriginLoad]

Now it so happens that WebKit is the one crashing in many of these cases, but I suspect the problem is more widespread than that. In any case, the problem is definitely more widespread than just MarsEdit. Searching Google reveals a number of similar results, from a variety of applications, including Apple’s own.

If you’re a developer and your application uses WebKit or NSURLConnection, chances are you’ve noticed an increase in crash reports, too. Always on 10.4.11, always involving NSURLConnection. If you’re a user running 10.4.11, chances are you’ve noticed that network-enabled applications seem to be a bit more flakey and crash-prone.

The fact that the bug seems to be fixed in Leopard makes me think that this is a bug whose source was identified and fixed. Now the question is, will Apple ever ship a 10.4.12 containing a fix? Or will those users be stuck in crash-ville forever?

Apple needs to get this fixed. For these poor 10.4.11 users who got stuck with a buggy URL loader, and for us poor developers who have to gently explain to them that it’s out of our control. I have to assume there’s already a bug reported against this, but better safe than sorry, I wrote up another one: Radar #5704773.

So why I am I writing this blog entry? Because I want other developers who read my blog or who find it by Google search to know that they’re not crazy. And I want users who run into this crash to please remember to send the crash report to Apple. They need to know that this is a serious issue that is impacting you and the apps you use.

NetNewsWire As Syndication Router

January 23rd, 2008

My friend Brent Simmons, developer of the amazing NetNewsWire client, which I think I neglected to mention, but you probably learned anyway, turned free eariler this month, has written up a nice summary of the ways in which NetNewsWire serves as a router for incoming RSS feeds.

I’m especially struck by this analysis because the metaphor is very much how I see an application like NetNewsWire evolving into the future. I use the application myself for all my “regular feeds,” but I also find myself using it as a “copy/paste” stopover point, for instance, when I want to subscribe to a podcast in iTunes. I click the RSS feed URL on some podcast home page, and it pops up in NetNewsWire, where I copy and cancel the “add feed” dialog.

Taking the “RSS router” idea to the next level, I’d like to see NetNewsWire able to handle incoming RSS subscriptions transparently and without intervention. For instance, what if clicking on an RSS feed that contains a bunch of audio files as cargo, could be automatically determined by NetNewsWire, and it forwards the feed on to iTunes for me?

As the world becomes more and more syndicated, I need something smart to serve as the “post office” for RSS delivery to my Mac. And NetNewsWire is the perfect candidate.