Tuesday 13 March 2012

Readability, Yet Another iOS App on Android

Readability is one of the big name iOS apps. They recently released their Android client. Unfortunately, it is not good news. While the app is technically very well made they've done the same mistake we've seen before. It is an iOS app with iOS UI paradigms running on Android.

Readability is a bit different from some of the disasters we've seen before though. This app is clearly a result of very skilled engineering team that has managed to build something very responsive and technically nearly flawless. Unfortunately, neither the technical or design team have had good understanding of the target platform. It saddens me to see that this much skilled work has ended up getting wasted.

Initial user reception hasn't been very good either. In this article I want to take a look at few of the components they've used and explore alternatives they could have used to make their app feel Android and improve their market rating.



Top Bar
The app uses a strange and unfamiliar top bar. It has similar function as an action bar would have but the implementation feels foreign on Android. The left part of the top bar is a drop down that allow user to filter the reading list. On the right side there's three dots that will reveal more functions but not the Android way. Tapping the three dots triggers a sliding animation that reveals search, edit, add and settings. A "back" appears on the left side that can be used to move back to the previous bar state.


Solution: They should have used the Android action bar pattern. The action bar provides all the functionality in a familiar way. The drop down filter can be used the same way and actions can be either on the action bar or in the overflow menu where users will find them. 


Contextual Actions
User can perform actions per list item but the way these contextual actions are made visible will not familiar to Android users. Firstly, there are two separate action states. Three contextual actions are exposed by swiping a single list item. This interaction is something that is widely used on iOS but never used on Android.


A second edit more is started by selecting "edit" from the top bar. This changes the UI slightly and allow user to select multiple items and move or delete them.

Solution: Again, Android action bar provide all this in a familiar way in form of the action mode. The action mode even supports difference between bulk actions (performed on multiple items) and single row actions. Enabling the action mode should be initialized either by long press on an row item or better yet having a check box on each row that users can click.


Settings
The app implements fully custom settings screen. They have gone in length to make it look like iOS settings screen. The app even directly violates Android design guide by using right-pointing carets on the settings list.
Solution: They should have used Android property view to make settings screen look and feel consistent with all other Android apps.


On-Screen Back Button
The app tutorial screen features the notorious on-screen back button. And it even is styled like an iOS button.
Solution: This is an easy one. Remove the back button. It simply is not needed!



Notification Flood
This isn't iOS vs. Android related but it is a user experience problem that can be easily fixed. The app notifies user with status bar notifications way too often.
Solution: There's no need to notify user when the app is doing a refresh in background. Only notify user when there's a long lasting job (like downloading items). Also, make sure that all notifications either allow user to terminate the long running task or lead to a screen where users can do that.


Menu on Reading Screen
On reading screen tapping the Android menu button doesn't do anything. To bring up the menu options  user must tap the screen on non-link and non-image area. This is very different from what Android users will expect.
Solution: Make the Android menu button bring up the menu. It could be worth considering using action bar on this screen too to use on screen menu instead of the button to comply with the latest recommendations. They could consider using automatically hiding the action bar to allow use of full screen for reading.


Sharing
Sharing in the app is implemented wrong. There's no other word for it. The app is not using Android intents but instead implements sharing manually through Facebook and Twitter. Also, note that they use the iOS share menu item instead of the Android one.

Solution: Use intents! Use Android sharing icon! There's no reason to force users to login to twitter in this app too as they probably already have a twitter app they're using and are logged in.


Conclusion, TL;DR
Unlike, the disaster of IKEA app I wrote about before seeing this app makes me sad, not angry. The dev team have spent a lot time building something that is not needed. I can just imagine how much time was wasted for Facebook and Twitter integration as it all could have literally been two lines of code. Same thing with the top bar and context menu functions. The implementation is technically flawless but useless. Correct functionality would have been there ready and tested. The team could have taken the ready functionality and been done months ago and even gotten much better ratings. They could have spend the time building something awesome instead.

I wish best of luck to the Reabability team and as they've already demonstrates great skill I hope they'll take the time to make it right on Android. If they do I have no doubt in my mind that it will be a success.



[Update] I got this back from Chris Dary (CTO of Readability) in Twitter. I have no doubt that the next version will be much better!


