Kullect's Technology Stack
This past week Jeff and I went to BigOmaha - a really awesome startup conference that is still somewhat under the radar. The best part of it was the networking opportunities during breaks and parties.
While at one of the events, we met a group of students from University of Nebraska who are thinking about working on a startup idea. They asked us about our backend technology stack, and I went into a whole spiel about what we use and why. Then they said, "You should write about it". I was like, yea - you're right. So here I am.
People always says, you choose the right tool for the job. In general, that is the right approach, but there are other factors that go into making your decision as well.
Our criteria was the following:
We need to be able to prototype quickly
There needs to be good documentation.
That actually made our decision pretty easy.
First, the web server. We needed to make a decision - do we go Ruby, Java, or Python. Our team was most familiar with Python so we went with that as our base language. Also, I became really good at prototyping fast with Python when I was at grad school at UCLA as well :-).
In terms of Python, we had to choose between Django, Twisted, and Tornado. We went with Tornado. It is flexible (ability to control everything from templating to how a specific type of request is handled), can scale easily (single-threaded / doesn't block), and is well documented.
Second step was the database. Right around the time we started Kullect, the NoSQL movement started. I tried out Casandra, Redis, and MongoDB, and I had previous experiences with MySQL. We decided to go with MongoDB - flexible object storage, built in mechanisms to do queries, and capabilities for redundancy and scalability that made sense. But more importantly, it was documented well.
To round out our stack, we actually use MongoDB as a queue system for async tasks, SendGrid for mail management, and UrbanAirship for push notifications. On the web, we do our templates with the Tornado and use Backbone / JQuery for fancy Javascripting, and TypeKit for fonts. Everything runs on Amazon Web Services - which has generally been good for us.
To summarize, when you choose your stack, a lot of different factors go in - does it meet your needs, is it scalable, etc... But one of the most important things is documentation. When you are building something new and learning at the same time.. good documentation will prevent a lot of headaches.