When I hear someone talk about how nice it would be to have a companion iPhone or Android app to a website, I want to know why. There are two reasons, and I think that one is more valid than the other:

  1. They want to provide the customer with a better user experience.
  2. They think that if the user has their app installed they’ll be more likely to use their product. Thus, it’s a marketing channel.

I don’t think reason #2 holds up to scrutiny. First, I have 5 pages of iPhone apps, but two of them, Tweetie and Dan Bricklin’s Note Taker, account for more than 90% of my app usage. Many of them I haven’t touched since installing. Second, after the initial flurry of installing and trying out apps, I rarely install a new app because I don’t need more apps that I don’t use.

Now, I’m not a typical user, but I’m inclined to think that most casual iPhone users either don’t install many apps, don’t use many of their apps, or both.

Another angle, though, is that to me, it sounds kind of arrogant to think that just because you have your app on someone’s phone they’re likely to use it. That’s like the marketer who thinks that if they get a nice commercial on TV, sales will roll in, even if the product isn’t remarkable. I think what Seth Godin says in Purple Cow is right: you have to be remarkable to be noticed. I don’t think you’ll be noticed just because your icon is on peoples’ iPhones.

I think some people are attached to this idea, though, so much so that they’ll argue to project managers or developers that it will provide a better user experience, and express doubt over the ability of alternatives, like HTML 5 mobile sites, to provide a good user experience.

If you do any native iPhone development, check out ASIHttpRequest. You’ll be glad you did. I tried a couple of frameworks, Objective Resource and HttpRiot before using this library. I found that using a library for making HTTP requests feels much more natural to me than using a framework. ASIHttpRequest reminds me of jQuery’s ajax() function.

Perhaps when I’m working with a large number of models I’ll want something like Objective Resource or HttpRiot. If I do, I’ll consider changing one of them to be an interface to ASIHttpRequest, which builds upon lower-level APIs to be more powerful than NSUrlRequest.