# yaml-language-server: $schema=https://raw.githubusercontent.com/jsonresume/resume-schema/v1.0.0/schema.json basics: name: Julian Tölle label: Kubernetes & Cloud Infrastructure image: https://www.gravatar.com/avatar/bd55c8a01a6dd038f86c8e9fd60674b5?s=800 email: julian.toelle97@gmail.com location: city: Bielefeld countryCode: Germany profiles: - network: GitHub username: apricote url: https://github.com/apricote - network: LinkedIn username: Julian Tölle url: https://www.linkedin.com/in/julian-toelle/ - network: Twitch username: Apricote4 url: https://twitch.tv/apricote4 - network: XING username: Julian_Toelle3 url: https://www.xing.com/profile/Julian_Toelle3/cv skills: - name: Kubernetes level: expert keywords: - Cluster API - Operators - GitOps - name: Go level: advanced - name: CI/CD level: advanced keywords: - GitHub Actions - GitLab CI - Jenkins - name: Cloud level: advanced keywords: - Hetzner Cloud - AWS - OpenStack - name: Infrastructure as Code level: advanced keywords: - Terraform - Ansible - name: Backend Development level: advanced keywords: - REST APIs - name: Node.js level: advanced keywords: - Typescript - Nest.js - name: Databases level: advanced keywords: - PostgreSQL - Redis - MySQL - etcd work: - name: Hetzner Cloud GmbH position: Team Lead Open Source Integrations website: https://hetzner.com/cloud startDate: "2022-11" keywords: - Kubernetes - Terraform - Go - Ansible - Python - Developer Experience - Rest API - GitHub Actions summary: | Hetzner Cloud is a prominent European cloud provider offering virtual machines and other cloud infrastructure. As a member of the Integrations team, I am responsible for maintaining and enhancing our suite of Open Source Integrations, including the Go SDK, Python SDK, CLI, Terraform Provider, Ansible Collection, Kubernetes Cloud Controller Manager, and csi-driver. Collaborating closely with other teams at Hetzner Cloud, I contribute to the development and integration of new features into our Open Source Integrations. This entails working closely with my co-workers to provide early feedback for new APIs, to make sure that they are consistent and easy to understand for our customers. In addition to supporting new features, I address customer issues, providing timely resolutions and implementing fixes and enhancements. I also interact with our community to get their changes merged and implemented. Overall, my role at Hetzner Cloud allows me to combine my passion for Open Source technologies with my expertise in cloud infrastructure. By continuously enhancing our Open Source Integrations, I help in empowering customers to leverage the full potential of Hetzner Cloud's cloud infrastructure solutions. highlights: - Driving initiatives to keep our API easy to understand - name: teuto.net Netzdienste GmbH position: Cloud Engineer website: https://teuto.net/ startDate: "2021-04" endDate: "2022-09" keywords: - Kubernetes - Cluster API - OpenStack - GitLab CI - GitOps - Prometheus & Alertmanager - Go - kubebuilder - Ansible summary: |- teuto.net provides public and private clouds based on OpenStack, managed Kubernetes on top of these clouds, and additional services like consulting or training. Within teuto.net, I worked on the Kubernetes team, where I was responsible for the next iteration of our managed Kubernetes offering. At the beginning of 2021, teuto.net decided to replace the existing custom tooling for managing Kubernetes clusters with Cluster API and Cluster API Provider OpenStack. I authored a proposal for the new implementation and implemented it over the following months. This included GitLab CI pipelines for building VM images, writing templates for clusters, an Ansible playbook to bootstrap new Cluster API Management Cluster, extensive internal documentation and runbooks, Prometheus alerting, an E2E test pipeline, and a custom Kubernetes operator to tie it all together into one coherent API. As I always liked to work upstream, and a stable foundation is necessary for this offering, I started contributing to Cluster API Provider and became a reviewer for the project, participating in the office hours and wherever else help was needed. When not working on new features, I packaged newly released Kubernetes versions for our platform and rolled out the changes to our managed clusters while communicating with our customers about upcoming changes and maintenance windows. For 3 months in 2021, I lead an initiative to improve alert fatigue for our on-call engineers, by analyzing the pains they were experiencing and then applying a consistent labeling strategy on the alerts, as well as filtering unwanted alerts in Alertmanager and Prometheus. highlights: - Tech Lead for managed Kubernetes offering - Upstream contributions to Cluster API Provider OpenStack - name: narando GmbH position: Lead Developer website: https://about.narando.com/ startDate: "2017-07" endDate: "2021-02" keywords: - AWS - Node.js - Gitlab CI - Terraform - Nest.js - Typescript summary: | narando provides a crowd-working platform where texts such as magazine articles and blog posts are recorded by professional narrators and subsequently published to websites and podcast platforms such as Spotify. It is a small company, so I wore many hats, often simultaneously, in the 5 years I worked there. As the Lead Developer, I was responsible for the 3-person dev team. In that role, I planned the implementation of new features and oversaw our bi-weekly planning sessions. I introduced modern development practices such as merge requests and taught the other engineers to get them to excel at their tasks. In my role as a Backend Engineer, I planned and implemented a new version of the production and publishing platforms that power narando, as the previous proof of concept was hitting its limits. This new platform was built using multiple Node.js services for different use-cases such as core production, file handling, post-production, and publishing feeds. As the Cloud Infrastructure Engineer, I planned and implemented our infrastructure in AWS. Most of our services were deployed as containers to ECS and were backed by RDS MySQL. I also built an event queue for our services on top of SNS+SQS. Everything was configured by Terraform and by using common templates, new services could be launched in less than a day. To improve our development velocity and reduce toil, I build automated pipelines for our services to run tests and linting for each commit merge request and to automatically release and deploy the services once they are merged. During the first year we got started with Jenkins but then switched to GitLab CI because Jenkins needed too much maintenance and we liked the Gitlab CI syntax better. highlights: - Built out the infrastructure on AWS using mostly container technology (ECS) - Planned and implemented a Node.js microservice architecture - Introduced code reviews to improve the code quality and learn from each other - name: TrackCode GmbH position: Software Engineer Infrastructure & Backend website: https://trackcode.de/ startDate: "2016-12" endDate: "2020-04" keywords: - Kubernetes - Backend - CI/CD - Node.js - Jenkins summary: | TrackCode is a Transport Management System for the last-mile delivery logistics companies, importing shipment data directly from the customers' systems and exporting scan events and signatures back to the logistics networks. When I joined TrackCode, I initially focused on the Node.js backend software, which was talking to the Web and Android Apps through a JSON API and persisting data in MySQL and MongoDB. Later on, my role at TrackCode shifted and I started working more on infrastructure and DevOps topics. I planned and implemented a new development platform for our growing team on top of Kubernetes with Rancher. To sustainably learn from past issues and avoid being waken up by alerts, I established a postmortem culture, which helped us fully explore incidents and solve the root causes. To improve our confidence and velocity during development and deployment, I implemented the full CI/CD lifecycle for all of our services, using Jenkins, Unit Tests, and finally an automated release to Kubernetes. To help us debug any incidents and investigate for customer support tickets, we used Splunk, but this proved to be too expensive in the long run. I developed our alternative monitoring and observability stack using Graylog, Grafana, and Prometheus. Using these, I also established SLOs for one of our core metrics, "time to export events". highlights: - Planned and implemented a new development platform on top of Kubernetes - Established a structured process to analyze incidents (postmortems) - Implemented a full CI/CD lifecycle for all services (Jenkins, Tests, Release to Kubernetes) - name: narando GmbH position: Working student website: https://about.narando.com/ startDate: "2016-04" endDate: "2017-06" keywords: - Ruby on Rails - Android summary: |- While finishing my Abitur I started working at narando and started maintaining the initial proof of concept that was built using Rails. I was also responsible for our Android app and added offline support to it. languages: - language: German fluency: Native speaker - language: English fluency: Fluent (C2) interests: - name: Video Games keywords: - RPG - Strategy - name: Pen & Paper RPGs keywords: - Fantasy - DnD 5e - name: Music keywords: - Rock - Metal - Techno - Festivals & Concerts references: [] education: - institution: Paderborn University studyType: Computer Science startDate: "2016-10" endDate: "2016-11" summary: | As a child and teenager, I always knew that I wanted to study Computer Science. But once I started my studies, I realized that the actual real-life work as a software engineer was far more interesting to me. I dropped out after one month and instead started working at a second startup. - institution: Ev. Gymnasium Werther studyType: Abitur startDate: "2008" endDate: "2016-07-01" gpa: "2.2" courses: - LK Mathematik - LK Physik projects: - name: releaser-pleaser summary: Automate versioning and changelog management for GitHub and GitLab projects. startDate: 2024-07 url: https://apricote.github.io/releaser-pleaser/ type: application keywords: - Go - name: hcloud-upload-image summary: CLI and Go Library to upload OS images to Hetzner Cloud. startDate: 2024-04 url: https://apricote.github.io/hcloud-upload-image/ type: application keywords: - Go - name: Streaming on Twitch summary: | When I still have creative energy left at the end of the week, I like to stream software development on Twitch. I mostly stream my work on Listory, but in December 2021 I streamed my Advent of Code attempts every day. startDate: 2020-10 url: https://twitch.tv/apricote4 type: presentation keywords: - Go - Node.js - AV production - Public Talking - name: Listory summary: | Self-hosted app to track all your Spotify listens and show interesting insights that I develop to fill my own needs. startDate: 2020-01 endDate: 2023-10 url: https://github.com/apricote/Listory type: application keywords: - Node.js - Nest.js - Helm - React - name: cluster-api-provider-openstack summary: | I was a reviewer of the project and actively contributed new features. startDate: 2022-03 endDate: 2022-09 url: https://sigs.k8s.io/cluster-api-provider-openstack type: application keywords: - Cluster API - OpenStack - Go - Kubernetes - name: "@narando/nest-xray" summary: | A package that integrates AWS X-Ray tracing with the Nest.js framework. Initially developed by me while I was working at narando. startDate: 2019-10 endDate: 2020-10 url: https://github.com/narando/nest-xray keywords: - Node.js - Nest.js - Tracing - AWS - name: hcloud-csi-driver summary: | Kubernetes CSI Driver to integrate with Hetzner Cloud Volumes. Based on the DigitalOcean CSI driver. Archived since Hetzner Cloud released an official driver. startDate: 2018-10 endDate: 2019-09 url: https://github.com/apricote/hcloud-csi-driver type: application keywords: - Go - Kubernetes volunteer: [] awards: [] publications: - name: Various Presentations website: https://apricote.github.io/presentations/ summary: | Multiple presentations at local meetups from 2017 to 2019. Topics included: Kubebuilder, CI/CD practices at my employer, JavaScript/Node.js patterns and practices