Current role: backend engineer at Flowminder (2021-present)
I currently work at the Flowminder Foundation, a nonprofit that leverages large datasets for humanitarian ends. During my time there, I:
- work to support the development of novel methods of tracking and communicating population displacement via mobile network operator data.
- work with the analysis team to convert these methods into automated data pipelines, including ensuring that no individual person could be tracked using our data.
- maintain and extend our Haiti mobility dashboard.
- implement automated reports to deliver our indicators to stakeholders. These are designed by our marketing and comms manager in Figma and implemented using Python, Jinja2, HTML and Weasyprint.
- contribute to Flowkit, our PostgreSQL and Python MNO data toolkit. Notable contributions include exposing queries internally via RESTful API endpoints, and restricting the time and resolution of these queries to authenticated roles via JWT.
- have worked with our Haitian consultant to produce (as a short project) an animated map based on ACLED data to illustrate the ongoing violence in Haiti.
Previous role: research software engineer at the CLCR (2016-2021)
My previous role was at the Centre for Landscape and Climate Research at the University of Leicester, an ecosystem monitoring research group. While there, I:
- wrote the first version of Python For Earth Observation (Pyeo), an open-source library used internally for working with satellite images.
- implemented the Forest Alerts automated deforestation detection system, a Pyeo-powered monitoring system based on Sentinel-2 high-resolution satellite imagery for delivering alerts to users via email and Android app.
- showcased the above to the President of Kenya as part of the Year of Climate Action. At the time of my employment ending with the CLCR, Forest Sentinel was being actively used by the Kenyan Forestry Service.
- supported other research efforts in the CLCR and related research groups. Examples include measuring rocketry emissions via the TROPOMI atmospheric sensor and (in partnership with Previsico), using synthetic aperture radar to measure the extent of flooding in urban areas.
Other previous work
- Teaching fellow at the School of Systems Engineering, University of Reading (2013-2016): I delivered four modules a year; information security, advanced databases, operating systems and advanced computation. The largest of these was information security, delivered to a cohort of 200+ students over two year groups. All of these modules involved both coursework and exams.
- Postgraduate researcher at the Department of Cybernetics, University of Reading (2011-2016): I was working towards a PhD in terahertz spectroscopy of solvation shells; an experimental research program using the UoR's dispersive Fourier transform spectrometer (DFTS). As part of this research I overhauled the DFTS control system, prototyped a novel sample cell and carried out measurements of samples.
Software development
Python is my most used language - I have been a professional Python developer for ten years, and have been using the language for seventeen. I aim to write legible Python, making full use of type annotations, dataclasses and autoformatters where appropriate.
- Scientific stack: I have worked extensively with Pandas, Numpy and PostgreSQL for scientific analysis. I have both implemented and adapted Jupyter notebooks for published scientific work.
- Web technology: I have implemented backend APIs in Quart (asynchronous Flask) and FastAPI. I have also had extensive experience in Jinja for HTML templating and especially PDF rendering.
- Database technologies: I have implemented small databases mainly in PostgreSQL and MySQL, and contributed patches to Flowminder's main cellular data record processing toolkit. I have also worked briefly in Oracle and recently reimplemented a database in Access as a personal favour.
- Frontend: I have implemented a Java Android application to demonstrate the Forest Sentinel deforestation monitoring system. I also maintain our Haiti mobility dashboard, implemented in React.
- Security: I have worked with Auth0 and implemented secure APIs. I also implemented a JWT-powered scope-checking system for Flowminder's main query engine.
Other Technical Skills
In addition to implementing techniques, I have often been responsible for implementing the infrastructure around scientific reporting projects. I would not call myself an administrator, but I am comfortable managing services hosting on both physical and cloud infrastructure.
- Containerisation: Docker is my preferred container management engine, using Docker Compose for service management. I have touched on Docker Hive. I have no experience with Kubernertes.
- Data pipelines: During my work at Flowminder, I have been implementing batch processing pipelines using Airflow. I have implemented fanouts, mapped tasks and dynamically constructed DAGs using Papermill templates; I am also familiar with both Operator- and Task- styles of dag implementations.
- Workflow: I am experienced with Git, and my working environment is Bash + VSCode on Ubuntu. I have implemented automated testing pipelines on CircleCI, and am an occasional user of Makefiles.
- Environment management: I am experienced with pip, pyenv, pipenv, conda and UV for Python, and am familiar with Node and NPM/Yarn for Javascript development.
- Cloud infrastructure: I have experience with Google Cloud and AWS, running managed compute instances, containerised apps and supplemental technologies including IAM, Terraform and hosted database services)
Soft skills
Most of my work is supporting academic research; this varies from delivering one-to-one support to operationalising sophisticated techniques in concert with an entire research group.
- Research software engineer: I have spent the majority of my career working with scientists and academics, implementing their techniques. I am used to adapting or rewriting research modules into larger systems while working closely with the original designer to ensure that the results do not drift.
- International work: Many of my projects have been in collaboration with international projects - I have worked with the Kenyan Forestry Service, CONFAOR, IPAM and the Mexican space agency, among others. I have experience identifying key technical partners to work with for delivering the most impact in limited projects.
- Presentation skills: I have four years experience delivering undergraduate lectures. I have also presented research at academic conferences and delivered courses in professional settings.
- Teaching and mentorship: In addition to my teaching experience, I have mentored junior engineers and run several courses for coworkers in good programming practice, version control and machine learning.
Qualifications
- BSC Robotics (2013)
- Associate Fellow of the College of Higher Education (2014)
- Cryogenic safety training (2013)
- Laser safety training (2014)
- Basic first aid (lapsed) (2016)