mirror of
https://github.com/apricote/apricote.de.git
synced 2026-01-13 12:51:00 +00:00
364 lines
12 KiB
YAML
364 lines
12 KiB
YAML
# yaml-language-server: $schema=https://raw.githubusercontent.com/jsonresume/resume-schema/v1.0.0/schema.json
|
|
basics:
|
|
name: Julian Tölle
|
|
label: Infrastructure & Backend
|
|
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: Node.js
|
|
level: expert
|
|
keywords:
|
|
- Typescript
|
|
- Nest.js
|
|
|
|
- name: CI/CD
|
|
level: advanced
|
|
keywords:
|
|
- GitLab CI
|
|
- Jenkins
|
|
|
|
- name: Infrastructure as Code
|
|
level: advanced
|
|
keywords:
|
|
- Terraform
|
|
- Ansible
|
|
|
|
- name: Backend Development
|
|
level: advanced
|
|
keywords:
|
|
- REST APIs
|
|
|
|
- name: Cloud
|
|
level: advanced
|
|
keywords:
|
|
- AWS
|
|
- OpenStack
|
|
- Hetzner Cloud
|
|
|
|
- name: Databases
|
|
level: advanced
|
|
keywords:
|
|
- Redis
|
|
- PostgreSQL
|
|
- MySQL
|
|
- etcd
|
|
|
|
- name: Go
|
|
level: intermediate
|
|
keywords:
|
|
- kubebuilder
|
|
|
|
work:
|
|
- name: Hetzner Cloud GmbH
|
|
position: Software Developer Open Source Integrations
|
|
website: https://hetzner.com/cloud
|
|
startDate: "2022-11"
|
|
keywords:
|
|
- Kubernetes
|
|
- Terraform
|
|
- Ansible
|
|
- Go
|
|
- Python
|
|
summary: ""
|
|
- 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: 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
|
|
url: https://github.com/apricote/Listory
|
|
type: application
|
|
keywords:
|
|
- Node.js
|
|
- Nest.js
|
|
- Helm
|
|
- React
|
|
|
|
- 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: cluster-api-provider-openstack
|
|
summary: |
|
|
I am a reviewer of the project and actively contribute 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
|