Miles J. Wells
Senior software engineer
I am a highly skilled and motivated senior software engineer with a background in neuroscience and over 10 years experience specializing in data architecture and full-stack test-driven development.
Employment History
Achievements:
- Managed several successful projects as technical lead where I both managed a software development team and liaised with research clients to support and deliver their scientific objectives.
- Designed and maintain several Django metadatabases deployed on AWS with RDS which include both an admin Web interface for user data entry and a RESTful API for integration with several automated data pipeline services.
- Oversaw our organization's largest ever public data release of ~40,000 datasets, registering downloads of over 2 million files by over 4,000 unique IPs in the first 6 months. This data release has already borne fruit in the wider scientific community with published papers such as Pellegrino et al. 2023.
- The exceptional feedback I received in my 360 employment review.
- Led our organization in adopting Agile project management using custom Github project boards integrated with Toggl Plan for effective time tracking, resource management, issue triaging and progress reporting.
Achievements:
- Successfully managed a data architecture team for two years, facilitating the acquisition of > 50,000 experimental recordings, including 1000 neural recordings totalling 250 TB of data.
- Developed a fully documented and test-covered Python API for accessing and sharing neurophysiology data.
- Developed a bespoke continuous integration server written in Node.js for running intensive integration tests on real experimental data.
- Published a well-received Nature Methods article describing our data architecture.
Achievements:
- Developed behaviour protocol to probe decision-making in mice that has been adopted by dozens of labs around the world.
- A highly reliable and well-documented experiment control software package.
Education
Skills
- MATLAB
- Python
- Node.js
- Django
- HTML
- PostgreSQL
- C
- PHP
Other skills
Advanced: Git, Github Actions, AWS (EC2, RDS, S3).
Strong: Grafana, Docker, Chart.js, Numba, Kanban, Agile and Scrum.
Programming paradigms: Object-oriented, functional, functional reactive, parallel programming (joblib, multithreading, asyncio).
Projects
Below are a select few code projects I have worked on.
ONE API and Alyx database
The Open Neurophysiology Environment (ONE) is a Python API for sharing, searching and loading standardized neurophysiology data, stored either on a user's local machine or on a remote server. Experiment datasets are stored in redundant, distributed file servers. The ONE API allows one to connect to a database to search experimental meta data and then download the data from a remote repository (e.g. an AWS S3 bucket or similar).
Users can download data both synchronously or asynchronously, with file hash checking and a local cache for both data and database meta data cache for offline use. The API also allows one to register new datasets to the database (which handles remote data transfers) and to index local data for offline sharing and searching of datasets.
The code has 100% coverage and extensive documentation.
The Alyx database is a Django postgreSQL database deployed on an AWS EC2 instance with an RDS backend, and is used by experimenters to record experiment meta data such as animal colony management, dataset records, experiment notes, and distributed preprocessing pipelines.
ONE and Alyx are used by over a dozen labs around the world to collaboratively share and analyze data.
A companion Website for data visualization allows users to explore the data through interactive plots.
Links:
Rigbox & Signals
Rigbox is a high-performance, open-source MATLAB toolbox for managing behavioral neuroscience experiments. Rigbox simplifies hardware/software interfacing, behavioral task design, and visual and auditory stimuli presentation. Additionally, Rigbox can time-align datastreams from multiple sources and communicate with a remote database to manage experiment data. Rigbox is mostly object-oriented and highly modular, which simplifies the process of designing experiments.
Rigbox includes a GUI for experimenters to parameterize their experiments, trigger, record and synchronize data signals from multiple computers and acquisition devices, and to monitor subject behaviour.
Signals is a framework written in C and MATLAB for programmatically designing bespoke behaviour experiment protocols. It employs functional reactive programming to asynchronously transform datastreams, allowing one to design and run both open- and closed-loop audiovisual experiments.
Both Rigbox and signals are used by numerous labs to run behaviour experiments, and to synchronize stimulus presentation and recording modalities.
Links:
LabCI
LabCI is a continuous integration server built with Node.js. It allows one to trigger a full suite of integration tests on any remote server, including those behind institutional firewalls. The server interacts with GitHub via webhooks, allowing tests to be triggered when code repositories are updated. The server delivers a live log and implements a job management system to run through multiple test suites. It also reports coverage to coveralls.io and can deliver condensed reports of the test runs via an API.
Links:
ibllib
ibllib is the main code repository for the International Brain Laboratory (IBL). Highlighted here are two notable parts of the codebase:
Preprocessing pipline
IBL comprises a dozen experimental labs distributed across the USA and Europe. As new data are acquired, experimental sessions are registered automatically by a lab server to a common database. These distributed servers then query the database for queued preprocessing pipeline tasks. Each server then extracts neural and behaviour data from modalities such as video motion tracking, multiphoton imaging, eletrophysiology and fibrephotometry. This includes algorithms for spike sorting, cell detection, time alignment, behaviour model fitting and histological alignment. The extracted datasets are then registered to the database and remotely transferred to various remote repositories for wider access.
Additionally, a battery of quality assurance metrics are recorded and reports are automatically generated for experimenters to monitor the progress of their of data.
The 'imaging preprocessing pipeline' code (linked below) is an example of the pipeline task structure we developed. The Python module demonstrates extensive documentation, logging and clear coding techniques, numerical computing optimizations with Numba, and advanced use of object-oriented and functional programming paradigms.
Brain atlas visualization
A brain atlas package within ibllib allows users to generate 2D and 3D plots of neural activity aggregated from hundreds of neural recordings all over the brain. The atlas allows one to use multiple brain region mappings and coordinate systems.
Links: