Let’s Switch Dev Stacks! Again!?

When I first joined Inner Geek our dev stack was…well…disjointed. We were using Parse for some server platform stuff, Windows Azure to host ASP.NET web services to communite with iOS apps and MySQL for some other database stuff. As you can see, we were using a lot of different technologies, across a number of platforms.Most of these tools were used either because that’s what we knew or they were chosen because they seemed to solve a particular problem for us.

Parse is a great platform for rapid prototyping. It has things like push notifications, a nice management interface and it’s cloud hosted. My primary concern with Parse is that the code isn’t portable. You can’t take Parse code and run it somewhere else. There’s technological lock-in; dangerous when you consider that Facebook now owns Parse. We also ran into some performance problems/limitations with Parse that may have been solved by spending money (a lot of money) on a higher level subscription, but that felt more like a stop gap than a long term solution.

Something just didn’t feel right about using ASP.NET, running on Windows Azure to serve data to iOS Apps. We were using these tools, because that’s what we learned in school, not because it made sense.

MySQL and relational databases in general are great in many situations, but they can be frustrating when you constantly need to change schemas or when you need to scale. This part of our stack was the least of my concerns.

There had to be a better way.

We all decided that it was time for a stack change, but how do you choose the right stack for your team and your products? I think it can be broken down to Popularity, Developer Efficiency and System Performance.

Popularity

Devs love jumping on the bandwagon of the latest development tools, but you have to be careful about adopting a bleeding-edge technology because it may not survive. We needed something that was new enough to be exciting for Devs, but had been around long enough to have built up a great community. This is important for attracting top talent and it also makes it easier to find tutorials, answers to questions and contributed modules.

Developer Efficiency

This is arguably the most important characteristic when looking for a new Dev stack. No one wants to move to a stack that slows them down more than what they’re currently using. Hopefully your Dev team loves building things, so picking a stack that allows them to build even faster should get them pretty stoked and it will save you time and money!

System Performance

Cloud hosting is making this less important, especially because prices are always dropping, but a high performance, highly available system will keep users happy. It also means you’ll have to run fewer servers and spend less time tweaking indexes, config settings and system architecture to keep things running smoothly. REST APIs are great for us because they can interact with our mobile apps and mobile/web admin portals. The type of systems you build should always be considered when you’re chosing a dev stack, because each stack does things better than others.

MEAN Stack

After a lot of discussion and careful consideration we landed on MEAN Stack, hosted on Amazon Web Services (AWS). MEAN being an acronym for: MongoDB, Express, AngularJS and NodeJS.

Popularity: MongoDB and NodeJS were both released in 2009 and both caused quite a stir by using javascript in ways that no one thought possible. MongoDB is a javascript based No-SQL database and NodeJS is a server-side javascript framework; this ain’t your grandma’s javascript! Developers were so intrigued by these tools that they caught on very quickly and because they use javascript, the barrier to entry was really low. Express is a node package that makes it really easy to create REST APIs or serve static websites using NodeJS. NPM the node package manager is also a major contributor to the success and popularity of NodeJS. There are thousands of open-source modules available. AngularJS, created by Google, intrigued developers in the same way as NodeJS and MongoDB; it was a totally new way to look at building web applications. It’s fast, easier to code than jQuery and it utilized MVC, a common development pattern giving it a low barrier to entry. All of these tools have been around for a number of years, have a strong community and use a common, well established programming language and development patterns. They’re mature enough for production and new enough to be exciting for devs.

Developer Efficiency: Programming your full stack in a common language is about as efficient as you can get. You can move resources from front-end development to server development with little effort and as they get stronger in their respective area they inherently get stronger across the entire stack; win-win! MongoDB doesn’t use static schemas so the structure of your database can change quickly allowing you tobuild systems quickly and change things as you go without having to re-code the entire system. NPM has a package for almost every need, so you can get to writing your app logic quicker by leveraging these packages. Again, I can’t say enough about using one programming language for everything, it really speeds up development! AWS isn’t the cheapest cloud host, but it’s the most flexible and offers the most services: Compute Instances, Storage, Databases, Push Notifications, Email Services, Auto-Scaling and the list goes on. You can start on AWS for free and ramp up to handle millions of users without having to move your system to another host.

System Performance: MongoDB was designed with today’s massive, distributed apps in mind. It can very easily be run on multiple servers in multiple data centers with live replication; try that with MySQL. NodeJS is a beast too! Because it’s asynchronous, it handles I/O very efficiently on commodity hardware. For example, running on an AWS EC2 t2.micro instance ($12/month) one of our REST API’s has an average response time of just over 1000ms with a sustained load of 300 clients; pretty impressive!

MEAN Stack has been an amazing success for Inner Geek! But, is it right for you? That depends on a lot of factors. Make sure when deciding whether you need a new stack and what that stack will be that you carefully consider Popularity, Developer Efficiency and System Performance.

Show your support

Clapping shows how much you appreciated Greg Smith’s story.