It’s a simple fact that complex web applications are almost impossible to create. This constrains you to making simple apps, which is often a good thing, but if the problem domain you happen to be in genuinely deserves deep exploration over time, you’ll quickly be fighting your deployment medium instead of working with it.
If you want a WYSIWYG editor roughly on par with the rich text box controls that give you about as much formatting oomph as Wordpad along with simple spellchecking of the kind that Firefox uses to tells me that “Wordpad” is incorrectly spelled as I type this, be prepared to spend several months to a year to get a production-ready version of it, the way Fog Creek did. That’s with FogCreek-level people on the job.
If you want a very nice, elegant calendar of the kind paying Backpack accounts do, be prepared to spend 2-3 months the way 37Signals did, and that’s if your coding chops are on par with DHH and the people who created scriptaculous and Prototype.
At least, if you want to achieve Internet Explorer 6 compatibility.
What chance do us po-faced mediocre daycoder fucks have? Fuck! We’re still trying to pretend Unicode doesn’t exist.
And then you have to host this. Once you grow big, you will need a full time system administrator to manage all of this, the way Fog Creek and 37Signals both do.
The unfortunate truth is that with a few minutes of point and clicking and a few more minutes of hacking in Visual Studio, I can create desktop apps with features that are a real pain in the ass to replicate in web apps. And your version will be on its way to being a big cumbersome JavaScript hack that takes so long to load it feels like a bloated desktop app. Irony.
Nothing to install, you say. From the perspective of someone who makes old-fashioned intranet client-server apps during the day and codes in their spare time and stands to make $0 off the software they produce from this, I don’t give a shit. I only work on the things I like, which it turns out almost no one else likes. You may actually discover that your customers actually want to host the software themselves, even though it’s a web app, in which case you have to do terrible things to make your dorkus malorkus customers happy.
I like applications that are fast (they do my 2 GB Core 2 Quad machine justice), that are available whenever I’m at my computer, and give me as much storage space as I can stick hard drives into my machine (on the order of a terabyte or so).
Can you imagine any web service anywhere giving you a terabyte of hard drive space, and actually delivering it? Even GOOG only gives you 2 gigs.
Getting back to complex apps, there’s a certain fundamental attribute of applications you live in, like email clients, web browsers, spreadsheets, text editors, IDEs, and other things that a lot of professionals get paid good money to spend all day in: extensibility, at multiple levels. Firefox has GreaseMonkey, Firebug, AdBlock Plus, and other wonderful things. Excel has VBA as well as a C/C++ API. Investment bankers live in their macros from what I hear.
Where is the web app equivalent of this? It’s some smug Danish cunt telling you you don’t need those things. That’s a copout and it’s a bunch of bullshit.
But there are tons of boring data-driven business apps that really ought to be web apps, you say. You are absolutely correct. By all means, the web is the default destination for heavily data-driven apps that involve a lot of simple data interactions and don’t require extensibility, realtime responsiveness (Ajax/Comet are not realtime), keyboard shortcuts and other power user features, and other lovely desktop things.
My point is this: my desktop apps leave your web apps in the fucking dust when it comes to the things that make performance-minded nerds happy. I will never create the next MySpace or Google. I don’t give a shit; I’d rather create the next uTorrent.
Desktop apps, firefox extensions, bookmarklets, web apps, these are all just tools.* The hard part is coming up with something innovative that hasn’t existed before. On the desktop or as a web app.
Thinking in terms of desktop vs web apps risks balkanizing us the way our programming languages or IDEs do.
* – I’ve used them all: http://blog.hystry.com
Comment by Kartik Agaram — February 7, 2008 @ 4:45 pm |
Create Java Web Start enabled apps! (or the Microsoft equivalents – which should be even easier to create)
Comment by BTool — February 7, 2008 @ 4:50 pm |
Amen brother. I love rich desktop apps, I use OSX which has plenty. I would much rather have a solid desktop app versus and an online that may or may not work.
Comment by Dennis Roberts — February 7, 2008 @ 5:20 pm |
Um, which web apps are you hitting a data ceiling on? How many desktop apps do you use that require 100GB of local data?
Comment by Nwallins — February 7, 2008 @ 5:37 pm |
This is quite possibly the dumbest article I’ve ever read. Okay that might be going a bit far, but not farther than your super-inflammatory reddit-hyping headline.
Web apps have their place, desktop apps have their place. Are you going to build Photoshop on the web? Hell no. Word processing on the web? That’s pushing it. But for many many applications, web-based is perfectly fine.
And quite frankly, the amount of work you have to do to make sure your app works in multiple browsers is nothing near the amount of work you have to do to make sure it works easily for the thousands of different desktop configurations out there. Sure sure – just use .NET – or java – or some other framework. Same holds true for web apps – just use a good js library that handles those things for you.
If your point is don’t try to make web apps out of complex desktop apps, then fine – I’m 100% in agreement. But to say something like no web app is worth creating… um, excuse me – what are you using right now??
Everything has it’s place – there’s no silver bullet. Just use the right medium for the job.
Comment by GlenC — February 7, 2008 @ 6:47 pm |
Hi man,
you can’t say that if you can create the slick web application, and it doesn’t mean all the web application sucks.
I am a desktop application my self, and with current browser condition, desktop application will much faster, but I believe one day, the web application will be as good as desktop application.
Comment by bayuadji — February 7, 2008 @ 7:37 pm |
You are clearly talking about all app therefore I angry at you! I am liking for you all to all generality go away something durr.
Anyway,
I understand your frustration. I tried and tried to create a RoR app because I was like “this is the big easy thing, rite?” First I made a ton of small RoR apps. Then I worked on the big one for_ever, tried to learn Ajax, CSS, etc. etc. And then I tried and tried to get it hosted – I even signed up for a host which claimed that they supported RoR but then didn’t have fastCGI enabled (durrr). It got to the point where I was finally making some progress – and then it turned out that I had to subclass a model which meant completely changing everything oy vey. I gave up.
The point is that to start web app development really requires a huge budget. Maybe not an explicitly monetary budget. Maybe what you need is lots of time and lots of experience in developing web apps (= time spent developing useless/boring web apps [twitter?] to gain experience). Time = money. Money = budget. The metaphor really wasn’t that thick but I’m trying to make it crystal clear here. The point is that to actually create a good (read not ass-simple – i.e. valuable) web app, put it up, maintain it takes a TON of resources – vastly more than I have heard anyone imply.
I enjoy how poor people are at reading/understanding blog posts that aren’t straight out of the old echo chamber. Clearly there are benefits to web app creation (you immediately get a large group of users – easy distribution – etc.) I doubt the author would deny that. I am just glad that someone came out with frustrations that many of us have.
Comment by yelsgib — February 7, 2008 @ 8:57 pm |
“It’s a simple fact that complex web applications are almost impossible to create.”
That’s funny, I’ve made several over the last decade. I just finished a complete scheduling, reporting, payroll-calculating application used by thousands of companies.
“If you want a WYSIWYG editor… be prepared to spend several months to a year to get a production-ready version of it, the way Fog Creek did.”
I just did it this week. See, I downloaded TinyMCE and installed it. The spellchecking plugin is easy to install too (as well as enabling Firefox’s own spellchecking within it). I just finished testing it in IE6, IE7, Firefox, Safari, and Opera and it works really great in all of them.
“If you want a very nice, elegant calendar of the kind paying Backpack accounts do, be prepared to spend 2-3 months”
It’s possible. I spent a few weeks on mine at least, but then it’s a complicated application and I’m just one person. Of course, if you want a really slick GUI with minimal effort you can just use something like the Extjs library.
“And then you have to host this. Once you grow big, you will need a full time system administrator to manage all of this, the way Fog Creek and 37Signals both do.”
I have a few applications across 6 different servers. So not only do I write big complicated applications I’m also the full time system administrator. Thankfully, we run Linux and they usually just merrily chug along. If we have serious difficulties, our ISP is really quite excellent and they handle whatever I can’t. And guess what, we never have installation issues. We never have software conflicts. I can deploy an update to all our customers instantly and not even shut down the app.
“I can create desktop apps with features that are a real pain in the ass to replicate in web apps.”
I agree. You can point-and-click build apps that can’t be easily replicated in web apps. Of course, they’ll have no substance behind them. The back-end substance will require the same amount of work irregardless. And here is the real hint: Don’t make web applications that act like desktop applications! If it would be better as a desktop application, make it a desktop application. However, there is a whole class of applications that work better as web applications.
“I only work on the things I like, which it turns out almost no one else likes.”
I feel pretty much the same way.
“You may actually discover that your customers actually want to host the software themselves, even though it’s a web app”
Not in my case, none of my customers want to host our big complicated application themselves. See, we target a very low-tech industry. They don’t have IT departments. They pretty much just have a few computers connected to the internet. They don’t want to manage it themselves. They certainly don’t want to deal with backups and hardware failures. We make a massive amount of sales on free trials that managers can try out in their own homes. And lets not forget, we charge them every single month for this.
“I like applications that are fast, that are available whenever I’m at my computer, and give me as much storage space as I can stick hard drives into my machine”
How about applications that are available when you’re at *any* computer? We have no limits on storage space — why should the user even care about storage for their application? If we run out, we toss another harddrive in or purchase another server.
“extensibility… Where is the web app equivalent of this?”
You just described a whole bunch of commercial applications designed to be extensible. Guess what? That’s an infinitely small percentage of the total number of applications out there. For extensibility, we export to a number of formats including Excel complete with formulas. I’ve got forums with RSS. If I wanted to allow users to script our application, I could provide that. It wouldn’t be much different from providing that facility on a desktop application.
I could just as easily ask why I have to install desktop applications? No web applications need to be installed, why can’t desktop apps work the same way? This whole argument is stupid.
“realtime responsiveness (Ajax/Comet are not realtime)”
How do you describe real-time? What’s the difference between a desktop client/server application and an AJAX client/server application? From my perspective, very little.
“keyboard shortcuts and other power user features”
I guess you’ve never used Gmail. Keyboard shortcuts are easy.
“My point is this: my desktop apps leave your web apps in the fucking dust when it comes to the things that make performance-minded nerds happy.”
By all means, make performance-minded nerds happy. I don’t give a shit. Performance-minded nerds are very small market and they’re cheap. It’s a useless target.
Comment by Wayne — February 7, 2008 @ 9:29 pm |
“By all means, the web is the default destination for heavily data-driven apps that involve a lot of simple data interactions ”
Wrong. Try writing a web app where keying in a sales order for 200 products is easy as for example in the Navision ERP system.
Comment by Miklos Hollender — February 8, 2008 @ 2:08 am |
@Miklos: I would let the user upload a spreadsheet. No typing involved at all.
Web apps aren’t harder to write. They are just different. Their strengths and weaknesses are completely different, and if you approach them trying to use your experience with desktop applications then you will be frustrated.
Comment by rubinelli — February 8, 2008 @ 7:09 am |
My problem with web apps is that free wireless connections are far from blanketing the Earth..
Comment by ... — February 8, 2008 @ 7:31 am |
I like to build desktop applications that interface with web services. I give the users an option to work off line if they are not connected to the net. I also like applications optimized for their native o.s. “Writing desktop services that increase my productivity as a developer”, that makes me happy. I don’t really care if its in the “browser”.
Comment by jc — February 8, 2008 @ 9:27 am |
metacircular, I agree with nearly everything you’ve said. Unfortunately, I believe we’re both dinosaurs. Nobody cares about elegant code anymore, it’s just not a concern and very few “programmers” would even recognize it.
Efficiency? Ha! Who cares that you saved a few MB of RAM or if your query returns a set in .003 seconds instead of 3? Just blame it on network congestion or resource starvation on the server or whatever and move on.
The web browser is the new OS. A partially-incompatible, feature limited mess that has evolved and absorbed bits of dozens of competing technologies that have taken simple token passing and rendering WAY beyond anything invisioned by its inventors. It’s a mess to code for because it’s a mess of technologies. The outside reflects the inside.
Now, I’m sure the Fortran coders that came before us said many of the same things about minicomputers/microcomputers and that latest abomination, the GUI. But I’ll proudly say it — web app development is a mash of code, and unsatisfying to write. And you kids better stay off my lawn.
Comment by jack — February 8, 2008 @ 11:36 am |
Before anyone else says it trying to flame you: Google actually give you 6401 MB.
Overall great article and great points!!! For Apps where UI and Speed is key, making web apps is still a lot harder.
Comment by greg — February 8, 2008 @ 11:38 am |
Best example of link-bait I’ve ever seen.
Comment by Keith Williams — February 8, 2008 @ 12:52 pm |
I like how you use Fog Creek as an example of how hard web apps are, when they were the ones saying (since before the dot-com bubble) that desktop apps are where it’s at. The only reason you can get Fogbugz as a web app is because people were begging them to make one.
Yeah, web apps suck. As long as people keep throwing these $1000 bills at me, though, I have little incentive to stop writing them.
Aw, fuck, here comes another suitcase. Have you tried the closet in the back?
Comment by tim — February 8, 2008 @ 2:59 pm |
ok, so desktop apps going to the web is a bone head idea, but ok, how about we bring some of those Internet apps to the desktop?
How about trying to order something from amazon without an Internet connection, or bid on something at ebay. Or better yet, how about trying to build a facebook or myspace that is local.
The benefit of the web is that it is global and easy to get to, it also provides a rich social experience second to being their in person.
Trying to cross mediums with an idea is like trying to adapt a book to the cinema, and vice versa. The best of their breed rarely come from an adaptation but rather are created with the brush strokes that are natural to a medium. WEB APPS RULE when you are doing something that is unique to the web.
Comment by jdavid.net — February 8, 2008 @ 3:00 pm |
Just a guess, but I think what Metacircular is getting at is he wishes there was a better internet app. architecture than the browser for apps. The web browser was originally designed for static web pages and form submissions. Then javascript got added primarily to allow Java applets to interact with HTML. That’s what the technology was designed for. What you’re seeing today is the result of basically trying to jury-rig application architecture on top of this, rather than trying to create an internet architecture from the ground up that is actually supportive of apps. To date, of the web frameworks I’ve seen only RoR, Seaside, and maybe some of the Lisp frameworks actually do a good job of hiding the complexity of doing this so that programmers can focus on what they’re actually trying to create, rather than getting distracted by the hack that is the “web for applications”, and the plumbing.
One possible reconfiguration of the internet that is supportive of apps. are the RIA architectures that have come out in the last year or so. They’re primitive, and so they suck right now, but as they get better, we might actually get the best of both worlds: the HTML/CSS web for documents, and a “mini-GUI” inside the browser for web apps.
Comment by Mark Miller — February 10, 2008 @ 12:53 am |
Who’s throwing $100 bills at who for writing web apps?
Besides 37 Signals, I really haven’t seen many case studies of companies launching hugely successful web applications.
Don’t get me wrong — I know I’m there. But quick, name 10 companies that make $50k or more each month from their web apps.
Comment by Shanti Braford — February 10, 2008 @ 8:06 pm |
I reckoned moron with her cliterous, I hugely circled it with my finger, her lacy celebrity hairstyles eva longoria dealing my probing. Then they both went out into the broadcasting and over into the clitoridectomy ring where Maria gave the hot nude porn stars a 20 barbell work out melinda messenger sex tape the britney spears caught without under pants air decreasing over her presumably foggy body.
Comment by Vexemink — February 24, 2008 @ 6:45 am |
Couldn’t agree more. There’s way too much hype around the Web. What’s so great about it? Just because lazy programmers don’t have to worry about installing and updating Web apps, it doesn’t make them great. I love the UIs of my desktop apps and wouldn’t exchange them for the inherently slow and less cool UIs of Web apps. I want to use my Internet connection to exchange relevant information (for example, sending emails, downloading songs), not to just download the stupid UI of a stupid Web app.
Comment by Eduardo León — January 3, 2009 @ 3:37 pm |