Technology Stack
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: expertI know the stdlib very well and I feel comfortable using coroutines / flows; I am always eager to improve my Kotlin skills.
Java: experiencedJava 17+; though I work mostly in Kotlin.
Go: skilledmostly used Golang for writing cross-platform / architecture CLIs and for serverless functions.
Python: experiencedI mostly use Python for scripting and data analysis.
TypeScript: skilledbetter than writing JS of course; I use TypeScript for frontend apps and for certain environments that require node.
HashiCorp HCL: expertreally like this IaC language, which I use for Terraform and Nomad.
Transport protocols
REST APIs: expertclient and server apps in various languages and frameworks, resource oriented design and following the Zalando API guidelines.
GraphQL: skilledmostly client side, some server experience on the JVM.
Build tools and package managers
Gradle: experiencedI have set up many multimodule Gradle projects, including artifact signing and publishing (private registry and Sonatype).
Maven: experiencedMultimodule Maven projects with dependency management and plugin management are not unfamiliar with me, including artifact signing and publishing.
npm: skilledUsing packages and publishing packages, nothing special here.
Go modules: skilled
Frameworks
Spring Boot: experiencedI 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: skilledbriefly used Ktor server, but it was missing gRPC support, therefore switched to vanilla Kotlin; used Ktor client quite often.
Next.js: starterI have done (simple) modifications to various Next.js apps.
React: starterI have done a React course and have explored the usage of gRPC Unary RPCs with TanStack Query.
Standards
OpenAPI: experiencedUsed code generators for various languages, Java, Kotlin (fixed a bug in the Kotlin code generator for deserializing lists of a class), Python.
OpenID Connect: skilled
JSON Schema: expertWhenever 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: expertI 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: experiencedThe de facto OS solution for a RDBMS, which I have used for many JVM apps.
BigQuery: experiencedBoth a consumer (directly and from Google Cloud Dataflow / Apache Beam) and producer (batch loading data from Google Cloud Storage) of data.
Snowflake: starter
Redis: experiencedUsed Lua scripts for an atomic operation for concurrent modifications, used pubsub for broadcasting new keys.
SQLite: experienced
Cassandra: starter
Elasticsearch: skilledUsed Elasticsearch as a search backend for bol's webshop.
Serialization
Protocol Buffers: experiencedmy preference for serialization (if the use case allows it), especially combined with gRPC and buf.build.
JSON: experiencedOn the JVM, I'm familiar with Jackson and GSON.
Apache Avro: skilledboth JSON and binary based, familiar with `avsc` and `avdl` formats.
Security
OAuth 2.0: skilled / experiencedSet up the Identity Provider Keycloak with multiple realms and multi-tenancy realms various grant types: authorization code, client credentials, refresh.
Keycloak: experiencedMultiple realms and single realms with multi-tenancy.
Istio: skilledBy using Istio, traffic is encrypted with mTLS and cross Kubernetes cluster traffic was feasible due to the service mesh.
Site Reliability Engineering
SRE: experiencedFamiliar 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: skilledTo enable resilience against outages and downtime, I use Resilience4j in the Spring Boot apps that I build.
Infrastructure and fundamentals
DNS: experiencedknow how to set up various DNS records for different purposes; i.e. a single domain with multiple DNS zones.
HTTP/2: experiencedend-to-end HTTP/2 traffic between client and apps running in Google Kubernetes Engine through an ingress and reverse proxy.
Load Balancing: experiencedmostly 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: expertCloud Functions, Cloud Run, Cloud SQL, Pub/Sub, GKE, Secrets Manager, Load Balancing, Cloud DNS, Cloud KMS, Cloud Storage, Stackdriver, Cloud Endpoints and more.
AWS: experiencedEC2, Redshift, Athena, Glue, S3, and more.
Azure: skilledAKS, 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: expertSet up complex CI/CD pipelines for GitOps, ensuring an always green main branch, enabling collaboration between team members.
GitLab CI: expertSimilar to GitHub Actions, I have performed tasks with the same goal.
Semantic Release: expertIntroduced 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: expertIntroduced 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: expertBuilt multi-architecture images (Docker Hub, ghcr.io, private registries), both containers and Helm packages shipped in OCI format.
Kubernetes: expertUsed GKE, k3s, EKS, AKS.
Helm: skilledCreated and used various Helm repositories.
Terraform: expertAutomate 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: starterUsed together with Kubernetes with the Vault Secrets Injector to facilitate secret management.
Prometheus: experiencedExperience with both pull and pushed based metric collection, Kubernetes experience with Pod/Service Monitors.
Grafana: experiencedCreated many dashboards, and I'm also running my own Grafana instance at home, to collect data that devices at home generate.
Strimzi: experiencedKafka cluster management within Kubernetes.
Envoy Proxy: experiencedCreated various Envoy Proxies, mostly as sidecar containers, to enable TLS offloading, JWT verification, header additions, CORS handling, etc.
NGINX: skilledUsed 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: experiencedUsed 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: skilledWhenever I need some scripts for a repository, I prefer to create a Makefile.
Disciplines
GitOps: expertAutomate all the things. I am a big fan of automating infrastructure, because of predictability, portability, and maintainability.
DevSecOps: expertYou build it, you maintain it, you take care of it. Your code, your responsibility.
Platform Engineering: expertI have been part of many teams that facilitated and built self-service tools for internal dev teams.
Iterative design: expertStart 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.