I have been working with a lot of different technologies over the years. I have been working with Java for quite some time, but fell in love with the simplicity and conciseness of Kotlin. I have been working with Go as well, mostly when implementing CLIs or Google Cloud Functions, which I really like as well, but it requires a different paradigm when developing.

When doing frontend applications, which I sometimes contribute to, I use TypeScript to ensure the benefits of a typing system over JavaScript. I have been working with Python for a long time, and I mostly use that when creating simple scripts or data analysis. I have been working with a lot of different databases, but mostly with PostgreSQL. I have been using all major public clouds for several years, but I have the most experience with GCP and AWS.

As always, if a specific technology is a better fit for the problem, I will choose that, even if that means that I need to learn a new technology. Balance the time spent learning a new technology with the time saved by using it.

Certifications

iSAQB (2021): International Software Architecture Qualification Board (view certificate)

Languages

Kotlin: expert
I know the stdlib very well and I feel comfortable using coroutines / flows; I am always eager to improve my Kotlin skills.

Java: experienced
Java 17+; though I work mostly in Kotlin.

Go: skilled
mostly used Golang for writing cross-platform / architecture CLIs and for serverless functions.

Python: experienced
I mostly use Python for scripting and data analysis.

TypeScript: skilled
better than writing JS of course; I use TypeScript for frontend apps and for certain environments that require node.

HashiCorp HCL: expert
really like this IaC language, which I use for Terraform and Nomad.

Transport protocols

REST APIs: expert
client and server apps in various languages and frameworks, resource oriented design and following the Zalando API guidelines.

gRPC: experienced
client and server, using protobuf and buf.build, in Java, Kotlin, Python, Golang, TypeScript.

GraphQL: skilled
mostly client side, some server experience on the JVM.

Build tools and package managers

Gradle: experienced
I have set up many multimodule Gradle projects, including artifact signing and publishing (private registry and Sonatype).

Maven: experienced
Multimodule Maven projects with dependency management and plugin management are not unfamiliar with me, including artifact signing and publishing.

npm: skilled
Using packages and publishing packages, nothing special here.

Go modules: skilled

Frameworks

Spring Boot: experienced
I have been using Spring Boot a lot at many different companies and I bootstrap a new app quickly with the many starters that Spring Boot offers.

Ktor: skilled
briefly used Ktor server, but it was missing gRPC support, therefore switched to vanilla Kotlin; used Ktor client quite often.

Next.js: starter
I have done (simple) modifications to various Next.js apps.

React: starter
I have done a React course and have explored the usage of gRPC Unary RPCs with TanStack Query.

Standards

OpenAPI: experienced
Used code generators for various languages, Java, Kotlin (fixed a bug in the Kotlin code generator for deserializing lists of a class), Python.

JSON Schema: expert
Whenever I have to write JSON or YAML, I make sure to use the JSON Schema if available. Also vice versa, I try to provide JSON Schemas whenever possible.

Conventional Commits: expert
I have set up and managed CI/CD pipelines using Semantic Release and Conventional Commits.

Databases, queuing systems and other storage layers

I have worked with all different kinds of databases, but mostly with PostgreSQL. It is easy, fast and reliable to set up and has all the basic needs for a new app. As always, I decide the best fit for the job, so if a different database technology fits better, I will go with that.

PostgreSQL: experienced
The de facto OS solution for a RDBMS, which I have used for many JVM apps.

BigQuery: experienced
Both a consumer (directly and from Google Cloud Dataflow / Apache Beam) and producer (batch loading data from Google Cloud Storage) of data.

Snowflake: starter

Redis: experienced
Used Lua scripts for an atomic operation for concurrent modifications, used pubsub for broadcasting new keys.

SQLite: experienced

Cassandra: starter

Kafka: experienced
Used, tweaked and upgraded various Kafka clusters, on-site and inside Kubernetes clusters (through Strimzi). I've used Kafka for data producing and consuming applications, which consisted of either single or multiple replicas.

Elasticsearch: skilled
Used Elasticsearch as a search backend for bol's webshop.

Serialization

Protocol Buffers: experienced
my preference for serialization (if the use case allows it), especially combined with gRPC and buf.build.

JSON: experienced
On the JVM, I'm familiar with Jackson and GSON.

Apache Avro: skilled
both JSON and binary based, familiar with `avsc` and `avdl` formats.

Security

OAuth 2.0: skilled / experienced
Set up the Identity Provider Keycloak with multiple realms and multi-tenancy realms various grant types: authorization code, client credentials, refresh.

Keycloak: experienced
Multiple realms and single realms with multi-tenancy.

Istio: skilled
By using Istio, traffic is encrypted with mTLS and cross Kubernetes cluster traffic was feasible due to the service mesh.

