Our typical technology stack.
We have been working on some of the amazing projects and have come up with a typical tech stack which covers all the areas of the Software development and scales well in future.
With every new client, we had to explain our technology stack and how we’re going to develop the app in an efficient manner. So, we decided to put this blog as a reference point to our clients and also for those who are interested to know how we develop.
System Architecture
Before we dig into the specifics of which tool we use, et al. Let’s see how does our typical system look like:
We love building distributed system and we strongly believe in: Loosely coupled and tightly cohesive approach. So, we keep our back-end system and front-end system completely independent. The back-end system is basically a well documented Restful API and the front-end is a Nodejs web client or iOS/Android client, which consumes the API to work for the user.
Programming languages and framework
We primarily use Python and JavaScript for all our back-end and front-end development. We have been building applications using Django, Flask, Tornado frameworks and they are pretty decent in terms of performance.
Did I tell you? Instagram has been built on top of Python and Django.
React, Backbone, and Ember has been our main choices for the front-end web app development frameworks with HTML5 and CSS3. We also use Zurb Foundation framework for building responsive websites. But recently, our front-end engineering team has started to prefer writing their own code for responsive websites with any number of grid size using Toast.
Databases
We have been extensively using relational databases precisely Postgres & MySQL also schema less databases like MongoDB & Redis for the projects we have worked so far.
Queuing System
To process asynchronous tasks, we primarily use Celery and AWS SQS as our queuing system.
Email Integration
We use Mailgun, Mandrillapp with Mailchimp templates, AWS SES for sending transaction emails and managing incoming emails.
Search
We use the powerful Elastic Search to integrate the search functionality within a product. We know for the fact that, almost every product requires some sort of search functionality and Elastic search is highly scalable and is a powerful solution for search.
Payments
For credit card payments, we use and recommend Stripe and Braintree, since both of these services are very flexible and have a robust API. Unfortunately, both these services don’t work in India, so we have recently started using PayU to accept online payments in India.
Persistent Storage
We heavily rely on Amazon S3 for secure, durable, highly-scalable storage of files and images. We use Amazon CloudFront on top of S3 to distribute content to end users with low latency, high data transfer speeds, and no minimum usage commitments.
Hosting Servers
We have been using Amazon web services (GNU/Linux with Ubuntu) and Heroku for a very long time. We have almost seen 0 down time with these two hosting services. They’re very reliable and scale well based on the demand. We usually leave this decision on our clients to make the final call.
Logging and Exceptions
We mostly use Papertrail and Sentry for logs and error management.
Web Server
Ngnix and Apache has been supporting almost all the apps we have deployed so far.
Tests
Honestly, we were never big fans of writing tests. But over a period of time, we have been hit with the realization that Test driven development can just make our life easier as we keep building on top of the existing system. It’s not an exciting task in the beginning, but it certainly is a very useful task in the long run. We recently started sealing our code with Unit Tests and have set up a Jenkins server on Yoda (our in-house development server). We have also got code reviews tool in place on Yoda to make sure the quality of the code is checked and balanced.
API
Almost all the back-end projects we build is on top of the Django Framework and Django REST framework is undoubtedly the best REST framework for Django apps. We use it in every project and it adds a lot of value in the API development.
Documentation
We make sure that we document every API call we write and Swagger & Jekyll a great tool which we are using everyday to document the APIs.
Caching
We heavily rely on Memcached and Database cache for high performance storage and retrieval.
Analytics & Messaging (user management)
We just love Intercom and highly recommend our clients to use it to communicate with their users and track their events, send out a custom note on specific events. For the analytics, Google analytics, Mixpanel or Mouseflow are reliable tools preference is Client based.
Code Management
We store and manage our code on Github and Codebasehq.
Project Management
Lastly, we use our own in-house project management tool — Delight to manage all our client’s projects and keep our clients at peace while we develop!
PS: An ideal technology stack is never the final one. So, we will keep updating this blog as we move forward and try new stuffs. Feel free to drop us a note at hello@launchyard.com for any queries.