Zapier has grown by leaps and bounds since this post! Read a newer post about growing our stack!
We at Zapier are all hackers. You can even see Wade, our resident customer dev guru, regularly committing to our GitHub repo. So its pretty important we use tools that we are all fairly familiar with, but also ones that are best suited for the task at hand. That's a lot of tradeoff, but one we've handled fairly well.
Language & framework.
Python/Django on the backend and JS/Backbone on the front.
Since we got started at Startup Weekend, we had to pick something we were familiar with so we could iterate fast. The key word here is familiarity, and Django was an obvious choice. Rails, Node.js would have all been great choices, but nearly none of us had built anything significant with that stack, so we stuck to something we knew well.
On the front, we started with straight JS, hacked together by Mike for a quick, live demo on stage. We knew this would need something more sophisticated, but it served its purpose. Right now we're working a much, much more robust frontend powered by Backbone.js which will supplant our current MVP.
Linode, nginx, Gunicorn, MySQL, Redis and RabbitMQ.
Right now we're hosting everything with Linode, which makes it easy for us to monitor and spin up. We thought about EC2, but again, the familiarity we had with Linode let us move a little faster.
We currently have three boxes on Linode:
Web: running nginx and gunicorn.
DB: running MySQL & redis.
Messaging: running RabbitMQ and Celery.
nginx was a great call, its a lot easier to set up and maintain over Apache (especially for non-PHP apps), and Gunicorn works brilliant in conjunction.
We debated on using PostgreSQL, but decided to go with MySQL, again, for familiarity's sake we need to just get up and going. Redis is another no brainer. Right now we're using it as a glorified memcached, but the opportunity to use it for other things made us chose it over memcached.
Finally, celery and RabbitMQ for every single scheduled background task (and there are looooots of them). Celery truly is a best in class piece of software, as is RabbitMQ. We took a bit of a gamble as both were products none of us had much experience with, but we know there are dozens of people out there using Rabbit and Celery in scaled environments, and task scheduling was our biggest "unknown". We're glad we made the call.
Coffeescript, SASS, and many, many Python packages.
SASS is also another wonderful invention. The easy nesting alone is worth the effort of installing and using it. We cannot recommend it enough. Reusable mixins make life wonderful.
Since we work with dozens of APIs, there are few things that have made my life better moreso than
python-requests did. Its sane internal API made it easy for us to quickly iterate and add new API's in a jiffy (the current record is 13 minutes to integrate Hipchat).
Wrapping it up.
To think that all these first class tools are available to us for free is just... well, mind-blowing. We hope to eventually give back to the community through patches or other fixes we've done to various projects, and maybe even releasing some projects of our own.
Now, back to work...