views:

467

answers:

10

I'm having trouble deciding if I want a project of mine to be web-based (as in a web-app), desktop-based (a desktop application), or a desktop application that can sync or connect to the cloud.

I don't know if anyone else would have an interest in this application, and it's only going to be for me, so I'm leaning toward desktop application. If, for some reason, I finish it, release it, and people actually like it, I might see about making it sync to the cloud as well (think v2). But I'm not sure how hard it is to make such a radical change, and I don't want to end up with something good that is useless because I made a poor choice before I even started the project.

Is there any sort of guidance for this? Any rules of thumb or best practices? Any personal experiences?

If the language matters, I'm thinking about Java simply because I'm most comfortable with it, and it would easily allow me to share it with my friends for testing and if I get stuck and need help from someone else in person.

+4  A: 

If you release as a web-app, you won't have to port it over. You'll also have access to it wherever you go.

madcolor
A: 

My default choice is to go with a web solution, as it's easier to deploy and generally multi-platform. The only time I go with winforms apps is when there are pressing security, performance, or functionality issues that require it.

Danimal
A: 

Previously you'd have written a desktop application, as tool were better for that and you'd have written it faster. People used to want web apps, but always ended up with desktop.

Nowadays things are different, you can write a webservice just as quickly and easily so there's no reason not to go web-based.

The advantages of web-based are flexibility, scalability and ease of deployment. It won't be as responsive as a desktop app could be, but that's not so much of an issue if you think about your design.

gbjbaanb
+4  A: 

I base my choice on the GUI mostly. If the GUI is going to be complex, and (needs to be fast or will have aspects of it that will take a lot of time to process) then I will go with the Desktop. If it is simple, and will always have small data sets to work with at once, the I will go with the Web.

I have worked on an app that was made as a web app, when clearly it was better suited for the desktop. It was a massive failure. I don't know HOW customers put up with it, cause I certainly wouldn't have used it. The desktop version (which took over 6 months to re-write) blew the web version out of the water.

That being said, I have seen some nice web apps.

MagicKat
+16  A: 

I generally ask a few questions:

  • Can it even be done on the web? Something I did not too long ago involved an image editing component, and had to be a web app. It involved much pain to get this work, and a desktop app would have been a far better way to go.
  • Will I need to access it from anywhere? Yeah you could load it up on a thumb drive, but the web is far more feasible in this case.
  • Will there be multiple users? This could go either way, but "long tail" stuff usually means web.
  • What tech do you want to use? The latest and greatest WPF based UI? Desktop (yeah yeah, silverlight, let's not go there ok?). The brain dead stupid easy user management of Django or others? Web.
  • If it were a web app, will you need to worry about common attack vectors like SQL Injection, XSS, etc? A desktop app has its own issues here too, but tend to have less exposure.
  • How resource intensive is it? Will 10 users kill performance of a web server?
  • Versioning on the desktop can be a pain, whereas with a webapp everyone is on the same version. This can bite you though, see the New Facebook user pushback.

EDIT:

  • Cost can be a factor too. A web app with a database backend typically means a web server. If you want to stick with, say, the Microsoft Stack, you'll need licenses for SQL Server which can get pricey. Open source is cheaper, but may not be an option in all cases. "Serving" a desktop app is generally cheaper.
swilliams
+3  A: 

All I can suggest are several factors that would be relevant. How you determine the answer and weight for the factor is up to you and other circumstances:

  • What is your audience? Do you have any control over them?
  • How complex are the interactions you expect to implement?
  • Do you require near real-time data updates?
  • How often do you expect to update the application after the first release?
  • Do you expect a well-defined set of client platforms, or can you not predict that?

Note that your choices also can include a Java WebStart application, which mitigates some of the disadvantages of a typical desktop application.

David M. Karr
+1  A: 

Sometime web can be good and sometime not. We are in a new wave that go in the web but do not forget few things:

  • GUI in web is more complicated because of multiple browser
  • People who need to work on your system might not like working the whole day in a browser
  • Web can be slower for some application (image editing, hard job that require a lot of CPU)
  • Rapid Gui like Visual Studio for winform are faster than for web

But web has many advantage in the deployement and in the portability. If your system is well structured you could make both or change to one to other later with something build with MVC. Just change your visual and you will be fine.

Daok
+3  A: 

I'd say that most applications should be desktop-based. The advantages are faster and more fluid apps.

You should only create a web application if there are obvious benefits from it, like access from everywhere. (If that's necessary for your app.)

A downside of web applications can also be that it is dependent on the developer, if you quit supporting it all your users (if you'll have any) can't use it anymore. Furthermore, there is a chance that users are not willing to store their data online.

Ultimately it depends on what kind of an application you want to write. Even if you create it as a desktop-app, you can later on rewrite it for the web. Often a 2.0 version of software needs almost complete rewriting anyway.

Georg
+1  A: 

If this were an application to be used my multiple users, with shared data, you're probably going to want a server anyway. In that case I'd lean towards a web application. Otherwise you've got the complexity of syncing data between the desktop and a server.

Craig Fisher
+1  A: 

Two important questions not on the list so far:

  • Will the first version have any features that need lowish-level access to hardware?
  • Will future versions have any featuers that need lowish-level access to hardware?

It's pretty easy to answer the first one, but giving the second one some thought can save you some headache down the road.

Ryan