Site Reliability Engineering

SRE: experienced
Familiar with Service Level Indicators, Objectives, and Agreements. The goal is to minimize downtime, keep indicators within objectives, and maintain a healthy error budget over the year.

Resilience4j: skilled
To enable resilience against outages and downtime, I use Resilience4j in the Spring Boot apps that I build.

Infrastructure and fundamentals

DNS: experienced
know how to set up various DNS records for different purposes; i.e. a single domain with multiple DNS zones.

HTTP/2: experienced
end-to-end HTTP/2 traffic between client and apps running in Google Kubernetes Engine through an ingress and reverse proxy.

Load Balancing: experienced
mostly with reverse proxies and Google Cloud Load Balancing.

Clouds

I have been using all major public clouds for several years, but I have the most experience with GCP and AWS. I really like working with GCP, as it’s very developer friendly and fast.

GCP: expert
Cloud Functions, Cloud Run, Cloud SQL, Pub/Sub, GKE, Secrets Manager, Load Balancing, Cloud DNS, Cloud KMS, Cloud Storage, Stackdriver, Cloud Endpoints and more.

AWS: experienced
EC2, Redshift, Athena, Glue, S3, and more.

Azure: skilled
AKS, VMs, Azure DevOps, CosmosDB.

CI/CD

Automation is both my hobby (home automation) and part of my work. I like to set up CI/CD and from my peers I have received the feedback that I am good at it.

GitHub Actions: expert
Set up complex CI/CD pipelines for GitOps, ensuring an always green main branch, enabling collaboration between team members.

GitLab CI: expert
Similar to GitHub Actions, I have performed tasks with the same goal.

Semantic Release: expert
Introduced various teams with the inclusion of Semantic Release in their workflow, which enabled them to use Conventional Commits to determine the next semantic version of their application. Codebases consisted of Java, Kotlin, Python, Terraform, Golang, TypeScript, and many more.

Renovate Bot: expert
Introduced various teams with Renovate Bot, which enabled them with automatic dependency upgrades, regardless of the language and package manager they were using. Configured Renovate Bot centrally in organizations, to facilitate re-usability (DRY). I also do presentations around this topic, feel free to reach out if you're interested.

Tools

Docker / OCI format: expert
Built multi-architecture images (Docker Hub, ghcr.io, private registries), both containers and Helm packages shipped in OCI format.

Kubernetes: expert
Used GKE, k3s, EKS, AKS.

Helm: skilled
Created and used various Helm repositories.

Terraform: expert
Automate everything is one of my mottos. I have created many Terraform modules to enable re-usability for various teams. I have also used Terraform to create complex large infrastructures across a microservices architecture.

Vault: starter
Used together with Kubernetes with the Vault Secrets Injector to facilitate secret management.

Prometheus: experienced
Experience with both pull and pushed based metric collection, Kubernetes experience with Pod/Service Monitors.

Grafana: experienced
Created many dashboards, and I'm also running my own Grafana instance at home, to collect data that devices at home generate.

Strimzi: experienced
Kafka cluster management within Kubernetes.

Envoy Proxy: experienced
Created various Envoy Proxies, mostly as sidecar containers, to enable TLS offloading, JWT verification, header additions, CORS handling, etc.

NGINX: skilled
Used NGINX for various temporary reroutes, and also created an Authorization Server that abused Firebase Authentication to circumvent high cloud costs with NGINX and JavaScript.

buf.build: experienced
Used buf.build since the very beginning. At first only for Protobuf file linting and breaking change detection, later also used the Buf Schema Registry and Remote Packages for easy Protobuf generated artifacts for various languages.

Make: skilled
Whenever I need some scripts for a repository, I prefer to create a Makefile.

Disciplines

GitOps: expert
Automate all the things. I am a big fan of automating infrastructure, because of predictability, portability, and maintainability.

DevSecOps: expert
You build it, you maintain it, you take care of it. Your code, your responsibility.

Platform Engineering: expert
I have been part of many teams that facilitated and built self-service tools for internal dev teams.

Iterative design: expert
Start small, improve, repeat.

Miscellaneous and development tools

It does not really make sense to specify an experience level for the tools below. I am using them all on a daily basis, and I am very comfortable with them. I left all the chat apps out of this list, but I have used the lot.

Linux / GNU

Visual Studio Code

IntelliJ IDEA

Vim

iTerm2

Zsh

Git

GitHub

GitLab

Bitbucket

Jira

Confluence


Archive

Tools that I have been using in the past, but have not been using for quite some time.

Hadoop

MongoDB

CosmosDB

Apache Beam

Apache Flink

Parquet

Jenkins

Most icons are licensed under the CC0 license and belong to their respective owners. Those that are not, are accredited in the credits section.