This Tuesday I sat in my seat and watched Apple announce what would become iPhone OS 3.0, by the end of the presentation Handshake was dead. What events lead me down this road? They were long and very unexpected. Two years ago if you told me that I would have been part of all this I would have just written you off.
How It Started
When the iPhone SDK first became available it felt as though anything was now possible and everything was suddenly exciting. I was still wet behind the ears having just finished Trivial. Ian and I had recently meet at the local CocoaHeads Gathering and we were looking for a project to work on together.
Ian already had a good chunk of the network back end written for another project that never saw the light of day, but I will let him tell that story. We wanted a project that would be fast, easy, and enjoyable for the iPhone. I think the most important thing was seeing if we could work together as a team. Very quickly we came up with the idea of a contact sharing App, as there was a tremendous need and no solutions at the time on the iPhone.
Birth of Handshake
I was tasked with writing the client while Ian would write the back end. I immediately set to work getting a UI up and running so we could start testing things. Handshake was supposed to be a short project with one very simple goal, send contacts from one device to another. Unfortunately it wasn’t that simple, it never is.
Every time we took a step forward it felt like we took two back. The network had to be fast, stable and able to work on unstable cell networks. This kept Ian very busy and left me to fight with the client.
In the beginning my primary focus was the number of button clicks needed to be able to send your card. By the 1.0 ship we were able to get it down to two clicks, one to say you wanted to send your card, and one to select who it was to be sent to. Interfacing with vCards is not as easy as it sounds on the iPhone, especially back in the early days when the SDK was much less complete. Ian wrote an SMS share feature to make it easy for new people to get Handshake. It turned into an App that could have and probably should have been 3 or 4 separate apps.
Sending pictures was one of those afterthought kind of things. The home screen looked empty with just two buttons on it. We really wanted to be able to send calendar events but just couldn’t access that data anyway we tried. I was surprised weeks later to learn that pictures turned out to be a huge hit.
The Awkward Years
I’ve never really publicly talked about this before but Handshake 1.0.0 had a serious bug that was completely my fault. When the app was first run it tried to figure out who the user was. Handshake does this with some fancy code that scrapes through your entire address book trying to piece together information about you. This process took a bit too long, sometimes and would make the iPhone think that it locked up while launching, causing the iPhone to exit the App. This was caused by an extra call in the loop that was redundant and took a long time to execute. Handshake worked fine for address books with only a few hundred people in them. This didn’t get picked up in initial testing because we didn’t have huge address books. Who does have huge address books though? The media, thats who. Despite this Handshake was very warmly received by blogs and other news sources.
The power of Handshake was that it would work over 3G, Wifi or Edge in any circumstance, and across any network. It would automatically find people standing next to you and would even work with one bar of Edge (although slowly). To this day no other third party iPhone developer has really gotten this to work that I have heard about. With peer to peer networking in OS 3.0 I doubt anyone will try to tackle this again.
Growing Up
Handshake was huge (especially in Sweden). The problem was we never really had a way to make money on Handshake. We had an ad supported version and a premium version for $2.99 that was ad free. There was no way we could have been successful at all if we charged for the app since both the sender and receiver needed to have it installed. No one wanted to say: “I’ll send you business card, but you have to pay 99¢ first”. We saw decent premium sales, but they really only covered development and server cost.
The ad supported model just wasn’t working well for us. Handshake was one of those Apps that everyone installed, but only ran once a month for 15 seconds, it was not great place for ads to be. We launched with Ad-Mob and made some money the first few days, but it was causing crashes for some of our users, so we decided to pull it. We then tried to roll our own ad network, with some success and that is what you will see in the latest version of Handshake. We used it mostly for advertising our other software, but also had some success selling ad spots.
We added new features like email sharing and global user searching over time, but mostly we planned Handshake 2.0. We needed to add some premium features to be able to sell it. We had our foot in the door with tons of users in over 150 countries, now we needed a way to make money from it. Sending photos lead us down the path of sending files, without the photo feature we might of never seen that next step.
We got 2.0 mostly written including a file browser, which I will be showing in an upcoming post. We just needed a good way to get the files on the iPhone. We looked at every option available, web apps, desktop clients, and network sharing. We settled on WebDav, the problem was Handshake wasn’t making enough to live on and we did this full time. We were working on projects that had proven income potential. We would not have the time to write it ourselves, so we contracted it out to a friend to write. It would have to work flawlessly with Windows, Mac and Linux to be usable.
The WebDav server was never finished and we kept pushing it to the back burner to work on other things like Trivial, Transactions, Cocktails, Changes, etc.
We always knew that Handshake had a limited life and was expecting it to appear in Apple’s software sooner or later, after all we were filling an important niche. We were limited by the SDK and hardware access, something would have to change to take it much further. Apple was the only one that could take it to that next step.
Death and Cooping
The last few months it feels like we have barely thought about Handshake. The support load has been minimal despite the ever increasing user base. We have been busy working on Transactions. Handshake was slowly turning into a word I would use when introducing myself to other developers, “Hello, I’m Kyle Richter, I wrote Handshake”. Don’t get me wrong I always cared about Handshake, it put me on the indie map, but I think I knew its time was passing.
As I sat there and watched Apple first announce peer to peer networking in the iPhone OS 3.0 I was worried, more about our business reselling the Handshake back end then Handshake itself, and I instantly started to work through the task needed to switch Handshake onto the new system.
Ian was sitting next to me and I had sensed for a long time he was looking for the reason to move past Handshake onto new projects, I think this was the message he was waiting for. Even as I thought of ways to adapt and save Handshake I could tell it was dying. Once Apple announced MMS and email with attachments I knew Handshake was EOL. I was upset for a few minutes but the more I thought about it the better I felt.
Being “Sherlocked” is one of the highest honors an indie Mac developer can receive in my opinion. Apple saw the niche we filled, saw how we were doing it, and that people wanted it filled. They implemented it and they gave it to everyone instead of our limited user base. In the end we created Handshake to fill a need for ourselves and the journey has come full circle and now everyone can use it. I can’t think of a better way for Handshake to ride off into the sunset.
“[Handshake] Should be a built-in iPhone feature.” – John Gruber.
And now it is.
Handshake will remain available in the App store and free until iPhone 3.0 is available to the public, at which point we will see what we want to do with it.