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.
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.
Kotlin: experiencedI know the stdlib very well and I can use coroutines / flows; but I'm always eager to improve my Kotlin skills.
Java: experiencedJava 17+; though I work mostly in Kotlin.
REST APIs: experiencedclient 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
Spring Boot: skilledat my last job, I have been using vanilla Kotlin mostly.
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.
OpenID Connect: skilled
JSON Schema: experiencedWhenever 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: experiencedI 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: skilledBoth a consumer (directly and from Google Cloud Dataflow / Apache Beam) and producer (batch loading data from Google Cloud Storage) of data.
Redis: experiencedUsed Lua scripts for an atomic operation for concurrent modifications, used pubsub for broadcasting new keys.
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.
Infrastructure and fundamentals
DNS: skilledknow how to set up various DNS records for different purposes; i.e. a single domain with multiple DNS zones.
HTTP/2: skilledend-to-end HTTP/2 traffic between client and apps running in Google Kubernetes Engine through an ingress and reverse proxy.
Load Balancing: skilledmostly with reverse proxies and Google Cloud Load Balancing.
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: experiencedCloud Functions, Cloud Run, Cloud SQL, Pub/Sub, GKE, Secrets Manager, Load Balancing, Cloud DNS, Cloud KMS, Cloud Storage, Stackdriver, Cloud Endpoints and more.
AWS: skilledEC2, Redshift, Athena, Glue, S3, and more.
Azure: skilledAKS, VMs, Azure DevOps, CosmosDB.
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: experiencedSet up complex CI/CD pipelines for GitOps, ensuring an always green main branch, enabling collaboration between team members.
GitLab CI: experiencedSimilar to GitHub Actions, I have performed tasks with the same goal.
Semantic Release: experiencedIntroduced 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: experiencedIntroduced 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.
Kubernetes: experiencedUsed GKE, k3s, EKS, AKS.
Terraform: experiencedAutomate 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.
Keycloak: experiencedMultiple realms and single realms with multi-tenancy.
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.
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.
GitOps: experiencedAutomate all the things. I am a big fan of automating infrastructure, because of predictability, portability, and maintainability.
DevOps: experiencedYou build it, you maintain it, you take care of it. Your code, your responsibility.
Platform Engineering: experiencedI have been part of many teams that facilitated and built self-service tools for internal dev teams.
Iterative design: experiencedStart 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
Tools that I have been using in the past, but have not been using for quite some time.
All icons are licensed under the CC0 license and belong to their respective owners.