Why I enjoy mobile software development?

I have been asked this question a few times, so I thought I would post on the topic. This is obviously relevant to my preferences and YMMV.

My background is primarily server side software development. I really enjoyed (still do) building large scale, robust, etc, etc systems. The fun part was being able to relate to the product offering at the domain level, coding that up into a service. At the same time, server side requirements meant paying careful attention to systems level issues like operating system, hardware resources and techniques like caching, failover, etc. While that’s a lot of fun, it usually lacks how an end user interacts with the product. When I say end user interaction, I really mean product presentation to a paying customer – UI style, workflow, animations, sounds – how the product really feels when it is used for its primary purpose.

With mobile you get best of both the worlds – you get to write fat clients (app) that are rich in user interaction and you have to worry about network as well as be a good (software) citizen (don’t hog down the system resources – memory, network, battery and so on) on the device. Also, a lot of business logic gets morphed to maintain the instant perception for the user. So you get to write a bunch of additional local business logic in the app or at the very least you will influence the API design decisions made on the server side.

It’s a fun and powerful combination of product, software and UX development in a small package.

An example of thoughtful design: HotelTonight’s Snap Your Stay

HotelTonight is one of my favorite apps. I consider it to be really well designed and built.

Its latest update includes a feature called ‘Snap Your Stay’. You can read a detailed review of the feature on GigaOm. The attention to detail in building this feature could be easily missed, but it is simply brilliant.


The obvious point here is the fact that it’s pictures based reviews. However, think of it; a picture based review could had been done in the following adhoc manner,

  1. Ask user to take a picture
  2. Let user assign a name/tag (free form text description) to the picture
  3. Let user add and submit as many (or little) pictures as they might like

The above would had been too much cognitive work for the users. It would also generate random sets of images (and text), which would had been too complicated to structure in any suitable format to be presentable in a comprehensive way to other users.

So instead of doing the above, HotelTonight has come up with a genius design that is simple and fast for the users and at the same time adds some structure to the user generated content to make it useful for other users. Some of the key ways the app achieves these goals are:

  1. Pre-assigned placeholders for each picture. This solves multiple issues,
    • user doesn’t have to think about what kind of pictures to submit
    • user also doesn’t have to come up with a description (and type it) for every picture
    • it will allow (automatically) combining pictures from all the users under pre-assigned categories and hence easily present it to other users
  2. The app shows a progress bar to motivate user to take all the pictures before they submit. Again, this is subtle, but the combination of #1 and #2 here, makes it very powerful to motivate users to submit a review
  3. Another simple, but effective way to encourage users to submit good content is hinting them with comments like ‘Take a pic while the bed’s still made’

The above is a classic example of high quality work that goes into building well designed features. It seems very obvious after we see it designed and implemented. But such subtle simplicity requires careful attention to detail and results in significantly improved user experience. We should all strive to achieve this kind of simplicity and high touch!

Disclosure: I had the opportunity to work on the HotelTonight app for a couple of months in late 2010 (pre-launch).

WWDC Alert App

I have been anxiously monitoring the WWDC page to go live for this year. Many folks are doing the same and using various options like,

  • going crazy by repeatedly refreshing the browser window with WWDC page open
  • setting up their own scripts
  • using pingdom
  • paying to a premium service like WWDC 2013 Notification by Oisin Prendiville. It in turn runs scripts to monitor the WWDC page and uses Twilio to send an SMS and can also call you

It occurred to me that I frequently refresh the WWDC page on my iPhone and it might be useful to write a small app that will do it for me and notify when the page updates. So I ended up putting together WWDC Alert App and have pushed it on github – https://github.com/rmatta/WWDCAlertApp for anybody to download and install.

Here’s a quick list of its features,

  • Manually refresh WWDC page
  • Display a timestamp of the last time it refreshed
  • Check for updates on WWDC page every 2 mins in the background
  • If the page changes, locally notify on the device
  • If there was an error loading the page, notify as well
  • If for whatever reason app is terminated by iOS or killed by the user, notify
  • Every notification also puts a badge on the app icon, which is cleared the next time app is opened

Quick Note on Battery and Location Services Usage:

The app runs in background by using location services so be aware of two things,

  • On startup it will ask to use location service. Make sure you permit it, otherwise it won’t work when backgrounded
  • Due to the use of location services and constant network to refresh, it uses higher than average battery power. On my iPhone 5, it used about 15% of battery over 6 hours.

Please be aware that this app was put together in an evening and is not well-tested. I have been using it for past 12 hours and it seems to be running fine. But if you find any issues with it please do let me know and I will try to fix it. Also feel free to update, refine, improve and send git pull requests 😉