I've been doing this for over ten years. In that time I've seen large web applications built for under 4k; I've also seen massively overbuilt simple applications go for 50k+. It comes down to often how needlessly complex you make the stack.
If you stick with solid simple guaranteed tech instead of cutting edge you can knock a web app out relatively cheap and easy.
When it comes right down to it, 95% of web apps have two jobs. Present text to the user, take text from the user. Everything else is a nice to have. HTTP has been doing those two jobs amazingly well for decades. It's a solved problem, don't make it harder than it needs to be.
Lastly: Don't fight the browser. Design for the browser. Responsive is easy if you design for things to flow as the browser would have it. It's one of the biggest mistake I see so often. If a design requires you to fight the native behaviours of the browser, it's likely a bad design. Fight back against that junk, it just makes future work that much harder.
tl;dr Develop for the web of a couple years ago and not the web of today. It'll save you time and headaches.
Yes, you can build 2007 websites much better now. They will be consistent across platforms and perform great. But my 12 year olds don’t want 2007 websites. They want 2016 apps.
Just a simple example: it's trivially easy to make large, flat shaded buttons on the web. That's going to be more familiar to younger users than native web buttons like those on HN.
However, there's also spending weeks to make a web button that animates smoothly from one container to another and has a SVG icon that morphs into another different icon with magic sparkles. Doing that on the web will require grossly perverting the DOM and all of the web interaction expectations.
A lot of the things we consider "Just 2016 App Things" are performances that native app builders have to do to give clients a reason to believe their $300/hour is well spent. No real value is produced except "design" awards for the shelf.
I recall an article by Zynga (maybe in Gamasutra? Can't find it now) that talked about user retention in relation to "rewards." They said that it's essentially a pure win to make every single action a user performs reward them in some way. Not a big reward—not a "points in a video game" kind of reward—but at least a pretty sound and an unexpectedly smooth animation (vis. "magic sparkles.") These things do make a difference, and it pays (in a competitive niche) for your app to do them. Just like B2B apps are sold mostly on checkbox features, B2C apps are sold mostly on how pretty they look doing their job in the app-store video.
If it's possible to do it with the new CSS animations (which should be reasonably well accelerated on modern browsers) and gracefully degrade by... y'know, not having the animations play, that's probably the ideal compromise right there. If you start restructuring your DOM in the name of easier animations or flashier effects, you've gone too far.
I'm going back to my Emacs editor. ;-)
Not to mention that every time we add a new feature or change something in the web app, that change now needs to be duplicated in two native code bases as well.
If anything the opposite is true: you can only afford to build native apps as a larger company.
Regarding webpack, there aren't wholly better options yet... I'm sure there will be, but for now, it's pretty nice.
I am not against people trying to push front end technology forward, but it feels like we're just inventing a thousand different wheels when the first wheel wasn't really lacking much so long as you knew how to use it.
I am wary of any new JS library as if the past many years are anything to go by, it's practically technical debt the moment it hits v1, if it ever does.
Laravel for example, it is very easy to only include JS files you need on a given page and make them modular using even vanilla JS.
You can even concat and minify it all, and it's all cacheable and idiomatic to the framework.
I guess the main issue is if I am spending more time on tooling and configuration of all the different parts of a build process then I lose the efficiency gains. For something like webpack there are no efficiency gains to begin with, as you can write modular JS without it.
It definitely has it's place and I am sure if I were exclusively a frontend dev I might find it more compelling.
But I can achieve clean, modular and reusable JS without it so it's one less tool I need to worry about.
The word you're looking for is inpronunciable, and it's not exactly as though "YAGNI" is some shining example of pronunciation to begin with.
Since my startup is my first Web site, I'm no expert in the issues in the OP here. So, HELP!
Guys here who know more than I do about Web apps on different Web browsers on different client devices, which is nearly everyone on HN, help me out here -- am I on or off track? Where am I going wrong?
So, what I've built is just a Web site (Web app). For the code to run in production, it's about 20,000 programming language statements in about 80,000 lines of typing. It's nearly all in Visual Basic .NET 4.0 with ASP.NET and ADO.NET.
For the user's browser, the user interface (UI), and user experience (UX) the site is all old and simple, dirt simple.
My guess is that the Web pages should look fine on any device with a Web browser up to date as of 10+ years ago.
So, the site is just simple, standard, old HTML and a little really simple CSS. The CSS is all in the same file as the HTML.
The fonts are large and standard. The colors are simple with high contrast.
For images, there are ads in the two standard sizes, banner ads 720 pixels wide and 90 pixels high and other ads 300 pixels wide and 250 pixels high. Otherwise the images are just a few, simple, small PNG files for logos.
The only HTML controls are single line text boxes, buttons, and text with links.
There are no roll overs, pull downs, pop ups, or icons. There is no auto-complete.
The natural language on the site is all English, but it is all very simple, and the user interface is so simple that a person with no knowledge of English should be able to learn to use the site in less than 15 minutes.
The page layout is all done with just tables with all widths fixed. E.g., each Web page is exactly 800 pixels wide. Since there are both horizontal and vertical scroll bars, the Web pages should be usable in a window as narrow as 300 pixels wide and 200 pixels high.
Each Web page sends for about 400,000 bits (except for the ads from ad servers).
The reason for people to use the site is for the information it provides. The site is quite interactive, and there is an iterative, game aspect as in games where wander through tunnels with clues and looking for coveted prizes. Maybe for some users the site will have an addictive quality.
From what details I've given, is it likely that the Web pages are simple enough to work on nearly all current Web browsers on whatever client side devices?
Where am I going wrong?
So, sounds like my code stands a good shot at looking good on the devices of nearly all the users.
Okay. That's what I was hoping for!
My site is not live on the Internet yet. On my development computer, it appears that the site works as intended, but I'm still testing, say, alpha testing. Then when I invite in people, call that beta testing.
For what is "wrong", I am just guessing that I might have encountered some of the problems mentioned in the OP.
But no doubt other Web site developers here on HN have already been there, done that.
Or, for the question, what precautions, considerations, limitations, etc. have to honor to have a relatively simple Web page display and act as intended on a wide range of client devices?
This is common, required knowledge of developers. They should be testing the site on as many devices as possible, and developing it with cross-browser capabilities in mind and tooling that does it for them. You can check yourself to see if it works
There is no excuse for not being able to develop a consistent experience across as many devices as possible. And it sounds like the poor OP just got a lazy developer.
I think this misses a key point - with mobile sites to be useful they have to be convenient enough to not make me wait until I'm next to my keyboard to do the task. Being convenient and easy to use is THE CORE FEATURE of mobile web apps, because they compete with using a full size web page on a laptop, in a few hours.
Take a simple, and pretty common scenario as an example -- booking an airplane ticket. The text I'm inputting is my name, address, frequent flyer number and credit card details, plus some dates etc. Also the same data for family members that are flying with me. Not a ton of data but it's a lot to type on a touchscreen and parts of it is sensitive information.
With the native airline app my details are pre-filled if I ever booked a flight before. With a web app the pre-filling of data is either dependent on a web login to the site (not acceptable) or on a browser form filling wizard (hit and miss, at best). I can book a ticket for me and the entire family with 10 taps on the screen in the native app, and on a mobile web app I have done over 30 taps before I even logged in!
I could of course book the same ticket using the mobile web app - but it's a pain. The native mobile app is way better than a desktop web app, and the mobile web app is only ever as good as the desktop web app, but always lacking in input because the keyboard is missing.
So yes - mobile web apps can be easy. They don't need a lot of fluff to get the work done. The problem is that they then are often completely unnecessary.
Even something as simple as typing an email address is a chore on mobile, so logging in in CompanyX using email+password is usually enough to postpone my transaction with them until I'm at my proper keyboard.
Deliver the project got easier; "Control the customer" got significantly harder. You've now got someone's app store in the middle of your customer relationships and are exposed to approval drama, various forms of revenue squeeze, and other meddling from the platform owner. What happens if the folks running the platform decide to launch their own offering?
Speaking as another small developer, our solution to the cross-browser feature support is simple: anything that doesn't run on most modern browsers doesn't make the final design. If the customer doesn't bite on basic design, we don't expect a miraculous shift with the latest widgets.
It's maddening. I wrote a thing about it and other Android issues: http://penguindreams.org/blog/android-fragmentation/
A few years ago I built a nice sms delivery system for installing an app I was working on. Text anything to our number (we had multiple numbers thru twilio based on market). App replies back with a download link. Install. It worked perfect and we could actually tell who requested the app and who installed it. We had around 75k users installing. Not millions, of course, but still, not too bad.
So, it is possible. We also did not have to wait for any approval process. And when the app started up, it checked for an updated version on our system. If there was, the app would then prompt the user to start the update. It was a very nice flow and we had many comments from users telling us that 'it just worked'.
This was app pre-iOS 7 and automatic app update, but it's still being used today.
Swore off mobile web in favor of pushing people to the app, because app conversions were much higher.
A satellite office broke away from the fold and implemented a responsive mobile site, immediately increasing their bottom-line revenue by 30%... and that's before doing any sort of conversion optimization.
The main office followed suit shortly thereafter... with a new head of engineering.
Native apps are no easier or harder to build than web apps. Equivalent level of difficulty in my experience, with apps being slightly harder because end-to-end testing needs to be done almost completely manually, and because the release cycle is partially outside of your control.
But for most businesses, you really, really do not want to neglect the mobile web.
Yes, conversion for in-app users is broadly higher across the board. But that's not because conversions suddenly spike when people use an app. Rather, your most dedicated users -- the ones most likely to convert -- are the ones that will install an app.
For the rest of us, if it's "app or bust", we will pick "bust".
As a consumer, I deal on an annual basis with probably over a hundred different companies. I do not want an app for each of those companies. And if you force me to download an app from the get-go, I will go to your competition.
Alternatives are webapp's or even building chat bots/apps on messenger platforms. This progressive mobile webapp example is impressive http://www.flipkart.com/
You can do this with PhoneGap.
"Multiple line ellipsis? Sure, but only on webkit."
Okay, yeah, this sucks.
"Consistent rendering size across browsers? Just fuck off."
This is probably your fault.
"We fix a layout bug on Safari and break something on Edge."
"We change font size on Chrome and now all you can see on Firefox is the letter F."
"How about hiding the address bar or controlling swipes from the left edge of the screen? Don’t be stupid."
Stop trying to make the browser not a browser. Users hate when you hijack expected behavior. (See: Imgur.)
"Oh, and don’t get me started on all these new custom mobile keyboards you can use and how autocomplete can fuck with your input box events."
You can disable autocomplete. Did you mean predictive word suggestions?
TL;DR: "We tried to make a responsive web app act like a native app and it didn't work because it doesn't work, and that makes me a grumpy goose."
Beyond this, it is clear to me when an iOS-minded developer creates a web app that ends up on Android. Each have their own specific styles, and this gets lost with web apps.
WebSockets changed wire formats multiple times before we settled on something. Last I checked, the API still isn't final, and changes in browser behavior forced a project I was on to abandon it for socket.io. Web Audio has been through at least one breaking rewrite since 2012, and still isn't finalized.
Sure, '<h1>' still gets me a big, bold heading (probably, subject to CSS), but playing a sound file without plugins is still bleeding edge, and subject to arbitrary breakage. But we've broken plugins (for the best, eventually), so the old solution to that problem no longer reliably works.
No, it rarely removes deprecated features.
The market has spoken. Doing those things is hard enough, people can charge lots for it.
That sucks. "Sucks" == suffering. Suffering == opportunity. (Deliberate Yodaism. Actually high market price == market opportunity.)
So there is a market, people are trying to fill those gaps, and yet none of them seem to be able to bridge the gap in such a way that devs prefer maintaining two or more native apps over one that compiles for multiple devices with a common framework.
So there is a market, but it doesn't look like it's an easy problem to solve.
Really? More unaffordable and unavailable than at least one native developer for each platform you're targeting? I find that hard to believe.
The entire article is saying "I used to believe it was too expensive to do native apps so we did web, I now believe I was wrong, even though it may seem cheaper at first the costs of the web are far less predictable and it's now economically better to just do native apps"
I've been writing web based applications for about 20 years now. It's a lot better than it was in the late 90's and early 2000's, so stop bitching or get off the lawn. (sarcasm) Seriously though, I'd much rather deal with webpack, babel, react, redux and the like than angular 1&2 (just feels like a decade old solution now), and heaven forbid having to ever look at an <ILayer> again, or breaking up forms dynamically in the v4 browsers.
Yes, there are a few features not broadly supported, but there is also tooling that makes web dev as good, and in some ways better than app dev (though less than natural, and all out performance on a complex app is hard)... all of that said, it's a VERY valid option for many/most sites/applications.
That's the killer.
They're saying it shouldn't be done, or that it's possible and if you can't do it you're a lame developer. I didn't see it as condescending at all.
That's the point of the article. Getting these things right on the web is non-trivial (and therefore expensive).
It's also an unfair comparison. These statements:
> We made a bet on the web. Built a responsive site for desktop and mobile and tried to avoid the native app space (still are).
And then later
> One app for iOS, one for Android, and I got over 90% consumer coverage. I can even use a framework to share work between the two.
So originally with the web, they're trying to target Desktop Chrome, Desktop Safari, Desktop Firefox, Desktop Edge, Mobile Chrome and Mobile Safari with one codebase. Then they move to only targeting Android and iOS (native mobile only) with two separate codebases? They could have just as easily targeted mobile Chrome and mobile Safari, and shared 100% of the code.
I'm not sure what they mean by a framework to share work between the two. If they're referring to something like Xamarin, I hope they've at least tried it before assuming everything works great. They're very unstable, and you still need separate codebases for your views, typically more. Ironically, the most stable ones of these I've tried have been web-dev based frameworks.
tl;dr: "It's cheaper to make an app for 2 platforms than for 8 you don't understand."
Often people show me "tech demos", by which they apparently mean something you'd never bother to show anyone else if it was an app or a game, but because it's running in a browser window and because it doesn't look like yet another shitty website (because it has something that moves, or which you can interact with in some limited way) it's supposed to somehow impress me. I don't get it.
You generally only have to write it once. But you've gotta write it right. The other attractions are no installs, just visit a web page. No users with "out of date" clients, you just serve the updated page to users. A sandboxed environment to run in. Ease of sharing (URLs). The DOM, while slow, is also rather nice if your layout model resembles documents. There's a million reasons why web might be the better choice. There's also a million reasons to prefer native.
> Often people show me "tech demos", by which they apparently mean something you'd never bother to show anyone else if it was an app or a game, but because it's running in a browser window and because it doesn't look like yet another shitty website (because it has something that moves, or which you can interact with in some limited way) it's supposed to somehow impress me. I don't get it.
Usually these are showing off new features available in the browser that weren't present before. And they can do a hell of a lot more than let you interact with it in some limited way, or move an object. How about an entire 3d Modeling Application in your browser? (Warning may lag a mobile device or slow PC)
But these are crazy, cutting-edge things that are still best done natively. Most of the time you're not making a 3d Modeling application. 99% of the time an "app" is something that shows text and images, and takes text (and sometimes images) from the user. You can make it super flashy, and that's where a native app would excel. But does it really need to be flashy? Does a cruise line's ticket booking app really need to show water flowing across the screen while you load the next page, and a tugboat pulling in prices? Or are these gimmicks that will just end up pissing off the user?
I guess I really just disagree with the blanket statements by the author. Native probably was a better call for their app, but they don't focus on why. Just that web supposedly sucks... Instead of learning the strong suites of web and native, and why they thought web worked for their app but it didn't, they've "learned" to not touch the web. Which I think is the wrong lesson.
The author is putting forth a false dichotomy between "write one web app that works on everything" and "write a new app from scratch for every platform." The right answer in 2016 is a hybrid approach.
We are building a product that runs on iOS, Android, Web, Desktop (using Electron) and Chrome OS, with Firebase, React, and React Native. A lot of code is shared among all platforms.
1) deal with it
2) pick a better platform
3) try and come up with a new platform which is broswer-like but where there is predictable, obvious behaviour on multiple implementations of the platform, and where the platform supports, out of the box, all the sorts of functionality you'd like for a modern app. If your platform is missing any of the APIs you have available on, say, Android or ios you're going to struggle to make a web app as rich as, say, google maps, or whatever.
I'd for for 3 but I guess it's hard because all the people who care are too busy trying to keep up with which framework to use, or centering text, or whatever.
As someone who has spent an embarrassing amount of time debugging kerning differences, line spacing, and obscure letter size differences across IE/Firefox/Chrome I can enthusiastically say, it might be his fault but I doubt it. Different browsers do things differently and in cases where things must be the same, this is an expensive and time-consuming problem.
They're doing something funky. They can call it a "2016 website" but the problems described in the article don't really make sense to me as anything but design-related. Now, I know that you can't design your way out of every problem, but if they're going to use IE6 as a hellmouth and not IE8, they may be using a greater number of bad practices than necessary.
Searching around also finds this answer pointing to a now-dead link saying Chrome used to have known issues with "consistent" fonts on sites like Reddit.
I would guess the recent improvement is due to the site itself being fixed – it now uses a "viewport" meta tag, which I don't think it did last year.
For a tightly-controlled UI experience, you want a thin, predictable framework that you can build your experience on top of. The web is the opposite of that. Big, big chunks of important detail for user experience are not specified in the RFCs and standards themselves.
Take CSS as an example. The first thing most web development frameworks will have you load is a CSS that sets the style for everything to some known defaults. If the web as an app development framework had been designed for a controllable experience, that would be unnecessary. But the web wasn't designed as an app development framework; it was designed as a heavily user-configurable presentation layer for standardized format of content.
That's literally his entire thesis.
There's been a ton of effort invested in trying to make web apps capable of competing with native apps, and his point is that it's still simply just not feasible. It's cheaper — and more importantly, costs are more predictable — to develop a native app for every platform you want to support, than to develop a single modern webapp of equivalent quality.
I wonder if it is more arrogant to claim that things are broken or to tell someone its their fault without even knowing what they're trying to do.
CSS and JS animations are children's toys compared to Metal on iOS. You can make a far more beautiful and smooth experience with native apps than anything ever done on PhoneGap.
You want access to a new iOS API on PhoneGap? You have to wait until it's public. If you want to upgrade your app for iOS 10? You have to wait until iOS 10 is publicly released.
Anyone using PhoneGap is almost certainly someone who is unwilling to learn Swift. Nobody actually thinks PhoneGap is better.. It's just a convenient crutch for those who are unwilling to invest the time to do it right.
If you have to ship a mobile app because of some executive vanity for a mobile app-- go ahead use PhoneGap. But if you actually want to write the best app possible, delivering a great user experience (as well as device experience,) then learn the real thing.
Also, you missed the point of the article -- obviously the problems are 'his fault.' The point is that all of those problems are more painful than simply building a great mobile app.
This is however not how business works and not how businesses work because it is not what they need. What they need is to transfer value to move their business forward. It is also the only thing they (should) want.
Full Android or iOS support is not what smart business leaders aim, I would tend to say it is the opposite.
I don't care for 1 second about the Metal/Swift you talk about when I can have people get their credit card out with an HTML page without CSS.
The first wave of designers who targeted print had the same trouble native app designers had and ended up building big blobs of flash applications.
Native app devs moving the responsive web route face similar troubles. I guess they can alleviate most of the cross platform, multiple screen and accessibility compatibility by relying on a framework.
In the mean a lot of native apps lack support for accessibility, multiple font sizes, and color schemes, ability of bookmarking a certain screen, ability of moving back and forth between screens, ability to open multiple pages (or screens) at the same time, better caching when mobile and offline, a way to hyper link within or across apps, support for various screen sizes from large to very small. So it could be better the native-to-web refugee to focus on the advantages of the plain old web which apps lacked.
Complete agree on this, and I think that it is the most important point here. It's similar to the when people try to code in one language and complains that doesn't behaves like the one that they are used to. Browsers are designed for a function, or a lot of them, force your design ignoring web needs is going to produce a buggy hard to maintain software.
You can, but it makes you pretty much the literal devil.
Don't disable my autocomplete.
> TL;DR: "We tried to make a responsive web app act like a native app and it didn't work because it doesn't work, and that makes me a grumpy goose."
It makes him grumpy because he can't get users what they want.
We're not just talking about iOS and Android. You've got Chrome mobile, the ASOP browser, Firefox mobile, whatever shitty browser the carrier wants to include and all the various versions of those that will never get upgraded.
Personally, I really like the ranty tone of this article. I don't think it's unjustified at all. The author's frustrations are very valid.
Seriously, that's your answer? There are problems, and your response is to blame the user, rather than admit that these are problems that simply should not exist?
Another point against making web apps: users have stricter expectations about them.
Unless you're in a very fortunate niche, you can't afford to not do the web. You can afford to not do apps.
> That group, btw, has mostly sold out taking high paying jobs at Facebook and Google, and have not heard from since
...but then later justifies his argument to forsake his ideals because "hey I've got a business to run":
> I don’t need you to troll me on Twitter and tell me how I’m betraying the web and the free fucking world. I am just trying to keep my startup going.
If you take a look at Meeker's 2016 Internet trends report that came out last week, you will see that 3 apps dominate 80% of the usage on phones. I decided when I started my food side project a year back, that I was not going to do a native app.
I have been trying to make the front end look better, but I did not want to use very heavy frameworks, so I settled on using the SASS mixin library Bourbon.io along with the grid and a few others the company provides.
The css that is produces is very tight, and I can save on developer costs. I should say, save on finding another front end developer as the one I was using took some money and ran.
80% of user time is spent in those 3 apps, that doesn't preclude very profitable apps from being developed. After all, people spend 16+ hours a day at home/work, but there are still plenty of reasons to open restaurants. Unless you profit directly from time-spent-in-app this doesn't seem like a consequential measurement.
See: Uber, pretty low on the charts for time-in-app but yet a massive business. Ditto Amazon, or GrubHub, or any number of other apps that deliver value to their users (and revenue to their owners) without long sessions.
But I think user adoption is just that much easier if all they have to do is open up your mobile web app in their phones browser. You could always build the app later after you have gotten the traction and growth.
Some apps do benefit a lot being native, but as others point out you throw in the middleman app-store model instead of just dealing with the browser, and keeping your UI simple, clean, efficient and of-course usable.
I developed web apps for 14 years before building ios apps for 5 years.
The last couple of years I've worked on both native apps and responsive web sites.
Both can be pains in the ae. But the pain points are different.
Both are moving rapidly. eg
Ios: having to rejig xibs to storyboards was annoying.
Css: Supporting older versions of IE has been a pain.
I could go on at length but plenty of people have already done so.
For example, here is something that was on the HN front page just a few weeks ago: http://clean-swift.com/mobile-development-projects-fail/
1. You can't compare making an ios and android app to making an app for every bloody broweser, I mean you could just as easily built your webite to safari and chrome for mobile.
You want a true cost comparision compare building an app for universal windows, and mac and linux.
Of course if you reduce the scope of your app's access you are going to get reduced costs.
2. Building a messaging app is probably the least appropriate and one of the hardest things to build with web technologie( after a game).
Use the appropriate technology for your app.
3. By your remarks on how costly mobile developers are, I'm guessing you've hired to inexpierenced web developrs. Get expierenced developers who know the limitations and best practices and you wont encounter so many issues.
What's the consumer coverage for Mobile Chrome + Mobile Safari? Giving up on total cross-browser compatibility doesn't have to mean writing native apps.
Also on a desktop or laptop where you've got a good Wi-Fi connection most websites are really good. That being said, I still things like Tweetbot, Flume, and Airmail over twitter.com, instagram.com or gmail.com.
If your product is an "app" in the functionality sense, then people are going to look for it in the "app store". Period. For user, it's actually a better experience than using Chrome/Safari.
On the other hand, mobile web browsers are way better than they ever have been. Desire to maximize web performance instead of allowing bloatware JS and ad cruft is at all-time high of industry awareness. Many mobile apps are "hybrids" anyway. Basecamp 3's new mobile apps are good examples of how you can create a pretty solid experience with a sensible mix of native and web-based functionality.
In other words, the open web is actually in better shape now technologically than several years ago. If only the big VC-backed SV startups would see that instead of chasing their tails trying to grab app users' ever decreasing attention.
> Even getting swiping and full page animation transitions
> has been relatively simple
Don't blame the web because you made a poor decision picking your tech stack (or hiring your devs). Nowadays a single webdev can ship OSX, Android and Windows apps with frameworks like Ionic... in weeks.
Starters (there are hundreds) help a lot: https://market.ionic.io/starters
Shipping an app with one of those is almost universally saying, "I don't care about user experience, I just want to shovel something out the door as cheaply and quickly as possible."
Again, don't blame the tool. Blame the bad usage of the tool. You're just saying: "Let's ban knives, assassins use them to do bad stuff!"
> [...] style the app for the individual platforms [...]
Ionic does this for you automatically. Surprise!
It's easier to complain about the tools than acknowledge that you might be wrong about how you or your devs use them (because of unfamiliarity).
Truth is many people are shipping stunning apps in no time thanks to web technologies.
There you have it. Using bleeding edge features will create a lot of problems. First you need to figure out what type of users you want to target, PC users with 24 inch monitors and keyboard? Or 12 year olds with iPads? But still, for your software to really work across as many units as possible, and continue to work for years, you have to look what existed 5-10 years ago, and only use those features that are still standard.
I have a mobile phone that no longer gets updates. It is HTML 5 compatible, so it should handle everything that is not bleeding edge, but still many web pages, for example medium.com does not work!
I remember being a web developer ten years ago, it was your professional duty do make sure it was pixel perfect on existing GUI based browsers and even look good on the text based ones. I think web dev's today is too quick to jump on the latest and greatest.
If you take a look at the browser features that existed 5-10 years ago, it's way behind the native phone app experience! It seems browser vendors totally missed the mobile explosion, and only lately have begun to catch up! Considering how fast the web tech moves now though, the future for web dev looks bright. I think that in in 5-10 years, the mobile browser experience will be on pair or even ahead of native, at least considering dev experience and cross device/platform support.
Note aside: this is one of those "it really depends" kind of situations. For many cases native apps are always going to be cheaper to build. For others the web is just much better. It seems like the problem Eran is describing is more of a labor shortage. It's really, really difficult to hire good web developers. I have no idea why this is.
The obvious answer is the one given in the article: Google, Facebook, etc. can afford to pay good web developers far more than a small business.
However with a huge friction point of requiring users to download and install an app.
Because the numbers seems to indicate that.
Also I disbelieve on how hard it is to find a mobile web application on a phone. Find it once, save a shortcut to a web page on your home screen, and now it is as easy to launch as an app. I actually find this easier to do than it is to install an app.
A lot of just a specific subset of highly technical people? I don't think I've met anyone with an aversion to apps who also used a ton of mobile web apps.
> save a shortcut to a web page on your home screen
How many people did you lose at this point?
- Actually you don't lose anyone because browser history and address bar autocomplete are your friends. I dont think people care to save a shortcut, because they know they will be able to find it later.
I don't think it's fair to say that users who aren't installing any apps are actually going to mobile web apps instead. They're simply using what they already have. At some point I have all the apps I ever need for all the interactions I use my phone for.
> Actually you don't lose anyone because browser history and address bar autocomplete are your friends.
On the desktop sure, you might have a point, but interacting with a mobile browser to find stuff that way is not a good use experience. You think browser history and autocomplete is a substitute for a home screen icon? I don't know how to respond to that.
Searchable: It being possible to find contents on the service via web search engines (Google, Bing, Yahoo!, DuckDuckGo etc.).
Deep linkable: It being possible to link to specific content on the service (and not just to the service as a whole).
Shareable: It being likely that your service as a whole is linked to. While you can share with someone that an app exists, it's far less likely that users will do so, because of the install-barrier.
And what you mentioned requires the service to maintain both an app and a webpage, so that doesn't work when we're talking about dropping the webpage...
So, the question is, without a web presence or API of some type, how exactly is data expected to be searched and shared by third-party participants? If the argument is that apps don't solve the problem of having a universal ontology, then I think the GP is not quite understanding just how intractable a problem that has been in computer science for a very long time.
But most customers want an Android app, an iOS app and a web site for desktop.
It's certainly cheaper to build that desktop webapp if you don't have to make it mobile-y, but is it cheaper to build an Android app, an iOS app and a desktop webapp than it is to build a responsive webapp?
I sympathize with the author. The problem is trying to tame the web, as opposed to embracing it for what it is.
We built this framework. And it took us four YEARS. Ok, it also does a ton more stuff than just make the app work across devices.
But, the web rocks. Seriously. PhoneGap lets you basically stuff the web app into a fullscreen shell and go to town. And the best part is that you gey to control updates, totally legally without Apple holding you up. Have a front-end bug? Fix it for everyone tomorrow! Have a new feature you want to roll out to only 5% of your users? YOU CAN! And then A/B test it. Whoa. Like how would you A/B test with the app store? Yeah, that.
Also... when invitation links are clicked, where do you think the mobile user goes?
TO THE WEB.
And so... you need a web experience anyway, that does more than say "Please download our app. Here is a nice picture and description so you can clutter your phone now."
And finally... web push notifications? Yes, this is one of the TWO BIGGEST THINGS MISSING in iOS Safari. (The other is access to the address book, with permission of course.)
But I think that's about to change at WWDC. Android Chrome has Web Push!
Ummm, yeah, I would say $50k would cover a small native app using Parse or similar or an extremely light backend. Even a medium size native app is going to run $100-150k. That's the price of software development if it's happening in the US.
A project should start by considering political things such as: is it smart to have this particular application hosted in a marketplace. Right after that, the chief engineer should be consulted to know the technical approach (platform, stack, etc...) that should be used, and the technical limitations that the requirements should observe to allow the development effort to be successful and efficient.
The more self-imposed technical constraints are observed, the more successful and easy the development will be - and passed a certain point, the more difficult it becomes to sell the product or service.
Applying this reasoning to the article, to me the problem is the very thing they have decided to develop.
The real underlying problem is the state of the mobile web browser, which neither Apple nor Google have much incentive to improve due to their revenue generating app stores. That's not to say that there wouldn't still be some major differences between native apps and mobile web (especially in the discovery / delivery department), but if you had better feature parity between these platforms I think rants like this guys would be fewer and farther between.
tl;dr: He picked the wrong technology platform for his product, therefore since it didn't work for his use case, it must be fundamentally broken.
As a simple example, I had a bug with some of the dialogs and menu popups I was using not rendering in Mobile Safari. It turns out that if you have a div that is a child (in the DOM) of a div that has overflow: hidden, that child will not be rendered outside of the clipping box of the parent, even if the child div is position: absolute and at a higher z-index than the parent. This works differently in chrome.
It's things like this that frustrate me the most in working with safari - I'm constantly wrestling with a rendering stack that doesn't seem to do what I want (it was only in recent versions that I could stop setting flex-basis: 0.01px instead of flex-basis: auto (on safari) like I do everywhere else on divs that had only text children that I wanted to make expand but also become multiline text instead of pushing everything way out to the right. And don't get me started on safari's support for indexeddb, let alone the other neat features that chrome is supporting to make mobile just plain better.
I'm at the point now where I'd literally be willing to tell my users: "install chrome for iOS" if it were actually chrome, instead of supporting safari. But instead, I deal with the sort of resonance back-and-forthing when I fix a safari layout bug that introduces oddities in chrome's renders.
It's like tomorrow is always tomorrow -- it is never today. One thing that bothers me about the web dev community is the insistence that technology has a will of it's own. As if the web will just eventually win no matter what. I consider myself an advocate for the Web but it needs to be good or better than the alternatives.
So, joke aside, it doesn't follow from the rant that the web is the future. It follows that there is a lot of work that needs to happen before you can say it might be part of the future.
It allways has been the case, that if you used the most bleeding-edge features, you will bleed getting it to work everywhere. Very painful indeed, but I won't suspect, that this is going to change in the future, with so many people and companys involved.
So if you need to ship products now, you have to use, what's stable enough, if you want to target everyone.
Another thing that stood out to me: "a closed ecosystem will always deliver higher quality in any given moment." Which is so absolute it's ridiculously easily disproved, even while being true at certain points.
I guess what i'm saying is that i believe in the principles of the web, but i think html and css are terrible technologies that do a disservice to those principles.
HTML+CSS isn't the only abstraction available, though. If you want a lower-level abstraction, you can use canvas. If you want a higher-level abstraction, you have your choice of composable view component systems (e.g. React).
So instead of having a competition in browsers, you'll have competition is the HTML parsers that developers will use.
No more messy W3C messy standard which is VERY hard and ambiguous to parse for any browser.
I've repeated that rant so often, I might start making a simple example of what I'm talking about. We just MUST abandon the text only approach. It allowed the internet to thrive without microsoft's attempt to make money with it. But today browsers are so ubiquitous, all that there is to do is enable browsers to just render binary HTML, which would just be a tree of rectangles and styles, so really simple. I think.
Native UI use a much much more simple model, which makes repaints less expensive and allow a better FPS rate.
That's why webpages shouldn't try to look like native apps on mobile.
* Or your virtual platform of choice.
BUT, my critic is about the DOM and the text-only approach, and also HTML not being strict enough so that all browsers can use it. It is the same compromise between having a compiled or an interpreted language. A compiled language will always be faster and smaller. If you put the burden on a HTML compiler instead of how the browser displays a binary document, you won't have those issues.
Interesting because isn't that sort of what you advocating for. Ultimately what's the difference between strict compiled binary executable "HTML" and something like a Java applet?
> BUT, my critic is about the DOM and the text-only approach, and also HTML not being strict enough so that all browsers can use it.
But really the problem isn't the syntax of HTML/CSS/JS but the semantics. Everybody can parse this stuff pretty much equivalently now but they still do different things with it. I don't see how compiling to binary would change that.
> I don't see how compiling to binary would change that.
The solution is forcing a stricter version of the language. https://www.youtube.com/watch?v=Q4dYwEyjZcY
A stricter version of HTML would not have allowed for the progressive enhancement that existed throughout the evolution of HTML.
tl;dr The Hybrid app took longer to ship (+ 20%), and was more expensive (+ 525%)
We were able to participate in a unique experiment:
- Develop a native app for iOS and Android at the same time a separate team was developing the exact same app as Hybrid (Cordova/React).
The app had 20 screens and used modern UX (onboarding, profiles, hamburger menus, alerts, GPS, content rich screens (text/images/video) with lists/details talking to a backend REST API with local/offline/sync'd storage.
Native = 8 man/weeks
- 1 iOS dev for 4 weeks
- 1 Android dev for 4 weeks
Hybrid = 50 man/weeks
- 5 Hybrid devs 10 weeks
You can argue that the 5 devs had overhead in communication and project management, but we observed that was not a major contributing factor.
The above was for app development (not the server). Hybrid app required the same amount of QA as the Native app.
Ben Terrett was former head of design at the UK Government Digital Service and he wholehearted disagrees.
But about the disagreement: government-apps don't need to be bleeding-edge, like the one from the article. They just have to work without glamour. So 2007 works fine for them ...
I can't understand this sentiment the author claims to see. Web apps are generally going to be less free than native apps. A native app doesn't have to be open and a web app doesn't have to be open, but a web app is definitely going to require that you connect to the host, will probably keep all your data stored away from your grasp on its servers, and may change its functionality and terms of service at any time. Native apps can share many or all of these traits but at least there's a chance you can control a copy of the software. The web is a terrible software platform for users.
But, you are partially in luck. Google Maps now allows you to download up to 120,000 sq. km. https://support.google.com/maps/answer/6291838?hl=en
He's got a point here. I gave up my MBPs for a Win 10/Linux notebook, and I've come across some opensource and commercial projects I hadn't noticed only worked on OS X and Windows (MAX/MSP). Sometimes Linux is supported, but as a third, less-supported option (Mathematica 10.4).
Maybe it's because I made the change that I am focused on this now, but every talk I watch has the Apple logo.
I've noticed some older coders with cred are rocking Lenovos and 3 to 5 year old laptops. I used keep a laptop for 4 or more years, but now I am guilty of 'upgrading' every 2 to 3 years.
If you don't play games there is barely a reason to download an app ever.
And really how bad or difficult is the mobile web? Use bootstrap and you have a pretty fine experience. I think we are focusing too much on slick experience instead of offering something useful.
BUT, if you need a Native App, make a Native App and don't try to fake it on Web.
Service workers are more of an issue - realistically if you want to build a serious web-app for iPhone right now you're going to have to build a shim around it for notifications and offline, although that can be quite small.
If you are aiming to provide a worthwhile experience to the users who will never install your app, or need some serious selling first then you need something on the web, so you are going to have a mobile site. Building a lightweight service-worker shim around that for iPhone and providing a couple of browser-specific stylesheets ought to be less work than full native apps.
The processing allowed is tightly controlled, and even with permission the push notification can't do anything behind your back - it has to result in a visible notification which will alert you that there's something you want to disable.
So iOs and Android are more than 90% of the market. You are telling me that it is cheaper to build and maintain 2 separate apps and pass on the remaining part of the market than have one app that covers everything?
Android device support is supposed to be a nightmare - there are so many versions to contend with, each device manufacturer can customize things.
iOS is easier to support but fighting with Apple can be quite the ordeal.
Using the web means you bypass these other issues but have to contend with the ones cited in the article. It sounds like pick your poison.
I could conceive that after the initial cost of building 2 separate apps, for iOS and Android, that perhaps it is less aggravating and costly to maintain them, as opposed to dealing with the web. However how complicated is the UI for the web apps? Can't you keep it simple? Unless you can show numbers I cannot in my wildest dreams believe that building and maintain 1 web app is more than twice the cost of building and maintaining 2 separate native apps.
What are you building that requires building a 2016 Web app with every new feature? Maybe that is your problem.
I think it's pretty reasonable to pass on the remaining 1.6%, especially as those probably aren't your target audience anyway.
You are, in fact, also building those four apps on five different architectures: Android, Windows, Mac, Linux, and iOS. There are others, but again, let's not kid ourselves.
Your complexity surface is the product of your feature-set, the quirks of each of those browsers as they silently version-up for your users, and the quirks of each of those browsers on each OS platform as they also vary in version.
If you're building a trivial web app, it's a web page and by all means build it directly in the browser. But when you start to bust out the profiler to figure out why this one interaction is butter-smooth in Chrome and runs like crap in Firefox from versions X to Y, except on Linux where it's X to Z... Two mobile platforms is fewer than 4 browser platforms.
Not really. If you are doing anything that relies on device hardware, camera, microphone etc... then device type absolutely matters - and it's even worse on mobile web because you can't get close to the metal.
Of course if you use cordova or phone gap you still have to do deal with those issues. I still cannot conceive when 2 separate apps are cheaper to maintain than one.
And yet, it is.
"And the Apple store issue is hard to quantify. You just don't know if they are going to let you in."
Yeah, you do. It's pretty easy to read the rules. And things being flat out denied, rather than told they need to fix something, is really rare.
There are many scenarios where I agree it is significantly harder to create a user experience building a web app that can compare with the native experience. But the premise of the article is that it is cheaper to build on 2 separate native platforms than it is to build web app?
The part that gets me is the author complains about things like multiple line ellipses and autocomplete text boxes. Here's a better question - why are multiple line ellipses core to your business? What value does a multiple line ellipse do for the app?
> You just don't know if they are going to let you in.
I can only shake my head at the venom being reserved for this post.
Of course YMMV. If you have control over what the user does like some kind of internal enterprise app then go for it.
Reminds me of this library I stumbled across.
People either respond with this is cool or your going against the web when I told them about it.
Also, I realize he's mad, but he really needs to expand his expletive vocabulary :)
It was a lot like today: loads of fragmentation and loads of vertical 'silos' with their own peculiar way of doing things.
Until the late 1980s you had a million little vertically integrated platforms: Apple II, TRS-80, Commodore 64, TI-99, IBM PC, etc. Even within manufacturers you had major incompatibilities, like Commodore VIC-20 vs. Commodore 64. Those were almost totally different machines.
Then the explosion of cheap IBM PC/AT clones changed all that and killed all the smaller players. There was a brief period from about 1988 until roughly 1999 when we had essentially one platform MS/Intel. That was MS-DOS and Windows, and the latter would usually run DOS apps. You also had one UI metaphor: the mouse and the keyboard and the screen. You had some hardware fragmentation but if you were targeting OS APIs and not trying to be bare metal it wasn't too hard to deal with. You mostly had one platform you could target and get 90%+ of the end-user market.
No more. Today if you want that 90th percentile of the user base you have to roll at least three completely different UIs at a minimum. Either that or you go all-web, which as this author correctly points out is a major headache if you want something that's mobile friendly. We've had good luck with bootstrap+react but it is more work than targeting a single native platform. (Not sure if I buy that many native platforms are more work... probably depends on the stack.)
On one hand all this diversity is interesting, but on the other hand if you just want to ship a damn product it's infuriating. It's also true on the backend: you have at least six Linux distributions, Docker, a million different 'stacks', clouds like Amazon building closed mainframe platforms like lambda, etc.
Is it also cheaper to bug fix, add features to, update apps when each native platform updates, hire developers who know details of each platform, etc.