We are really excited to announce that Kayak is now available for your iPhone and iPod in the Apple App Store. We’re selling it for the pretty much the best price possible: FREE.
That’s the most important part of this post. We have an iPhone app, if you have an iPhone and you travel, you should download it. The rest of this article is the story of how we made the iPhone app. If you are not a software developer, the intense boredom rays emitted from the information herein is likely to melt your temporal lobe. You’ll wake up in two or three hours with a face full of keyboard and a keyboard full of drool.
OK, now that all the “norms” have gone away, let’s get to it.
First, some background: a wicked long time ago, back in 2004, my old boss called me up and said “Hey, we’re starting a travel web site, come to Harvard Square for a meeting.” And I said, “That’s boring there are already like 12 travel web sites. And it’s raining and I don’t want to drive through Alewife.” And he said “Come on, it’s a good idea.” and I said “OK.” I think about four hours later I was signed up. Over the next few weeks, we put together a technology plan and team. At the time (remember, this was way, way long ago in 2004) I was really getting into Mac OS X, because for a Unix nerd like me, it was a dream come true. A solid Unix/BSD/Mach kernel, no worrying about configuring drivers, and a nice GUI. So one of the first things we decided to do was to decide to develop Kayak on Mac OS X. It took quite a bit of convincing my boss (Paul, our cofounder and CTO) and our VP of engineering (the other Paul), but they bought it. I’d worked with them both for about 13 years, on and off. I was even pushing that we should deploy the web site on Apple Xserves running OS X. Luckily, Paul #1 stopped me. That would have been a big problem. To make a short anecdote even longer, development on Mac has been a pretty good win for us, though as of today about half of the Kayak developers have gone over to using Ubuntu Linux.
That was a really long way of getting to the point that I’m kind of an Apple nut. When the iPhone came out, I bought one the second day it was available. (No, I didn’t wait in a long line. In fact there was no line at all.) When the iPhone developer program was announced, I was really excited to get started.
We applied to be part of the initial roll-out of iPhone developers, but so did 500 million other companies. It took us quite a while to get accepted into the iPhone Developer program, but it worked out for the better. While we had a lot of experience developing web applications using Mac OS X, nobody at Kayak had ever worked on a Mac application, and there was a lot to learn: Objective C, Cocoa, and then the whole touch platform SDK. It was good to have some time to get up to speed, and to see what other developers did that was successful, or not.
I spent about three solid weeks getting deep into iPhone SDK and Xcode. It became really clear to me that I couldn’t do our App as a little side project. I had a my main job to do, which consists of many small projects, each of which needs tiny amounts of attention at any given time. About this time, we were lucky to find Christian, who had just returned from working in Rwanda on a free medical record system for developing countries called OpenMRS. He had never developed a Mac app, but was enthusiastic about learning the technology, and came up to speed very quickly.
While he was soaking up the wonders of Objective C, I sketched out what the app should look like and do. I like to use a CMM level 5 design process for new products. Well, no, not really. I just like to scribble messy pictures in pencil on scrap paper and then start coding. For the iPhone App, I wanted to be real classy, so I used paper with our logo on it.

As you can see, the launching screen was a really hard design problem. The key point of this screen is to tell the user, “Yes, you have launched the Kayak Application. Soon everything will be more awesome than you can believe.” Here’s the actual welcome screen:

The main search form on the home screen was quite a bit harder. I wanted to get something incredibly clean, obvious and nice looking. That combination is way beyond my capabilities as a product designer, so I scribbled “form TBD” and moved on. It turned out to be the hardest screen to get right, and we went through at least 5 or 6 complete redesigns. Luckily, Christian was very comfortable with scrapping lots of hard work and starting over. And over.
The most interesting things about this part of the design are the bottom tabs and the note “all pages are sticky between launches.” In regard to the latter, it’s a basic rule of iPhone apps that you’re going to get blown out of the water by a phone call or whatever, and you want to get the user back to whatever they were working on straight away. For the former, we knew from the start that we wanted icons, and generally like the ones we ended up with. But I’m no artist and I didn’t want to get hung up with that detail, so I just used FHBIR as the tab indicators. (I’m not telling you what “I” and “R” mean, those are top secret future functionality, and got dropped from the 1.0 for all the standard reasons that features get dropped from a 1.0 version: focus, resources, time, quality.)
Here is what we eventually came up with for the home screen. The form fields are patterned after fields that appear on in preferences. They just looked the cleanest, compared to a more webby label and text box style UI.
The flight results interaction was a lot more clear to us from the beginning. The navigation controller UI has been very clearly defined by Apple and pretty much every good app out there uses it in a very similar way. We wanted to stick to that model. We struggled the most with how to cram sorting and filtering onto the tiny screen. Here’s what I had sketched out at the very start:

As you can see, the sorting and filtering turned out quite a bit differently:
The notion of Cheap/Short/Soon as the main sorter, and pushing the stops, airlines and airports filters off to a secondary screen came from our notional use case: you are at the airport, and you need to get home or get to the next city right now. You probably have one of three things as you main constraint: money (obvious), time to get out of this airport (weather moving in), or time to get to your destination (to make a meeting or a soccer game.)
We talked about this use case so much, we came up with the airline phone number directory as a sort of bonus last minute feature. It’s kind of an oddity. I mean, you could enter all the airlines you are likely to fly in your address book. Or you could look them up in Google. However, keep pushing on that use case: you have no flight home, a storm is moving in, flights are being canceled, everybody in that airport is trying to get one of the remaining seats out of there. The airport wifi might require a credit card; EDGE or 3G coverage might be very weak or non-existent. You are standing there sweating, trying to beat everybody else to the reservations number for Jet Blue. If it’s baked into an iPhone app than can launch and dial in 10 seconds, you are going to be the winner.
Here’s the airline dialer:

If you have a friend with an iPhone, have a race. You put the Kayak app on your phone. Your friend should not have it. Have your friend name an airline. It should be one that neither she nor you know the number of. Start with your phones in your pocket. See who can get to an operator first.
Once we’d gone around about 15 times on the flight search UI, trying different forms and result techniques, we applied the methods that worked the best to the original hotel design:

which became:

Lincoln, our product manager, came up with the three sort criteria a desperate traveler might need: Cheap, Close and Classy.
Finally, we had the “Buzz” feature, which I had originally envisioned as looking a lot like the Stocks application that comes with the iPhone. “Buzz” is our feature that lets you see the best prices that other Kayak users find. It’s a good way to kill some time and contemplate possible vacations while you are waiting for the dentist.

Which came out as two screens instead of one. When you sketch on paper, you think you have more pixels than you actually have:
&nbps;
It just about exactly six months from the time we got officially accepted into the iPhone developer program to the day we got into the App Store. We’ve tried to anticipate user needs by thought experiment and usability testing. But we’ve done enough software that we know there will be some surprises and rude awakenings. We’re ready to change things around based on the integrated user feedback system. And we have a big laundry list of new features to implement.