If I was doing a project, I would use...

If I wanted to get something done as quickly as possible... I would use Meteor because provides the most complete solution (e.g. "full-stack" framework). It greatly simplifies tedious tasks such as setting up authentication, ensuring real-time updates synchronize properly, deploying to the cloud (Galaxy should soon make it easy even for production deployments), and building for multiple platforms such as Web, iOS, and Android.

If I wanted to make a small-scale application (e.g. internal app)... I would use Meteor because it's relatively well-used in small scale apps. If I don't expect the number of concurrent users to be that high, Meteor could likely work out of the box with relatively few performance tweaks.

If I wanted to make first-class desktop & mobile web apps... I would use React and React Native and share as much of the business logic together (perhaps using a Flux-like architecture like Redux). If performance on mobile web app was less stringent, I would consider evaluating using Meteor. Hansoft X is building a first-class desktop & mobile web app using Meteor and they used a few interesting tricks to ensure the mobile UX was optimal (read their blog post for details).

If I wanted to make a simple / relatively static website... I would avoid coding and use an out of the box solution like Wordpress + template or a full service solution like Squarespace. These tools are really easy to use and the benefit of hand-coding a static site is pretty minimal unless you're looking to create a very unique UI / UX (e.g. April Zero).

If I wanted to create a large-scale (in terms of user, complexity, team) rich web application... I'm not sure what I would use. I would first consider React + Flux + whatever on the backend (probably Node.js + Express unless there was legacy requirements). If there's real-time requirements, (e.g. seeing real-time messages from other users), I think using Meteor and investing in significant resources on scaling / load testing / etc would be the right solution. As Geoff Schmidt, co-founder of Meteor, noted, there's no easy, "off the shelf" way of building an application at "Facebook scale" without a lot of engineers working on the problem. 


Some random thoughts:

I think a year or so from now, when Angular 2 has been released and is used for production apps, it could be an interesting framework to use. For me, the benefit of a framework like Angular 2, is that it's borrowed some of the best ideas from React (e.g. unidirectional data flow) and combines it with a powerful set of supporting tools (e.g. animations, material UI components, testing tooling, etc.).

In general, I think Meteor has a lot of great benefits, many of which I've highlighted above. If I had to pinpoint, my key concerns, it would be around:

  • Integrating with legacy application / services - while Meteor is composed of many components (e.g. build system, packaging, minimongo, etc.) that are in theory swappable, in theory Meteor is almost always used as a full-stack solution and there's not a lot of examples of people using parts of Meteor and integrating it with legacy systems. This isn't to say you couldn't do it, but so much of the community / documentation is focused on using the whole Meteor stack that if you run into issues swapping out the Meteor build system with gulp because the rest of your company has a shared gulpfile for example, then you may have some lonely times debugging problems.
  • High scalability - If you know your application will have "Facebook scale" user requirements (which is highly unlikely, unless you're already working at Facebook / Google / tech company with huge user base, and in that case you probably have an in-house solution you can use anyway), then Meteor's lack of track record with very high scalability may be worrisome. However, to be honest, it's unlikely that your application will reach that scale. And the truth is, any system that you will create initially will need significant rewriting / finetuning to get it highly scalable.
  • Testing - to be honest, I would have expected Meteor to have a core / official testing framework by now. One of the best parts about Angular was that it focused on testability from the get-go and spawned fantastic testing tooling like Protractor and Karma. However, they announced they're going to move Velocity, the official community testing framework, into core, so this will get resolved eventually.
  • Hosting - I think once more information about their Galaxy service comes out, any concerns on this topic will be addressed. For now, I've read anecdotally that it's non-trivial to deploy a Meteor application, especially with scaling it out horizontally.
In short, I think if you're starting a new project, particularly as a startup, I think the benefits of Meteor -- namely, you can move fast and focus on your core domain -- outweigh the disadvantages.
views