This blog post is the first in a series on D/Vision Lab’s infrastructure.
Infrastructure is a big topic of course: there is the internal infrastructure we use for our development process and there is the external infrastructure which is defined on a per-project basis. This post focuses on the former, giving an overview of the solutions used to support the entire team.
Our team at D/Vision Lab consists of 8 members, primarily technical, with diverse skills and needs: there is someone developing UIs in the browser with TypeScript and Vuejs, there is someone doing machine learning on images with Python and there is someone developing the back-end of a project using PostgreSQL and JavaScript.
The underlying technology to allow all of this is heterogeneous and constantly evolving.
Hardware infrastructure
In general, we provide a laptop to each one in the company and each one is free to use the OS they prefer, keeping in mind that we are not a large team and in case of need, the help that each one can get comes from the colleagues and their expertise (and the internet, of course). Most people use Windows on their laptop with a virtualized instance of Ubuntu running in WSL2, but there are a couple of Linux-only users, using Ubuntu and NixOS.
While laptops are sufficient for most development needs, we use additional hardware for more demanding processes. For example, we do not train our Neural Networks on our laptops… Not even the ones with GPUs! For this, we have a few computers used for long-running processes, build and training tasks, shared services, etc. For example, in addition to our 8 laptops, we have several compute hardware that we use for various tasks, for example
- a Mac that is used to build and test applications,
- a high-performance computer used to train ML models and perform 3D renders,
- a virtualization server where people can easily set up VMs to have clean development, building and testing environments.
Software infrastructure
While we do use cloud services, we tend to self-host a bunch of software that the entire company uses. We have self-hosted CI/CD agents, for example: not only this allows us to reduce costs, but allows to be more flexible regarding build and
testing configurations.
A key element in our infrastructure, one of the oldest and most used, is without doubt the VPN: being a remote-first team, this is not a surprise. We trust WireGuard for that and we are happy with the choice: the performances are good and the deployment is simple on all the platforms we use (Linux, Mac and Windows).
Another important element is the software we use for our daily work. Naturally there are different development tools, but they can vary on a per-project basis. Indeed, we all need to do common tasks like reading and sending e-mails, storing and sharing documents, spreadsheets and code. We use a combination of Google Workspace, Confluence, Jira and Github. The latter hosts the code, while Atlassian’s products are used to manage project boards and related documents. Google Workspace is finally used for e-mails, document sharing and storage, in addition to Meet for conferencing. Instant messaging is provided by Mattermost, at least for our internal needs.
Finally, we also use Wiki.js for shared, technical documentation and n8n.io for some automation needs, such as supporting the creation of custom Mattermost bots and functions that are related to our organization routines. For example, we keep track of the time spent on different projects, and n8n is used to compute some statistics that we use to analyze our progress.
Well, if you were to be onboarded in D/Vision Lab as a new team member, this would cover the initial introduction on our infrastructure and tooling. In future blog posts, we will describe things more in detail, such as covering how all these services can be deployed and maintained automatically (spoiler alert: with Ansible).