Playbook covers our best practices and gives you the best insight how we deliver successfull long-term software projects.
Web applications backend. We mainly use Node.js and Ruby on Rails for web applications and the development of APIs with fast-changing requirements. Django / Python is a better fit for web applications which demand first-class Python ecosystem integration. We also use Deepstream and SocketCluster frameworks for real-time applications and subsystems. We prefer GraphQL for the APIs we build. A lot of other technologies such as Nginx are used in our backend stack.
Mobile applications. Our clients demand the best mobile application experience. This is the main reason why we have developed a lot of native iOS and watchOS applications with Swift. We tend to choose React Native for cross-platform applications when both iOS and Android support is needed. This approach still needs a significant amount of native extensions for each platform, but the majority of the code is shared across iOS and Android platforms. We rarely do native Android only applications with Java Android SDK because development costs are usually significantly higher than iOS apps.
Augmented Reality applications. We use Wikitude is most of our Augmented Reality projects. If it’s not the best fit for a particular project we use ARKit or other SDKs. We also implement custom augmentations and other graphic solutions with SceneKit and OpenGL ES.
Databases. Most of our projects use a combination of relational database and key-value store. PostgreSQL is a reliable relational database choice for most of our projects. It also has a lot of excellent features such as full-text search, native JSON support, and many useful extensions. PostgreSQL can be used as a key-value store in some cases, but almost all of our projects use Redis as it has a very extensive feature set. We also use Memcached when it’s a better fit than other technologies. If a dataset is too large for the afore-mentioned technologies, we use Cassandra or another big data solution. Mobile applications have special database requirements, and we mostly use SQLite and Realm.
Search. Elasticsearch is our preferred technology for more complex search cases when the databases mentioned above can’t handle what’s required efficiently. Some of our clients prefer 3rd party solutions such as Algolia. Usually, 3rd party hosted solutions aren’t flexible enough, so this approach works well when a project needs only those features that a 3rd party solution offers.
Artificial Intelligence. The software we build gets smarter and smarter every year. Most of our machine-learning solutions are implemented with TensorFlow. It’s the most feature-rich library for deep learning with neural networks. It also integrates very well with the other Python ecosystem components we use.
Infrastructure. The majority of our large-scale web applications runs in AWS because it provides an extensive set of reliable infrastructure components. Smaller projects run well with less sophisticated infrastructure providers such as Vultr and DigitalOcean. Our infrastructure is automated with Chef and Terraform.
This is just a taste of some of the technologies we use. The technology world moves fast, and we are constantly extending our stack to incorporate the best new technologies as and when they appear.