User experience versus Developer Experience · Jan 15, 04:36 AM
Mobile apps make a great compliment to webapps – given a user freedom to keep using your service when out and about. It should be a case where everyone wins – services are more likely to be used, and benefit from happier customers and recommendations, and users get to do what they want when they want.
A great example of this is, of course, Twitter. Twitter apps on iPhone were, for a period, one of the most exciting places in app development, with competition causing all the different apps to try and out do each other, bringing some nice UI innovations along the way. We take pull-to-refresh for granted now, but that was born out of the Twitter app wars. These apps became a joy to use, so we’d use them more often, and thus we all tweeted more. Everyone was happy.
But those days are gone, and we’re seeing a worrying regression in terms of UI for social media apps. No longer are they making the user experience better and better: they’re making it pro-actively worse than it was before. And I think we can bring it down to people optimising for Developer Experience over User Experience; DX over UX.
Take the current Facebook app, which is the worse offender at the moment. Like a lot of these apps (I’m looking at you too Google+) it is not an honest native app – it is basically a little browser window dedicated to looking at Facebook. The UI is not native, all the content comes from Facebook’s website as HTML, and is rendered using webkit on the client, ignoring native controls in the process. This makes such apps feel a little alien. Even during the great UI battles of Twitter clients, the interfaces we all luciously native – they responded to touch beautifully, and kept at heart what it was that made the users of that device pic that platform.
Using webkit for custom UI components is not something I frown upon generally, I’ve done it myself, but when it’s used to replace stock components with a poor substitute, I begin to worry. This is great for the developer experience – the iPhone version of the app, Android version of the app, the Windows Phone version of the app all look the same and share the same code. It’s a total win for the developer. But as a user, it’s the opposite. Users pick a platform, particularly iPhone users, because they like the way that platform works. By making your app a cross platform webkit experience you’re telling the users you don’t care about their platform preferences – it’s the developers preference that counts more.
But so what, you say, it’s a mild UI critisism, why get so worked up about it. Because the worse is yet to come.
When I use an app on my phone expect it to work whether I’m online or offline. Look at the standard apps on your phone – email client, text messages, notes apps. They all work when you have no mobile or wifi signal. Sure, you can’t send or recieve new mail, but you can read your old mail – which is a hugely useful feature, and in fact I’d say a vital feature. Say you’re trying to find where you agreed to meet someone when you’re out, and have no mobile signal. No problem, your phone still has that email or text message with the venue stored somewhere.
Now try use the Facebook app offline – it’ll just display a sad smiley and say it couldn’t reach the Internet, and we should try again. I hope your hypothetical friend that you arranged to meet via Facebook likes waiting.

Last time I checked, all the principle mobile platforms had this crazy thing we like to call “storage” where you can, get this, store things so they’re available later. It’s not hard – we’re been storing data for quite a while now. But in the rush to make their app more flexible when they want to change how Facebook works, this means all the content is formatted on their servers and sent down each time you want to display it. So when I’m in the middle of nowhere, and want to check where it was my friend said we were going to meet, it’s like being back in the dark ages. I can’t get access to information I already accessed once on this device.
Ask yourself that question again: did they optimise for the user experience here, or the developer exeperience?
And this is a regression – it’s not like they’ve just not had time to do this. The Facebook app used to work like a native app, where it’d use regular compents (a bunch of which they open sourced) and would store things so they could be read later regardless of your network status. Facebook have taken a step backwards here.
I’ve no problem with Facebook wanting the flexibility to change the flow of their app without having to make users redownload the app each time, but the way they’ve done this is, quite frankly, poor. They have a huge wealth of talent in that company, but it seems that talent isn’t in charge of designing their mobile apps, which is a shame.
It’s very easy as a developer to optimise for the developer experience over the user experience, and it’s something you need to fight to maintain in any project, but it’s worth the fight. When I’ve managed development teams I’ve always tried to maintain that view – our job as developers is not to do the easy thing: we should be doing the hard things so the users don’t have to. That’s what they pay us for.
Of course, we don’t live in a perfect world with infinite time to build the perfect product, so often the UX/DX trade off is a comprimise, but it’s hard to accept that excuse when apps like Facebook’s have had these features in the past, and have now lost them.
One of the best things that’s happened in the last few years is UX seemed to be winning over DX. The whole output of the Twitter app battles was better and better UX. It’s very sad to see the tide turn the other way.















There is no real excuse even with an application using a web browser component. Webkit is used for IOS and Android and has supported sqlite data storage for a while now. There’s no reason not to be stuffing what was last retrieved into there, just in case.
There’s a growing trend towards cloud based computing, it’s the same stuff they’ve been trying to push for decades and yet still people don’t seem to grasp that it all becomes useless if you have no connection.
I did read an interesting article from an ex-facebook developer the other day in which he essentially said that code quality isn’t important at facebook, as long as it works most of the time it’s fine. And there’s the start of your problem.
As for the UI elements, there’s really no reason why you couldn’t dynamically create and destroy native UI elements via, for example, javascript code on your pages. Again, if these were stored in the sqlite db you wouldn’t have to rebuild from the javascript unless they had changed. Dynamic self updating user interface.
— Scaredycat Jan 15, 05:35 AM #
I agree with what you are saying. But it is interesting to note that Apple pushed developers away from platforms such as Flash and Silverlight but allowed web apps along side their native apps. We all know that Apple loves to control but it seems inevitable that the use of webapps would lead to nonstandard interfaces.
Perhaps the most important question for users is how do we fight this trend? You said that competition drove the Twitter app development for the good of the user experience but there is no competition for Facebook or Google+. As an aside, I have the official Twitter app and find it very confusing. But the perhaps I’m just confused by Twitter as a whole.
— Dave Jan 15, 05:41 AM #
@Scaredycat, webkit in a webview versus webkit in Safari are two different things. They don’t support the same functionalities.
— Brice Lechatellier Jan 16, 07:35 PM #
How far away are the major social platforms from adopting responsive design (RD)? As you mention, the benefit Facebook sees from using webkit and html in their app is cross-platform compatibility. RD elevates platform compatibility performance to a whole new level. In fact, well executed RD would eliminate the need for mobile apps all together.
Where does the app craze end? Should FB be responsible for Android and iOS apps on every screen size these OS’s run on?? I think mobile apps should be dead and RD should take over. RD is a win win for developers and users. The same exact files run a coherent UI across all platforms and screen sizes.
As for the offline issue, I love Scaredycat’s idea. Why not prompt the user when they first login if it’s OK to store data locally on his/her device? Databases and Javascript can handle that work. Also, the need to support offline users is mitigated by increases in cellular data coverage (I live in a rural Virginia town where AT&T users just got 3G a few weeks ago).
Thanks for the great post!
— Robbie Jan 16, 07:47 PM #
I find it interesting that you fault the Facebook app for not having offline capability but go on to praise Twitter apps. These are two services that are pointless offline. If you’re expecting Facebook to be your source for contacts or calendar, I’m pretty sure you’re using your phone wrong.
— JG Jan 17, 10:00 AM #