iPhone development: Web or SDK

Came across an article from Ian Thain.

Web or SDK?— Web Development and SDK Development each offer distinct advantages to the iPhone Developer...So I set out over the last two months, with the aid of the LinkedIn Polls feature to gauge the trend

I am a true believer of native application. After so many years of working on write-once-run-anywhere, I've come full circle (twice, actually) that if you want to develop for a particular platform, you should take advantage of all the features from a platform.

This is also why the iPhone come in late and now are far ahead of WindowsMobile. Windows has been in the mobile business for over 10 years and yet it failed to capture the market. Why? Because they tried to build an OS that will run on all the phones out there.

So now I take device agnostic very differently. As app developers, our goal is to provider users with the best experience. If I build a UI that will be 'translated' to different devices, the end result is that it doesn't feel right in some device. For those who have done serious mobile web development, you will understand even web app will need to be tuned for each device, resolution, browser, OS, etc... So if someone tells you that you can develop the app once and it will work nicely on all platforms, either they are not telling the truth or the end result is not good.

That said, other than the UI, everything else should be platform neutral. Rather than trying to make the UI generic (which is impossible), we are creating a set of control functions that are common across all platforms, so device agnostic to us is common data (through XML), common behavior (through Restful webservices) and native UI.

Now am I saying everything should be native and never web? Of course not. web is great because it's flexible, easy to develop, easy to deploy and provide real-time information to the users. Now when we design new app, we always starts with the final user experience, that always lead us to building native app with some web widgets inside for real-time dynamic updates.