I got bored at Christmas so I built a social network For anyone who doesn't know me, I make websites and mobile apps (especially iOS) for a living. I spend a lot of my time talking to people about how to make digital products, how to design the UX s

30 K

I got bored at Christmas so I built a social network

For anyone who doesn't know me, I make websites and mobile apps (especially iOS) for a living. I spend a lot of my time talking to people about how to make digital products, how to design the UX so users can get the most out of the product and the psychology behind peoples use of apps. I also talk a lot about strategies like lean startup and so on.

Coming up to Christmas I managed to pretty much clear my desk and decided that I wanted to practice a bit of what I preach and make a product of my own. I tend to have ideas ten times faster than I can realise them and I have wanted to shift to my own products rather than being wholly reliant on client work for the sake of financial security as much as anything (it's all about recurring revenues!) and this is the story of what I did.

Why am I telling this story? Well:

- I hope its interesting for anyone with a good idea that wants to take their idea to a minimum viable product (MVP) and get it out in the real world.
- I hope it is useful for the above people in terms of how to take a few tech shortcuts and some useful iOS frameworks.
- Maybe people will want me to make their MVP.
- I hope people like my product and actually use it.

As I said, I have a bunch of ideas most of the time so part of the problem was deciding on what to do. I enjoy iOS development most so I decided to make a native iOS app. Also, I gave myself a time budget of five days in which to make the app. Ultimately I chose the simplest idea that was viable as I wanted to make sure that I actually got the thing finished rather than getting it almost there then running out of time and letting it drop (been there, done that).

So, my app idea was to gamify good deeds and I called it "Karmr". I probably need to write a separate essay about what people generally understand Karma to be but for this app what matters is that it is Sanskrit for "action" or "deed" so it is just a reference to doing things. I consider myself a "doer" and as Pablo Picasso said "Action is the foundational key to all success" so I liked the idea of encouraging doing things.

The reasons I thought this was a good idea were that:

- The structure I needed was pretty simple.
- I thought most people would find it hard to disapprove of doing good things and most people would consider themselves "good" people.
- I had the idea of a personal Karmr score which has a precedent in Klout and others where people value their personal score in terms of social proof for personal validation (I have a Klout score of 88 so I must be very important).
- There are a number of similar services that show people are willing to engage with content sharing and showing approval (c.f. a facebook like / retweet etc).
- Revenue could be generated from advertising and possibly in-app purchases.
- It would be very low cost to run needing a server (which I already had) and nothing much else.
- It would be scalable with a potential audience of pretty much every one.

I planned a structure where there were two focal points - users and actions. Actions had a title, a description and an image and users had a name, a username, an email, a short biography and an image. In terms of interactions there were two - follow user and giving a K.

With this rough structure worked out I decided that the quickest thing was to start putting it together and let it evolve naturally. I had recently built a simple web CMS to support a phonegap based project so I re-tasked this to give me the basics of system management and an API. In about half a day I had something running on a server and the roughest vaguely restful API you ever saw.

Next was the app. I had sketched out a structure where I had four tabs and a middle "+" button - similar to Instagram and others - so I quickly put this structure together in XCode making all the relevant UIViewControllers as I went. To fetch the JSON data from my API I used the fantastic AFNetworking from the Gowalla team. This gives a number of really nice short methods to grab and process data.

With my two lists being fetched and populating a couple of UITableViews I moved on to the user authentication system. If a userid is not stored locally they get a modal login screen with the usual account registration, forgotten password, legals and general info. I built the login, again using AFNetworking and moved on - the rest could wait for now.

One issue I had was that as data was fetched it needed to be obvious that users needed to wait so I put in SVProgressHUD, another fantastic open source iOS library. This pops up an activity indicator and prevents a user from doing anything until the app is ready for them.

Next was the detail view for each type of data. To differentiate from the list views I used a grouped table style. I played around with the layout a bit but ended up with an order I am fairly happy with. This is the title or username followed by the image as large as possible and then links to secondary information such as who gave an action Karmr points. In the interests of time I decided to only use standard UITableViewCells and this presented one particular challenge in how to set the size of a cell for a long bit of content but I eventually figured it out.

At this point I started to think a bit about the branding so I spent a bit of time fighting with typefaces and colours. I first had the beautiful Bello as a typeface but the K looked wrong. Eventually I found Mission Script which had the right look. Colour wise I started with a turquoise colour but it never really looked right. In the end my 8 year old son Dylan bailed me out by picking his favourite colour from the Pantone website. This was a nice bright green. Green means go and the app is about actions so it seemed a good fit. I set a reference to the colour in the application delegate so I could use it throughout and change it later if I wanted to. I also used Zynga's FontLabel to put the letting in place with the non-standard typeface.

Back to the function I wanted to include some filters for the actions and users to allow the latest, top and followed user data to be viewed. Also, I wanted to start on a "Trending" actions view so I created an algorithm that assigns a point for each Karmr point for multiple increasing time periods. This means that a Karmr point now is worth 6 points, half an hour later it is worth 5 points and so on giving a weighting towards recency. To do this I wrote possibly the longest MySQL query I have ever written at over 1500 characters including spaces. With this lot in place I had used about three and a half out of five days. I spent the next day or so filling in the gaps of secondary views (followers etc) and the user registration as well as tidying up the API.

At this point it all worked but there were a few issues that I realised might crop up in the data structure so I refactored a little to add a degree of robustness. One great example of this is that there were duplicates of all the data for trending, latest and followed data lists so I moved to a separate data structure which held unique item data and just used the previous arrays as lists. I dropped a few features until a later release also like comments and the ability to give an action some of your Karmr points.

As a final pre-launch addition I put in Flurry for analytics as well as iAd and got a few friends to test it out for me.

Then I submitted it to Apple.

Then I waited…

Six days later an email popped up "Your app us in review". Ten minutes later "Your app is ready for sale". :)

