We are looking for a Software Engineer - Team Lead, to join our Infrastructure team in Cape Town.
- Our mission is to provide intelligent tools to feed the world.
- We provide tree and fruit insights to growers, in 18 countries around the world, enabled by drone imagery and artificial intelligence.
- We have analysed over 100 million trees and 1 million fruit to date.
- Our team of 80+ people is based out of Cape Town, but have commercial offices in the USA, Portugal and Australia.
How we work
The Aerobotics org is split up into customer-focussed streams. Within a stream we have multiple product development squads. Each squad is responsible for owning a specific customer value-proposition from conceptualisation through to delivery, allowing for maximal autonomy and ownership within the team. A squad consists of a Product Manager, Product Designer (if applicable), Engineering Team Lead and technical team members. Our technical team consists of 3 core functions: Software Engineering, Data Science and Drone Engineering.
We use our own combination of agile development methodologies (encompassing our mix of exploratory, discovery & delivery work) to ensure that we are building the best product in an effective manner (without getting lost in process for the sake of it).
Our tech stack
- We use Python 3 for most of our backend systems. Specific frameworks include Tensorflow for the Data Science work, Django for our APIs and a multitude of internally built libraries containing convenience functions.
- Our frontend web & mobile applications use a mix of Angular, React and React Native.
- Our drones run NVIDIA Jetson Xaviers on-board and are powered by C++, with our own FlightOS operating system.
- We use AWS Cloud using Infrastructure-as-code principles for the bulk of our infrastructure, leveraging serverless computing wherever possible (Fargate, Lambda, Step Functions, Cloudfront, SageMaker etc).
- Continuous integration, delivery and testing is part of every application, ensuring that the technical team can entirely own their work from development through to production. This allows us to push multiple deployments daily, allowing for iterative development & continuous learning.
How the team fits within Aerobotics
Within Aerobotics, the mission of the Infrastructure Team is to build and maintain high-level ownership of the infrastructure (AWS Cloud, Cost, Security, DevOps etc) for the technical team as whole. The team’s objective is to enable the technical teams to autonomously setup, manage, monitor and own their infrastructure.
You will need
- A strong understanding of the tradeoffs between different design patterns and architectural choices for infrastructure.
- Experience implementing scalable APIs within a micro/multi-services architecture.
- Experience using config management systems (e.g. Terraform).
- The ability to write well-structured, performant backend applications and scripts in Python with Docker.
- Extensive experience within the AWS ecosystem.
- Experience using both managed services and open source technologies.
- The ability to mentor junior team members and grow expertise across a team.
- The ability to work autonomously in a small team to solve complex problems.
- BSc/MSc/PhD in engineering, computer science or other technical discipline, or equivalent working experience.
You will be responsible for
- The overall architecture and system design of our cloud infrastructure.
- The overall cost management & analysis of our cloud infrastructure.
- Enabling other teams to deploy, monitor and observe their own infrastructure through tooling and best practices.
- Defining, tracking & communicating SLAs (availability, uptime etc) - as well as incident management procedures.
- Ensuring compliance with various data protection acts (GDPR, POPI etc).
- Putting breach protocols and recovery processes in place.
- Designing and maintaining overarching data architecture (Data access, ETL workflows, data lake & data warehouse design).
- Automation of application access throughout the org (OKTA, BambooHR etc).
- Mentoring and growth of individuals within your team.
- Managing any juniors in your team.
- Effective communication with all the relevant stakeholders.
- Helping understand capacity and assisting with hiring.