Smart connections between data and product

In order to connect our data to our apps and websites, we use many different APIs in the backend of the systems. In addition, we also provide complex calculations or estimates based on artificial intelligence in the backend.

In this article we show what technologies we use to enable smart backend solutions.

Elixir

Elixir

Elixir

A new emerging high-level functional programming language that is ideal for web and database systems due to its applicable fault tolerance and the ability to run thousands or even millions of processes simultaneously. Elixir is built on the low-level programming language Erlang and was developed in the 1980s for telecommunications. Elixir is relatively unknown compared to, for example, Ruby and Python, but beautiful examples of its use to build complex applications include: WhatsApp, Discord, Pinterest, and League of Legends.

Elixir's syntax is very similar to Ruby and is intended to remain readable in the same way. The big positive difference is that Elixir is very fast because it compiles, allowing us to run thousands of tests within seconds!

The website framework Phoenix is used for a clear and fast development process. This framework makes it easy to set up endpoints.

Ruby

Ruby

Ruby

Several of our systems use Ruby with the well-known website framework Ruby on Rails. Ruby is a dynamic language that is especially focused on readable code and has been on the market for almost 20 years.

Examples of websites that have used this framework include: GitHub, Airbnb, Kickstarter, Twitch, and many others.

GraphQl

GraphQl

GraphQL

Traditioneel maken velen API's gebruik van het REST (representational state transfer) protocol waarbij de backend een zogenaamde endpoint beschikbaar maakt (/api/test). Apps en websites kunnen dan een HTTP request uitvoeren op dat adres met optionele parameters. Deze manier van data transfer is een go-to voor velen en een veilige en eenvoudige werkwijze. Echter brengt deze API stijl ook nadelen met zich mee. Het is bijvoorbeeld vaak lastig om uit te zoeken wat de juiste parameters zijn die meegestuurd moeten worden of wat je als client kan verwachten van de backend.

Daarom maken wij veelal gebruik van GraphQL, een query taal waarbij de client kan opvragen van de backend wat nodig is met daarbij duidelijk documentatie over wat er verwacht wordt mee te geven en wat je als response terug kan krijgen.

Hosting

Hosting

Heroku

For relatively small applications, we usually host our backend on Heroku. This reliable platform provides a robust and efficient way of hosting, where we don't have to do much optimization ourselves. This way, we can spend even more time on the code development process.

Google Cloud Platform

For larger projects, we often need more power in the form of CPUs, RAM, database capacity, and traffic. The Google Cloud Platform (GCP) is perfectly suited for this. We can easily optimize the use of hardware and monitor it accurately. In GCP, we use many different techniques such as Gemini for multi-modal processing, BigQuery for efficiently keeping track of millions of statistical data, PubSub to send push notifications to a huge number of users at the same time, and many other indispensable solutions.

Images and other files

For static content such as images and other files, it's important to get the data to the user as quickly and safely as possible. By storing the files on Amazon or Google, they are kept in a safe and reliable location with backups in multiple locations. In combination with Cloudfront, the files can be delivered quickly. Cloudfront stores a cache of these files near the users. Because the files travel a shorter distance, they reach the user faster. A major advantage of Cloudfront is that it offers free use of SSL connections, ensuring all communication is secured via HTTPS.

Databases

Databases

PostgreSQL

Our choice for the primary database is PostgreSQL. This is a very reliable database, and we can consistently back it up in combination with Heroku and GCP hosting. For complex systems that require high database capacity, we can always scale and optimize. Many of our apps use location data, and with the PostgreSQL extension PostGIS, queries on this data can be performed quickly and efficiently.

Redis

For super-fast fire-and-forget job queues or temporary caches, we use Redis. This is an in-memory data structure store, which means we can store various data structures and retrieve them quickly. Unlike a typical database, no queries are possible, but on the other hand, operations on the data are very fast. We use Redis, among other things, to send push notifications and to communicate between multiple nodes in multi-node systems.

BigQuery

In GCP, we use the column-based serverless database BigQuery for storing extreme amounts of data. Due to the column orientation of this database, it is efficient to quickly retrieve data, making it very suitable for storing and displaying statistics in graphs of all shapes and sizes.

Continuous Integration and Continuous Deployment

Continuous Integration and Continuous Deployment

The most important part in our workflow is pushing our code to our GIT repositories. The code is then automatically picked up, built and tested by our CI/CD service CircleCI. If the tests are successful, a new version is immediately released online. With this we ensure that our release cycle is short and that releasing a new version is not exciting, but just part of our daily work. When we're working on a project, it's not uncommon to have multiple releases in one day.

Enrich your life.

Experience the difference with our intelligent solutions. Get in touch today and discover how we can enrich your digital world.