I’m Gavin, and I’m primarily a software developer with many years experience of myriad languages and technologies. I was once a production systems, DNS, and email administrator too, giving me a solid foundation for work on build tooling and CI/CD setups.
I might be a good person to contact when you need someone to:
- Build something specific for you.
- Design a new component, then build and integrate it.
- De-risk a project by prototyping technically challenging parts.
- Collaborate with your team to share my skills.
- Work as an expert reviewer of your team’s code.
- Help your team get unstuck by providing an outsider’s perspective.
See the software development, build tooling and CI/CD, and databases sections to learn more about my experience, and get specific examples of what I can do for you.
I work on a contract basis, ranging from two weeks to “until the work is done”. I’m based in Luxembourg and work remotely, though I can travel for specific events.
Software development
Web development mostly, backend and frontend.
I’m doing a lot of work in Rust (async, Axum, GraphQL, WebAssembly, etc.) and Elm right now. I also have extensive experience with Python and TypeScript (hence JavaScript too) and some experience with Haskell. I’ve used Golang for production work and am relearning it.
I can, for example:
- Build a website to your specifications.
- Design an application to solve your specific problem, choose components, and implement it, including full CI/CD setup; see below.
- Provide clean and documented code (always), so that the hand over to you or your team is painless and successful.
- Be an expert to “bootstrap” your team when migrating to Rust, Elm, Python, or TypeScript.
Build tooling & CI/CD
I’ve written many Dockerfiles, hundreds of Makefiles, and thousands of shell scripts. I’ve done a lot of work with Shake, a Haskell library for building build systems. I wrote firstaide to bootstrap Nix environments. I wrote postgresfixture for rapid set-up and tear-down of PostgreSQL clusters, and later ported it to Rust.
I have worked with large test suites, especially in Python. For example, I reduced the running time of MAAS’s test suites from 36 minutes to 6 minutes, and made them easier for developers to work with (i.e. not a hack; btw, not producing hacks is a recurring feature of my work).
Regarding CI/CD, I use GitHub Actions for my projects but I’ve used Travis CI, CircleCI, Jenkins, Docker Hub, and a few bespoke systems too.
I can, for example:
- Write the developer build tooling for your software stack.
- Design and implement a continuous integration and/or deployment pipeline.
- Propose and implement changes to your build tooling, processes, and test suites to improve speed and developer experience.
- Document those build processes and hand over to you and your team.
Databases
I’ve worked with PostgreSQL and MySQL for more than two decades. I usually reach for PostgreSQL for new projects, though I also used SQLite recently. I cut my teeth on Oracle.
I won’t claim to be your next DBA, but I can help with:
- Writing complex queries, and optimising their performance.
- Helping you understand transaction isolation and making it work with your application.
- Full text search in PostgreSQL and SQLite.
- Designing and/or migrating schemas.