12 comments:

  1. I really don't like what they're doing with the UI

    I can understand that they want less work, but this time they have worked extra to make it actually look like iOS.
    What are they thinking?

    It's ok though, they're stupid but i luckily don't care because i dont use Readability ^^

    ReplyDelete
    Replies
    1. "they want less work". Cloning iOS work is a lot of stupid frustrating and time consuming work for developers.

      Delete
  2. I'm absolutely certain that they're not stupid. The app is built very well but unfortunately the design is off. My guess is (without knowing anything) that every single designer in the company is an iPhone user and have never really used Android. That is the case pretty much everywhere. We just need to make sure that we provide enough information to the design team during the design process so they can make informed decisions.

    ReplyDelete
    Replies
    1. When I was working there last year, the company was pretty evenly split iOS/Android. All the partners are iOS but most of the devs and at least one product designer are on Android. Kind of bizarre that it slipped through.

      Delete
  3. I think its really unfair to call them stupid (i suspect the person who said that couldn't write much of an app)

    No doubt they wanted a consistent user experience for users of Readability and forgot that android users are used with the android ui

    I looked at the app its nice and the apple way of doing things is fine but should only apply on apple kit

    ReplyDelete
  4. Just a quick note about using intents. The official Twitter app doesn't come back to the calling app after tweeting. The official Facebook app cannot share a piece of text along with the link.

    This can be seen as minor inconveniences but the truth is for some apps this is simply not acceptable.

    ReplyDelete
    Replies
    1. +1

      For example the Foursquare app for Android doesn't use intents either but rather connects your facebook and twitter account via the api. I like the Android intents, but for these kind of apps they are not helpful.

      I want to share articles from Readability to Facebook with an attachment included - much like if I share it via facebook.com and to share the tile and the link via Twitter and not to type the title manually.

      Delete
  5. > Enabling the action mode should be initialized either by long press on an row item or better yet having a check box on each row that users can click
    Do you really think that long press is a good way of enabling edit mode? I know that's in design guidelines, but I think it is unnatural and, what is more, creates a subconscious fear that we might fire the normal click action because of high similarity between those two gestures.
    The check box way isn't much better when we have a lot of textual information per row so every dip of width matters, but we must provide 48dip hit area for check box.

    > On reading screen tapping the Android menu button doesn't do anything. To bring up the menu options user must tap the screen on non-link and non-image area. This is very different from what Android users will expect.
    Tapping on content to bring up menu is common pattern in applications that use whole screen estate for displaying content like video player or PDF viewer. Some use double tap like Dolphin browser. I agree that menu button should cause the same.

    > Solution: Make the Android menu button bring up the menu. It could be worth considering using action bar on this screen too to use on screen menu instead of the button to comply with the latest recommendations. They could consider using automatically hiding the action bar to allow use of full screen for reading.
    Sounds like what they have done, except menu button not working.
    You didn't specify how would you reveal your auto-hide action bar without using hardware or legacy menu button (the recommendation you linked is about persistent AB).

    ReplyDelete
    Replies
    1. The long-press action is very common for Android.

      Delete
  6. Hi p.l,
    Firstly, thank you very much for taking time to write your comment. You bring up very interesting and valid points to discuss. My thoughts bellow:

    Row selection: Yes, I maintain my stance that long press is better way of selecting a row than swipe. I'm also not convinced that checkboxes would not work. I bet that a talented visual designer could work his or her magic and make it very nice.


    Tapping to reveal menu: I think you have a very valid point here. I went back and looked at other apps like Google's book reader etc and they do the same. It is not just media content. I think what throws me off in this particular app is that the content is HTML which is very rich with hit areas. Other apps that use the same pattern for brining up menu have either no separate hit areas or very few hit areas in the content area. In these cases it is very easy to bring up the menu. In case of this app you need to find a place consciously where to tap. I think there could be better options out there if they're carefully examined.

    ReplyDelete
  7. Could you enumerate some known patterns for revealing such menu without wasting to much of screen estate for controls?
    From me would be:
    - sliding drawer (with minimalistic handle that overflows content view with appropriate touch delegate)
    - sliding horizontally to unveil vertical toolbar (like in firefox for android). Of course only if no horizontal gesture is used (workspace switch, content scroll in both axis) and there should be some kind of explanation for first time use (like make it visible on start and auto-hide it).

    ReplyDelete
  8. p.I,
    With regard to check boxes, you could make a TouchDelegate that handles the click events such that it's larger than the actual checkbox. Gmail does this on ICS. See http://android.cyrilmottier.com/?p=574 and http://developer.android.com/reference/android/view/TouchDelegate.html

    I'm not really opposed to tapping to show the ActionBar (emphasis on ActionBar) and letting it fade away after a timeout. A split action bar would give you all the room you need for items. Alternatively you could have the ActionBar come it when you drag downward (including to scroll up) similar to how the ICS browser works and/or when you reach the bottom of the page (see Pulse). For that matter see Pulse for pretty much all of it.

    ReplyDelete