Engineering at Labs: Part 1

There are lot's of things to learn about. We have a typical way of building our applications, managing our projects, and writing documentation. Here, we will walk you through some of the essential reading to prepare you to join our team.

Engineering Approach

We can start with our tools. We generally use Elixir and React (both with JavaScript and TypeScript) for our web applications, together with Redux and a few libraries we have built our self like Syncr. We often build Progressive Web Apps, which can work offline. This is a relatively new approach which should be understood in its own right.

1. Learning React

“The library for web and native user interfaces” — There are many ways to start learning react. It is one of the most popular frameworks on the internet. A basic place to start is on the react website: React.dev, and from:

2. Learning Redux

We use Redux to manage state on our react applications. There are a few principles that we follow, that redux helps formalize.

  • Unidirectional Data Flow
  • Single root state object

It is worth reading through the Redux motivation and principles here, and there is a lot to learn from the thinking in Redux section.

We actually may find it worth it to switch from Redux in the future. It does introduce a lot of overhead when developing, though it is much less than it used to be with hooks etc. This is why it's important to understand what benefits we get out of it. However Redux Toolkit make it easier to setup without dealing with a lot of boilerplate.

We want to formalize unidirectional data flow. Redux gives us a single store on the root of the application, which represents the overall state of the application. We typically save this object into indexed db on the web client, so that the app can work offline. This is a huge benefit to our work as we build Progressive Web Apps.

When we want to update the state, we dispatch an action. An action is a simple object describing what has happened, and the reducer takes from this action and decides how the state should be updated with it. We end up with a large actions file, which is nice in that you can go through one file and see exactly how state gets updated in response to different triggers.

To learn about redux, can start from here:

3. Learning Elixir

Elixir is a dynamic, functional language designed for building scalable and maintainable applications that run on the Erlang VM. We mostly build backend services with pure Elixir, and Phoenix — web framework for the Elixir programming language and PostgreSQL. To start learning about Elixir, a few good places:

A few Elixir's cheatsheets which can be helpful:

This isn't where it concludes — we've also laid solid groundwork in both backend and frontend technologies for designing and crafting software applications from the ground up. These applications are then deployed on the Cloud using Docker and Kubernetes through CI/CD pipelines. I will delve into these topics in upcoming parts of this series.

Note: The majority of the Engineering groundwork has been established by Taimur Shah, the founder of CERP Labs — a revenue-generating software development unit within a research institution, focused on addressing issues that impede economic growth in developing countries. As a Software Engineering Manager, I've built upon these foundations and introduced a fresh array of engineering tools and practices to meticulously build software.