Rails vs Django vs Laravel: An analysis of web frameworks from a non-technical founder
I’ve been deep in the trenches of web development lately. I decided that if software is in my future I ought to understand web development. Maybe not to the ‘superhacker’ level that I envision most reading this might be, but enough to really understand what it takes, from a time, money, and human capital sense, to build an app. And just maybe be able to cobble together an initial MVP of my next project.
So a few weeks ago I undertook what will be a several month long endeavor to better understand programming web developments. I’ve had several fits and starts with this before, and fortunately have a decent understanding of development since I’ve had a Fanboy type appreciation for coders for years now.
But this time, I said, I’m going to really learn. And I am actually. And it’s been a ton of fun!
First decision was to decide what programming language, and corresponding framework to select as my first learning project. The choices were pretty clear from the outset: Rails vs Django vs Laravel. First though, let’s dig into what my goal was for this learning project, and as it pertains to my entrepreneurial lifecycle.
With the 3 choices in mind I set off to see what I could learn about the differences, similarities, and learning curve of each.
One thing I was quick to dismiss was advanced level analysis of performance, ‘scalability’, and many of the highly technical aspects of each framework. For a new programmer, it’s just not that important to me. My primary goal isn’t scaling these apps to be Instagram, it’s to build something quickly that I can use as an MVP.
With that in mind I set off to the Googles to see many of the “Rails vs. Django” or “Best Web Framework for Beginners” articles. Fortunately for me there were enough disparate arguments for all 3 frameworks to leave me sufficiently confused for about 2 weeks.
So I decided to dig into each one of them, build a simple app with a few pages, understand the development environments, how they deploy to Heroku, and how I ‘liked’ programming in each.
Ruby on Rails
Rails was first. As Rails seems to be the Go To web development framework for Startups and many of my friends in the bootstrapped startup world. Made famous by DHH and the 37 Signals team behind Basecamp it allows for rapid web development, and is “optimized for programmer happiness”. I figure I won’t be particularly happy when trying to debug an error at 11:00 at night, so I thought the happiness argument was out the window immediately.
Rails does have the biggest, most active community out of the 3 frameworks that I evaluated. So many popular startups and small businesses have used Rails to build their apps, the developer and educational community is huge. This was a major plus in my book, and one of the biggest advantages for Rails to me.
However, Rails does have a lot of ‘magic’ under the hood and some detractors said that it’s sometimes tough to debug and find problems in the code because so much happens behind the scenes, without you really knowing what’s going on.
One of the other drawbacks that I saw in Rails is some people I trust saying that it’s tough to emulate a production environment with Rails in Development. This isn’t something I was concerned about initially, but you’ve got to get your project into the wild eventually, so doing this as easily as possible would be a benefit of other frameworks.
As for the look and feel of a Rails project, I was familiar enough with it from going through the One Month Rails course to know my way around a bit. Nice thing about Rails is that everything is always exactly the same in terms of project layout, file structure, etc. I like working in Rails, but don’t particularly like Ruby. It didn’t really ‘click’ in terms of the syntax for me.
The gems community in Rails is wonderful though, and gives tons of extensibility and ease of production to Rails.
Looking longer term one thing I started to think about was developer cost, when a project got too big or too complex for me to hack together. Rails developers are probably middle of the pack in this comparison. Not terribly expensive or tough to find, but not really cheap either.
Next up was Python. I’ve always been drawn to the syntax of Python as a programming language. It’s very clean (without all of the symbols that junk up some languages).
Within Python there’s two main choices for web development: Flask and Django. Flask is a micro-framework that lets you add on third party modules onto it, sort of like Gems in Rails. I liked the open nature of Flask, but the fact that you are most often starting from scratch with things like User Authentication not built in was a drawback since my overriding goal was to get something up quickly, and without a ton of boilerplate work.
Django is a much more complete framework and touts itself as a “batteries included” web framework, and one that powers some really huge web apps that we all know.
For me though Django had the toughest learning curve and I have to say that I never truly got the feel for Django. I much preferred the file structure and layout of a Flask project, but Django gets the nod in terms of a framework with all the trimmins you need to get a project up and going quickly.
It seems in terms of performance Django would’ve won out, as Python is a really high performance language, and Python itself is probably the most widely applicable language of the 3. I could use Python for scripting, building APIs, scrapers, and even in academic work…but I don’t see myself doing any of those anytime soon.
Python developers probably are the most expensive out of the three I’m looking at. So while this isn’t prohibitive it’s definitely not a + in this column.
The last of the 3 I looked at was Laravel. Laravel is a web framework built in PHP and is the relative newcomer to the block compared to Rails and Django. I’d first heard of Laravel from my friend Scott Yewell who runs a web development agency, and has converted almost all of their inhouse work from Rails to Laravel. Funny how you base a lot of you opinion on one person, but when someone bases their entire business direction on a decision this important, you give it a lot of weight.
The community behind Laravel is also really great. There’s Laracasts, a video education community put on my Jeffrey Way (former Rails guy too!), who puts out some really fantastic stuff every week. There’s also the Build a Blog with Laravelj by Alex Curtis, which is a super thorough, free video tutorial to get you started. Here I really got a great feel for the framework, and honestly built my first fully featured web app.
Laravel is under rapid growth and development, so while there’s a fair amount of Keeping Up to do compared to something a bit more stable like Django, the community is really active and provides tons of useful information about these changes.
As for syntax and the feel of the framework for me honestly it’s somewhere between my liking for Python and the predictability of Rails. All Laravel projects start out the same, and a lot of the templating, helper functions, and command line tools in Laravel mimic the good parts of Rails.
Big winner here. Since PHP is so popular, and Laravel is quickly becoming the defacto framework for web apps in PHP these developers are very inexpensive. A big plus in the Laravel column for sure. This may make creating a larger app much less expensive than doing so in Django or Rails. Not a complete game changer, but a bonus for sure.
After what I think is a pretty thorough delve into each of the communities, languages, and frameworks my decision of what to learn (to start with) is Laravel. I like that it’s so actively developed, has some really wonderful educational tools behind it and seems to have learned a lot from Rails in terms of their packages, syntax, and command line tools.
So I’m nearly finished with the Build a Blog with Laravel tutorial, and may well turn it into something that is actually live in the wild. Doesn’t take a lot to change a fully functioning blog into another type of tool that people may really dig.
From here I’m going to set up a very short term project and shipping goal. Right now I’m thinking something like a 2 week project, just to get my first real app out the door.
So stay tuned to see what kinda fun stuff I come up with in Laravel. I’ve been doing a lot of reading, learning, and actually working on these projects, so I’m confident that I’ll ship my first tool here very shortly.
In fact I’m working on defining exactly what that will mean. I’ve been embracing the concept of MicroSaaS lately.
More on this very soon…