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.
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.
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!
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.
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.