When you’re building a new web or mobile app, there are really 2 factors to consider when deciding what framework to use: 1) what tools you know best and 2) the best tool for the type of application you’re building.
When you’re a non-technical founder hiring developers, then it’s really about #2. For the sake of this post, since this blog is mainly targeting non-technical founders (and not-yet-unicorn coders that still require technical help), I’ll focus on #2.
When To Use WordPress / Joomla / Drupal
These are all content management systems (CMS). In some cases, it makes the most sense to prototype with a CMS when you don’t yet have product-market fit. The obvious case is a blog, where a CMS can easily handle hundreds of thousands of users when you have solid hosting. The not so obvious case is when you’re trying to build a dynamic application. Programmers will say that eventually it’s not worth the trouble, because CMSes are a bit like a tree branch: it’ll bend to your will, but bend it enough and it’s gonna break (and cause tons of technical debt in the process).
But sometimes, there is an existing plugin or framework built on top of a CMS that works. For example, social networks. There’s jomsocial on joomla, buddypress on WordPress, and if you need something that’s closer to a middle ground between custom programming and CMS, drupal. There are custom plugins for all 3 platforms that allow aggregate ratings, if you’re trying to build a review site.
In short, if there’s a custom plugin that does what you’re trying to test, a CMS would absolutely be the easiest, fastest way to get started. And even if you need to hire technical help, programming help for a CMS is always way cheaper than any other programming language.
When To Use Ruby on Rails or Laravel
First, Ruby on Rails and Laravel are not programming languages. Ruby is a programming language, and PHP is a programming language. Rails and Laravel are two frameworks that enable you to develop custom apps quickly using Ruby and PHP, respectively.
The reasons you’d look at either of these frameworks over a CMS are:
- You know some Ruby or PHP
- Your app is too data-intensive for a CMS
- Your main goal is a web app (or you plan to go mobile with a Rails API as backend)
I’m not a PHP dev so I haven’t played with Laravel, but I have built some things with Rails. First let me just say that a junior developer could get very very far with Rails. Much of this is due to the fact that Rails has a gem for just about everything (gems are basically more advanced WordPress plugins). You can finagle a database with ease from the command line using Active Record and via inline MySQL. And there’s just so much existing documentation at your fingertips. I have yet to run into an issue that I couldn’t solve by searching StackOverflow.
Where Rails has run into a bit of disuse is when you’re trying to build a Single Page App (SPA) or an app that feels like a SPA. This means that instead of routing to different pages for different purposes, you want to refresh parts of a parent page. This is basically how all the modern social apps like Instagram work. The Rails community is trying to catch up to this huge market by launching Rails 5 with ever-evolving turbolinks and Action Cable, although much of the developer community thinks it’s still not fully there yet.
My personal opinion? If you know Rails (or Laravel) use it to prototype any app where you need good SEO for your user-generated content. Your time to market will be much faster, and I believe that whatever disadvantage you get from not having a bleeding-edge SPA is compensated with the out-of-the-box SEO advantages you get from having unique pages for all your content, and the shortened time to market from using The Rails Way.
Also: ignore the myth that Rails is too slow unless you have 100k users. If you’re just starting out and your app is already slow, the reason it’s slow is not because of flaws in Ruby, but because your code needs refactoring.
I leave you again with this gem from Ben Horowitz: “There are only two priorities for a start-up: winning the market and not running out of cash.” Rails is built for both.
- Rails is too slow for your app
- Your primary goal is a Single Page App and/or hybrid mobile apps
But once you’re experienced enough, the upside is that JS frameworks are undoubtedly more powerful, numerous, and flexible than Rails. Node.js is just far more powerful than Rails. Once Rails hits 100k users, you usually run into serious problems. Not so with Node. As far as the extensibility factor: Node is catching up to Rails in terms of NPM modules (the analogue to Rails gems). And I just have to mention my full-stack JS friends tell me Node is really fun to work with.
So if you’re building the next big mobile thing, I just don’t see there being a better option. This or some form of it is the future.
Keep Calm and Think About The Best Tool For The Job
I hope that helps you navigate a landscape of too many programming frameworks by highlighting my thought process behind picking one for the purpose, whether it’s prototyping or scaling beyond 100k or going hard after mobile.