NECOLT started as a Ruby on Rails consultancy and it was our core technology for many years. Although 10 years in, we still use this web framework for some projects, these days the majority of the code we write across the entire stack is in modern JavaScript. This is a natural transition as a lot of great new technologies have emerged in the world of JavaScript in recent years. We also use a lot of other languages and technologies. This chapter covers the main technologies we work with.

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.

Web applications frontend. React and Redux are clear winners for our web application frontends. For rich graphics web experience we use HTML5 frameworks such as PixiJS. We also heavily rely on JavaScript ecosystem tools such as Webpack and Babel. Bootstrap and Foundation are our prefered choises for responsive frontend.

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.

Blockchain. We write Smart Contracts in Solidity on the Ethereum network. We use Web3.js Ethereum JavaScript API for DApps (Decentralised Apps) on the Ethereum network. Truffle helps a lot during the development of these applications.

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.