And here is the link to the App Store: itunes.apple.com/app/karmr/…

With the app in the wild I anxiously watched as a handful of users got the app and signed up. One reported a bug adding images on an iPad so I quickly fixed that and resubmitted.

I also started to think a bit more about how people 'should' use the system and how they might actually end up using it in reality. What I realised was that as I had left the action description field unlimited the detail of the posts could be quite long so it could be nearer Tumblr or Worpress than Twitter or Path. I decided that a web version was a must at this point as it would be considerably easier to add a long article via the web and, slightly cynically, the SEO benefit for people or brands using the platform to promote themselves gave an extra hook for them to sign up. So, I knocked up a landing page in about 6 hours karmr.co/… and then quickly built out the rest of the most basic functionality in maybe a day and if you are reading this on the web this site is the result! If not see karmr.co/actions/…

What did I learn?

- Eric Ries is a pretty clever chap. I have, probably accidentally as much as anything, followed lean development with a prototype, getting a minimum viable product out and then experimenting with features as a product evolves towards product-market fit. The power of this approach is that you just find out what is a bad idea really fast and move on. I think this is largely common sense but what the lean startup did was condense this into a nice, easy to follow format.
- If you have a clear vision and some coding skills you can build a functional prototype in a few days at virtually no cost. This is hugely powerful and really shows the potential for innovation we have with low cost cloud computing and free developer tools.
- You have to be super-strict with the extra features if you want to launch quickly. I left a lot out in order to get anything released on time.
- Stack Overflow and Google know how to do EVERYTHING.
- Making your own product is really nice and I have become ever so slightly obsessed!

There are a hundred features that I want to add but for now I hope you like Karmr and I hope you enjoyed my post. If you would like to give my action Ks just register and sign in then click the +K button. Hopefully if you like it you will start telling the story of your own actions on Karmr. Assuming some people do I'm looking forward to seeing how people use the system and building something far more polished as it starts to scale.

If you have any feedback or would like to talk to me we are on twitter.com/givekarmr and facebook.com/givekarmr and I would love to hear from you.

For more about us see tbc-digital.com or for me personally see martingsaunders.com