Skip to main content

Here at, we are focused on creating a digital twin of our planet.
This includes the use of Machine Learning, Computer Vision, Software Engineering, and Art. In order to achieve our goal, we are gathering an exceptional team of professionals in these fields.
We would like to share some secret tips with you to help your application succeed.

  1. You will have a call with HR for a basic introduction.
  2. You will have a technical call with one of your future colleagues/leaders.
  3. You will have an additional interview with higher management and HR (some technical questions can be asked here as well!).
  4. You will receive a decision from HR 😉

It’s that easy! But I know, I know, you’re here for some juicy tips and not for a talk about video calls. So, let’s have a deeper look!

Technical positions

Our programming roles can be divided into the following categories:

  • Machine Learning (ML)
  • Computer Vision (CV) and 3D reconstruction
  • Reconstruction/Software Engineering

Each category has a specific list of requirements for successful candidates, but in this post I will talk about ML.

  1. Python – “know-how” of modern Python is the way to success.
    Tips: typed programming, OOP, dataclasses, documentation.
  2. PyTorch – is our ML framework of choice. If you come from another background, it shouldn’t be a problem to learn it while you’re here. 😉
    Tips: [senior+ level] multi-gpu training and optimization of training and inference.
  3. numpy/scipy – everyone who’s applying for ML positions should have a basic knowledge of these libraries.
  4. OpenCV – a knowledge of image processing is highly beneficial as we mainly work with 2D satellite imagery.
  5. GDAL/rasterio – this one is tricky for most applicants and this is to be expected! During your stay here you will be working with various tools for geoprocessing and rasterio is one of our current choices for that.
  6. Git – knowledge of version control is important. If you don’t use it right now – try it out; you will thank us later.
  7. SQL/PostgreSQL – knowledge of one or both of these will help you to dive into the daily routine. Yes, even ML engineers get their hands dirty.
  8. PyCharm – many people use PyCharm as their daily driver, we are no exception. Even though we use PyCharm Pro with all its benefits, a great way to start is to try out the Pycharm Community Edition (it’s free!).

We will evaluate your performance during the tech interview (don’t worry, we take your level and skills into consideration for the final decision 🙂 ) based on the following criteria:

  • we will evaluate your general programming skills.
  • we will evaluate how well you can read unfamiliar/undocumented code.
  • we will evaluate how comfortable you feel with reading documentation.
  • we will evaluate how you approach tests during the tech interview.
  • we will evaluate if your experience level matches the specified position.
  • and last, but not least, your communication skills (not only are we looking for not only colleagues, but also friends – show us the real you)

Technical interview

Usually, a tech interview is managed by 1 or 2 of your future team members. They will be looking at how well you fit into our team as well as evaluating your programming skills.

Let’s consider the application process for Junior ML Engineer.
Our requirements are: Python, numpy/scipy, and an understanding of machine learning and data visualization.
Nice to have: PyTorch and personal or professional experience writing models and relevant code for data processing.

During the technical part we want to see the way you work with existing code as well as your ability to write your own (we look at your github pages! but real-world coding may differ).

Given the starting code:

import os
import numpy as np

def _getRGB(img):
    return img[0], img[1], img[2]

def main():
    img = np.random((128, 128, 3), dtype=np.uint8)
    r, g, b = _getRGB(img)

if __name__ == "__main__":

a refactored version would look something like this:

from typing import Tuple

import numpy as np

def get_rgb_channels(img: np.ndarray) -> Tuple[np.ndarray, np.ndarray, np.ndarray]:
    Returns a tuple with arrays representing R, G, B values of an image respectively.

    :param img: Input image (using channel order is RGB).

    assert len(img.shape) == 3, "Image has wrong shape"
    assert img.shape[2] == 3, "Image has wrong number of channels, expected 3 got {} instead".format(img.shape[2])
    return img[..., 0], img[..., 1], img[..., 2]

def main():
    # Create a dummy image HxWxC, here we assume channel order is R, G, B:
    img = np.random.randint(0, 255, (128, 128, 3), dtype=np.uint8)
    r, g, b = get_rgb(img)

if __name__ == "__main__":

For senior levels and above, alongside clean python programming, we are expecting a person to read/write ML code, as well as to be able to refactor existing ones. If you’re able to use dataclasses alongside your skills to write readable and reusable code – you’re on a good track. 😉
In addition, if you have a github with the project you would like to share, don’t forget to include a clickable link in your CV!


If you have read so far – congratulations! We hope you’ve learned something new and this information helps you in your future career! But why wait? Apply now at

Author: Pavel Kuksa / Senior ML Engineer /