The web is cross-platform? Since when?

I hate the argument that the web is a cross-platform solution. HATE it. With the fiery burning passion of a million giant stars. It is the most inept thing I've ever heard. And, it is TOTALLY wrong.


Yes, I can load most web pages, on most browsers and on most platforms. But, does everything actually "just work"? From the user side, most times. From the developer side (as I'm learning, and long suspected), the answer is a HUGE emphatic, NO!


I can't get over how on occasion even simple things don't work from browser to browser... let alone ON THE SAME F***ING PLATFORM!!!! I understand EXACTLY why, by the way. I'm not an idiot. I am a software developer, and I get 100% why this is the case. But it is amusing that a supposed cross platform solutions some times cannot even run consistently across browsers on a single platform.


HTML, even HTML5 is just a specification which defines a set of tags and their expected functionality. How those tags are actually handled by the browser is, in fact, left entirely up to the developers of the platform to decide. Worse, those (pesky) browser developers often decide that, "hey, there isn't a tag for this specific thing I need, so I'll just add my own". So, in addition to variations in the "core" HTML specification, there are then "extensions". The extensions are often less well documented and understood by other browser developers and as a result, these can get even more messed up than the core tags.


And life would just be bad if it ended there. But it doesn't. Most of the web is heavily dependent on JavaScript. And guess what?!!? Once again, every browser has their own engines for parsing and executing JavaScript. AND once again, each browser has its own set of unofficially supported JavaScript!


Is that all? F*** NO! Many browsers support extensions in one form or another which may play a role in how something is rendered. This is just gravy on the anti-web as x-platform since most people recognize that extensions, add-ons or plug-ins are not cross-platform. But, frankly, they aren't needed to make the argument.


The points up to now only cover things actually functioning and functioning as intended across platforms. Usually with a LOT of extra work and effort or changing 3rd party libraries or some other set of tricks people can generally get to the this point and only turn to thoughts of suicide a handful of times per week.


But that isn't the end of it. The silly problem with the notion of "cross platform" is that even if everything "technically" runs and runs as designed, it doesn't necessarily "work" on all form factors. In fact, just about every desktop UI falls flat on its face on a smart phone. And just about every UI not designed for a smartwatch implodes on itself on a smartwatch.


This has lead to the birth of response web design. Which, still doesn't actually help with smart watches. The don't even all have the same SHAPED UI!!!! Take THAT responsive design nerds! Now I need a media query for the SHAPE of my screen.


At the end of the day, what has happened is that there is soooooooo much UI code to handle variations in visual state, and likely some of that code has had to creep from the View to the Controll, or ViewModel or whatever supposedly disparate concept you try to use to separate the UI from the business logic that you were probably better off writing multiple apps or web sites in the first place.


AND... you've sacrificed the living crap out of the native functionality just to get there.


Sure, there are things which can be cross platform, within boundaries and within the context of a web site. A typical web site for instance. Or a more basic web application. In both cases assuming that cross-platform strategy doesn't include the smart watch you're set! Or an IoT device. Or, very likely, any new form factor that might emerge going forward.


I would actually argue that nothing has held software progress more than the notion that the web is a viable cross platform solution, aside from perhaps believing that attempting to build a true cross-platform app is actually viable. These notions constrain what we can achieve with software and limit our imaginations.


I know I generally support Microsoft, so please don't see it as a bias in that direction, but I think that the Universal App Concept that Microsoft has, or even Xamarin are the right approaches. Write your core logic in some intermediate tool or language which can then compile natively to any of your desired target platforms and then write separate UI's and additional libraries for platform specific functionality.


Why would I want to write a separate UI for a Windows tablet vs. an iPad? Well, I probably don't *want* too. But it actually DOES make sense. Each platform has different basic design languages (whether imposed or not), not to mention that each has different functionality which may be surfaced in the UI differently.
In many case, sure, you could find a compromise which is adequate for most scenarios, but in what is one of the most competitive software markets, the software which shines is that which makes the best use of the platform. Solutions which genericize themselves so that they can run on as many platforms as possible with as little extra work as possible tend to only survive until someone comes in and does a better job.


And, I would say that the proof is out there for anyone with eyes and brains. The most popular apps and games on virtually every platform are native. Even apps with websites with responsive layouts like Google's various services, Facebook, Twitter, Snap Chat, Vine, and the list goes on all have NATIVE apps on each platform they care about. The only place they tend not to have one is desktop OSs. But even then, some of them do.


All of these companies are web first. One would expect that these companies would be the first to say that you don't need a native app and simply not supply one. But they do. Again and again. These aren't small companies, and they aren't stupid companies. They aren't releasing native apps simply because they can. They are releasing them because they provide a BETTER experience.


So, while the web is technically a cross platform solution. You should definitely consider if the trade-offs are worth it. In most cases a rock solid desktop web UI combined with a native app on the top 1 or 2 mobile platforms is more than enough. And the effort you save your self trying to make your desktop site scale down to a phone (or, God forbid, a watch) will probably pay for the time to develop for at least one of those top mobile platforms. Use a tool like Xamarin and it might cover enough time to hit even more platforms than that.


And don't for 1 second complain that learning to develop for multiple platforms is a pain if you're starting frame of reference is web development. EVERY SINGLE WEB FRAMEWORK, WITHOUT FAIL, THAT WAS WIDELY USED WHEN I WAS IN SCHOOL IS NOW EFFECTIVELY DEFUNCT. Web developers subject themselves to learning a new framework on a regular cadence. By contrast, the, languages and skills used in the same timeframe for the 3 major mobile players are still viable. From where I stand, web developers piss away a sizeable fraction of their time on skillsets they know to be temporary, where native languages have a much longer shelf life. Heck, C++ is older than most of the devs out there doing mobile programming. Had you switched to C++ dev when Ruby was on the way out you'd be enjoying a senior dev job with a skillset that may somehow still be viable long after you retire.

Comments

Popular Posts