Skills and Expertise
With more than a decade under my belt in software development, I have dealt with a tremendous amount of programming languages and frameworks, while specializing in a handful. Although I have my preferences, I will always pick the technology that makes the most sense for a project, both short- and long-term.
I have experience in hands-on software development positions, as well as leadership positions, with responsibilities that extend further than lines of code (determining roadmaps, mentoring developers, business decisions).
Technologies used
The technologies I’m currently working with the most and am most familiar with are in bold.
Game development
- Client: Unreal Engine 5 (C++, Blueprints), C, C++
- Backend: C++ (Unreal Engine, custom), C# (.NET), Go
Backend/server development
- Golang (Gin, Echo, Stdlib)
- Typescript (NodeJS, Deno, Bun)
- C# (.NET)
- Elixir (Phoenix, OTP)
Most often with PostgreSQL as the underlying database.
Front-end and mobile development
- React with Typescript (NextJS)
- Web Assembly (Golang, Zig, Odin, Jai, C/C++)
- React Native (Expo or bare)
- Progressive Web Apps
- Elm
Site Reliability Engineering and DevOps
- Linux (Ubuntu, Debian, Arch, CentOS)
- CI/CD (GitLab, GitHub Actions, Azure DevOps, Jenkins)
- Cloud (DigitalOcean, AWS, Azure, GCP)
- Docker and Kubernetes (Compose, Helm)
- Infrastructure and provisioning (Ansible, Terraform, Shell)
- Systems integration
- Nginx
Domain specific
- Compilers, parsers, DSLs: Golang, C, C++
- Systems programming: C, C++, Zig, Odin, Jai
- Data science: SQL, Python, Javascript/Typescript
Working method
Methods I employ to deliver elegant, efficient, readable, understandable and maintainable code that adds value to a company and/or product.
- “Always choose the best tool for the job”
- Cloud and application structure using The Twelve-Factor App
- Software architecture via a simplified version of the principles of The Clean Architecture, DDD and Layered Architecture.
- Prevention of technical debt, short term and long term
- Everything (even infrastructure as code) in version control (Git/Perforce)
- Project management via SCRUM/Agile principle, without unnecessary meetings
- Bringing together Development, Security and Operations through DevSecOps and secure by design.
- Test-Driven Development (TDD) of domain logic where it makes sense
- Versioning according to Semantic Versioning
- Adhere to the ACM Code of Ethics
- Use of free (open-source) software where possible, contributing when possible
Learning
Currently, I spend around 20 hours per week on self-education. Some of it focused on computer science, most of it on other subjects (like philosophy, history and linguistics). You can read more on my learning page.