Web platform engineer (10+ years) | UI/UX, accessibility, design systems, performance, security, full stack
Two things have shaped my career. I have always used my design background to inform how I approach development, which my frontend specialisation reflects. And I've worked hard to gain a wide understanding of all levels of the web stack and, more generally, many different paradigms. This has meant I can contribute meaningfully at every level, even when I'm not writing the code.
- I've mostly worked in highly regulated industries (gaming, finance-adjacent). In these industries, compliance and operational resilience are of paramount importance.
- A common theme during my career has been architecting and managing white-label systems. I find the complexity of using one codebase to serve many brands and clients interesting. It also meshes nicely with the creation of design and component systems, another area in which I've often worked.
I've been writing HTML, CSS and JavaScript since long before I became a software engineer. I studied design, then worked as a designer for five years. From there, I transitioned to web design, then to software engineering.
- I have experience using most major libraries and frameworks (modern and legacy). For UI, I have generally used React but I can quickly get up to speed with other libraries/frameworks.
- I've a deep knowledge of accessibility, testing, performance tuning, architectural patterns and security.
- My background often puts me in roles that connect designers and engineers. I can speak the language of both, and can translate between the two.
I can usually get up to speed on a codebase quickly, no matter the programming language. I have worked as a dedicated backend developer in several roles. I've also typically contributed to API design in my frontend roles.
My strongest server-side language is Elixir (often using Phoenix Framework). I am comfortable with Node/Deno, Ruby on Rails and various Rust solutions (Axum primarily). I have experience of Python, Go, OCaml and a little C#.
I'm more than comfortable with relational databases and SQL (primarily Postgres and SQLite). I'm comfortable with several NoSQL technologies, like Redis, DynamoDB, and Mnesia. I tend to know which tech to pick in a given situation, anyway.
For most of my career, I've worked with cloud services as a matter of course, primarily AWS. I'm comfortable with containerisation, deployment, CI/CD and the basics of DevOps.
Languages I am most productive in:
- JavaScript. A language I have worked with for around 15 years. Primarily that has been in service to client-facing frontend code (UI or the layer below the UI).
- TypeScript. Almost all JS code I write is TS; I've used it since shortly after its initial release.
- Elixir (and by extension Erlang). A toolkit for building reliable concurrent distributed systems. A language I taught myself at my first proper software engineering job. I was looking for a more functional alternative to Ruby. So I've used it since its early days, and have worked primarily as an Elixir programmer in two of my jobs.
- Rust. The language I build most tools in now. I wouldn't necessarily lead with it. But given the right context (in my case, focussed development tooling), this is what I would use.
There is a long list of languages I can read and write (including Ruby, Python, Go, OCaml, C# and Elm). I wouldn't lead with them, either because I did not work exclusively with them in a given job, or because my skills have atrophied over time.
I have a strong interest in functional paradigms. The languages I'm most comfortable with reflect this interest.
I've used modern AI tools for years. I've seen them grow and know what they excel at. For me, they are for quick prototyping, doing repetitive tasks, checking my work, and brushing up on tech I haven't used in a while. They aren't a substitute for understanding the problem or owning the code. The lessons from decades of good design practice still apply, regardless of how the code came to be.


