Tidbits from 12 Lessons Steve Jobs Taught Guy Kawasaki

http://www.youtube.com/watch?v=DR_wX0EwOMM

Worth a watch in general, but the following were pretty intriguing comments:

  1. Real innovation happens on the next curve, not on the curve you are on. Jump the curve.
  2. Focussed Group at Apple was: Steve’s left brain was connected to his right brain. 2 members of the focussed group at Apple.
  3. Don’t think everyone of us can be mini-Steve Jobs!
  4. Focussed Groups in a nutshell: Better, Faster, Cheaper, Status-quo. That’s what they usually reveal.

Humbling Designer’s High

It’s one of the most humbling experience when I spend hours obsessing and iterating to finally have that aha moment of realizing an optimized design solution. It almost feels too obvious to have required so many iterations.

It’s my designer’s high!

The Pixar Story

Finally got to watch The Pixar Story. Such a great story of success. Some highlights,

  1. Creativity is a result of collaboration. More importantly it is this unplanned collaboration that happens when everyone is together physically. This made me wonder about working remote vs working in the office.
  2. Second Product Syndrome (Steve Jobs): companies do not realize what made their first product (launch) so successful. They go bigger and grandiose without any clue to what made it work the first time.
  3. It’s not about the ideas, but collaboration on the idea by creative people. People make it successful!
  4. Let the originality of an idea thrive and blossom – Disney gave Pixar a lot of direction for Toy Story resulting in a mediocre initial script for the film. It was only after the original team re-grouped, threw away all the assumptions and just went with their instinct, seed of the original idea that resulted in what we all know as the Toy Story movie.
  5. It is really important to not get over-confident or stagnate due to success. What got you to point A of success, won’t get you to the next level. The recipe for success does not remain constant, but constantly evolves with times. Shake things up and get out of the comfort zone!

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.

Fallacy of Process Standardization

Any Process is usually a solution to make a specific team efficient. Unfortunately it gets adopted blindly assuming it will make every other team equally efficient. But every team is unique, with specific talent, personalities and deficiencies. In that way each team is inefficient in its unique way and hence need to optimize around its unique set of team members. They need to develop their own process to work their strengths and weaknesses. When it comes to process – One size does not fit all.

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.

image

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).

Facebook Home

Facebook announced a brand new experience for Android users today. It is called Facebook Home.

I am not an Android user or developer, and mostly a passive Facebook user, but wanted to share some thoughts. There are valid concerns about users’ privacy and ads on home screen, but I am more excited about the general approach and concepts here.

Core theme around FB Home is seamless integration across messaging, photos, etc. This feels like the inception of next generation of communication – app-to-app as well as user-to-user – in the App world. From what I’ve understood about FB Home so far, it seems that there’s no reason for it to be just FB specific. What I mean is – it’s an advanced workflow that is integrated across contacts, photos, messages, news and so on, i.e., content that we tend to consume frequently. Imagine iOS and Android doing this at the core OS level and allowing to even include content from different social platforms (twitter, pinterest, etc) as well as from non-social apps. It makes the need for cross-linking between apps so much more prominent and obvious.

It would be great if iOS 7 shipped with such integration features/API. Not specifically an implementation at launcher or home screen level, but in terms of API available to developers, so that they could build integrated experiences.

Thanks to Facebook for leading us into this – it will only challenge and advance other apps, services and platforms to deliver similarly seamless experiences.

Looking forward to the next generation of cross-linked and integrated apps!

A Developer’s Wishlist for WWDC 2013

Here’s a quick list of top level iOS features/improvements that I would like to see as a developer this June:
(in no way a comprehensive list and your mileage may vary)

  • WiFi tethering from Xcode to run code on (dev) iOS devices on the network. This showed up briefly in the early days of Xcode 4, but was buggy and hence removed
  • When I am installing dev builds to an iOS device from Xcode, let Xcode unlock the device without a passcode.
  • Be able to add testers to an app in the App Store rdar://13275881
  • Some sort of Alarm API. We all need our apps to wake up and do something from time to time and then go back to sleep. Push notifications work, but they still need users to react for the app to be foregrounded. I understand why an alarm API might be a bad thing due to possible exploit/abuse, but wonder if a server based alarm API, sort of an extension to the Push notifications protocol will prevent some, if not all, abuse.
  • Minor, but please have a preference to disable auto layout in Interface Builder. Apparently there is a way to do this in Xcode’s file templates, but it gets overridden with updates.
  • This might be a stretch, but it would be nice to see what’s my current spot in the app review queue. I don’t have to see who else is in the queue, but something like – X apps ahead of me, Y apps behind me. I know this could be a bit of TMI for Apple to share on what’s going on behind the scenes; may be there is a middle ground as in just show me some kind of projected number of days for my app to be reviewed in. I currently use app review times setup by the nice folks at Shiny Development.

Minus the alarm API; the above is what comes to mind in terms of making my daily app development life easier…  As far as alarm API goes, I’ve had enough scenarios in my apps that could benefit from it and I hear other developers mention it from time to time. 

Rdar is full of bugs and feature list and I am sure I am missing many. Also, this is not a coverage for next generation end-user features or for that matter even new development SDKs (e.g.: AppleTV).

Would love to know what you would like to see?

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 😉

image

Wishlist for next Pebble

About 2 weeks ago I finally got my Pebble watch. I was very eager to get it; however, as I started setting it up, I noticed there was something lacking in the overall experience that made it feel antiquated. It reminded me of the calculator watches from the late 70s. Don’t get me wrong, Pebble is a great first version of a vision, but its kickstarter budget and lack of integration leverage (with iOS) is obvious.

In an ideal world, a Pebble with following features would be really awesome,

  • Retina + Touch screen
  • Better UI – Navigating through various menu screens was difficult and took a bit to get used to with so many buttons on the watch. This is probably one of the reasons where 4 buttons with a small display gave it a feel of calculator watch
  • GPS
  • WiFi, LTE and possibly carrier integration. This would be a killer feature. As much as we love our smartphones, I feel they are too clunky to carry during a run/workout. Imagine going for a run without having to carry your phone and still seeing an important notification/text buzz on your wrist

I understand that the above list is not easy and would require a lot more effort and resources (funding and partnerships), but I hope Pebble is iterating and will continue to innovate or for that matter even get acquired by someone that can empower it to possibly do the above faster. I have no clue what and if Apple is cooking up for an iWatch – but I wouldn’t be surprised if it has some flavor of the above. But I digress, iWatch is just a figment of imagination for now..

I tweeted that may be I should sell my pebble watch, but I still have it and will probably keep it, because I admire the effort and realize that innovation can’t happen overnight.

Update: It occurred to me this morning that my wish list is for the scenario when I go for a run and would mostly use such a watch. Hence I felt the lack of GPS. It also is probably a totally different context (device) where the watch could takeover the function of a primary device i.e. receive messages that are usually received on a phone.