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.
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
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.
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.
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.
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.
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
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.
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.
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.
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 email@example.com for any queries.