Yesterday, Mark Zuckerberg said that the biggest mistake Facebook made was using HTML5 for their iOS app instead of native Objective-C. While it’s probably true that this was the biggest mistake they made, it’s not actually the reason Facebook for iPhone is so bad. Even the new all-native app is bad. It has nothing to do with the code that makes up the app, though.
In fact, HTML5 itself is not inherently evil. The Instagram app uses some HTML5 on the iPhone, and you can hardly tell. Instagram is a fairly well-built app that works like it should (and coincidentally was recently bought by Facebook).
The problem is not HTML5. The solution is not native code. The problem is that Facebook was designed for a desktop browser, while Instagram was designed to be used primarily on a phone. Every feature that Facebook has rolled out has been rooted in the desktop paradigm. Porting them to mobile devices has made them cumbersome and painful to use.
Look at Twitter as another example. Twitter was always primarily used on mobile devices. Initially it was based on SMS messaging, but eventually evolved to include mobile clients. The thing is, desktop clients for Twitter tend to be based on mobile clients. That’s because mobile devices are the primary way people use Twitter. The interface of the website, desktop apps, and mobile clients all reflect this. They all (mostly) look good on a mobile device.
The problem with the Facebook app is not that it was written in HTML5 at some point. The problem with the Facebook app is that it’s attempting to take the entire Facebook experience—which is designed for desktop devices—and shove it into a mobile interface. It just doesn’t work.