Hey, today I have turned to 42 (hopefully I should find the right question of the ultimate answer) and thought it makes some sense to write down my story of computers. I have never done this before, but maybe it should be motivating for some of you about how I did my career choices. To make it more interesting I think the best if I start with the now :). Currently, I'm a staff DevOps engineer on one of the CNCF storage projects, called Ondat (former StorageOS if you are more familiar with that name). We offer a strong consistent storage solution in the Kubernetes space, so we solve the almost "impossible", namely supporting stateful application in a stateless world. I'm part of the Kubernetes integration team and mainly working on the open source parts of the product. As a craft man, I prefer to write code, design and build complex distributed systems, and last but not least run those systems in production. My main focuses are various Kubernetes operators/controllers, Go microservices, CLI tools, all kinds of testing, CI/CD pipelines, and release automation.
Let's rewind time...
Once upon a time the 6 years old me received a Commodore 64 computer. We lived in the eastern part of Europe so a personal computer (not a PC, a computer for personal usage) was hard to buy. Families had to visit western Europe, they had to carry grannies to deal with personal quotes of spending, etc. The young me just played on the machine. We copied games via double tape recorders (fast copy was a big thing) and just learned the basics of how to load a game. 4 years later I joined the specialty of computers in the school and started to learn Basic (the language) programming. My last C64 program at 13 was an inventory management system for my parent's business which was able to persist and read data to/from a floppy. Because I didn't trust floppies, I printed the code on paper for future usage. Do you see the paradox here?
In the high school programming wasn't my main focus, I wrote some basic (not the language) programs in Turbo Pascal, but nothing special to mention. But I became a Linux user! I remember I bought computer magazines and installed Debian (Potato for first), Red Hat, OS/2 from the CD to my computer daily. I started to install and kernel compile on Sunday. Of course, it failed at some point. Next Tuesday in computer class I was able to seek for the error, write down some possible solutions to my notes, go home and try. There were two options; I didn't find the right solution or I did but it failed in the next step. Next coming Tuesday ... repeat. Because my teacher also tried to work with Linux, after a while they allowed me to search issues every afternoon, and also they tried to help me which boosted up my Linux experiences.
For a couple of years after high school, maybe five, I was more interested in girlfriends, BMX, spiritual experiences, dance, and music.
service network stop on a remote machine (habits), so I stress tested reboot process of the machine.
A few years later I still developed web applications in various domains for different companies, when one day my lead developer did a rage quit his position in the middle of an important development and I became the only person in the company who had the technical and domain knowledge to deliver the software, so believe or not (I also didn't believe) I became a lead developer and I had to organize the work-life of 8 people. I enjoyed working on web applications, doing my Linux tasks, and managing people. I think we did it well, but there was an issue with my position. This issue was a small pressure in the beginning but became a big pain in the end. PHP development became popular in my country. We tried to do it in a professional way, but there was always someone who did the job for a quarter of the price and in half of the time (in theory, the practice was different but this is another story). I started to race with dabblers, which wasn't an easy task because my specification phase cost was higher than the full price on the other side. I really love(d) object-oriented programming so I learned Java. I replaced the question of "where to run my PHP script" with "how many machines we would like to use". Finally, in a year I fully swapped from PHP to Enterprise Java (I'm the lucky one who had learned EJB 2.0 but never used it).
As a Java developer, my main focus was still web applications with server-side rendering, but I started to learn and develop real distributed systems. I spent a few years with Groovy, Grails, Spring, Hibernate, Struts, OSGi, Portlets, Vaadin, JSP/JSTL, ... most of the regular Java libs and tools. I think there was nothing special in my Java developer journey. But have I mentioned I love Linux and the operation side? I learned how to install, configure and monitor Java web/application containers and we started to migrate everything to the cloud. We started to use automated pipelines. We handcrafted every necessary step for zero downtime, database migrations, distributed database backups, etc. I still have some PTSD about Chef.
One day, I remember it was a regular day, I opened my RSS feed and I read an article about DevOps culture, workflow, and engineering. It made my attention, it sounded really interesting ... and familiar. I did it for years before we gave it a name. So I changed my job title and my market value had doubled in 3 seconds. I didn't want to be a team lead anymore, I have found the path where I can have the same salary like a principal lead architect developer manager but as a coder.
I didn't have to wait too long for the first job offer. Hortonworks acquitted a Hungarian startup and they were looking for DevOps engineers who had affinity to learn more about cloud, containerization, config management tools, and event-based programming stuff. I was excited to join. They gave me a small homework and ... and I spent one month daily ten hours solving the problem. I was lucky because my current company was looking for big data solutions so I sold the homework as research :). They gave me the following requirements:
- Create a 3 node computer cluster in our cloud env. (In reality, they never gave me any access to the cloud, so I used virtualization on my laptop)
- Install Hadoop cluster via one of our Hadoop Docker containers. (In reality, no one else used Docker for Hadoop at that time. It was an experimental and fat container with Systemd on Docker 0.6.0)
- Configure Hadoop to run map-reduce jobs (I spent 6 days to find the best JVM settings for Hadoop components, the most critical memory usage was, total memory was 8G in my laptop, so you can imagine what was the speed with 1 host OS, 3 virtual OSes and a full Hadoop cluster with Docker swarm, overlay network and a Cassandra cluster. I investigated a strange Java exception for days, my question was the only thing on Stackoverflow, because in some config I wrote
- Install a containerized Cassandra cluster. (that was the easiest part)
- Integrate Cassandra with Hadoop and write a custom map-reduce job. (There was no official support for a non-Hadoop database)
- Guarantee data locality with Cassandra. (Nothing on the internet on the topic at that time)
I did it. They never gave this homework to anyone else.
So I started to work on Hortonworks Cloudbreak. I was the first Hortonworker who joined after the acquisition. Cloudbreak is an open source Java-based service, which is able to install and manage Hadoop clusters in 5 major cloud providers in an agnostic way, in Docker on some kind of next->next->cluster way. I was involved in every part of the software so one day I developed some cloud infra provision layer in Java, the following day I wrote tons of Bash scripts, on the other day I solved transactional puzzles, next day I built cloud/OCI images, other days I fixed CI/CD pipelines (each commit was a release at the end) or wrote some infra as a code. And if this wasn't enough I started to learn Golang because I was (exactly still) interested in a high-level system language. In the beginning, the project was a self-hosted service, so customers installed it on their servers, but as you know change is the only constant we have turned it into a managed service. That is the point where Kubernetes came into the picture.
I started my Kubernetes trip at a very early stage, first I wrote plain manifests, then Helm charts, and I was happy with the fancy new tool. There were just a few people in my country who knew what the heck is K8s or how to use it in production. It was challenging but fun.
One day I got an email from IBM. They built a new division in Hungary and asked me to join. Keywords were Go, cloud, managed K8s, and network on the scale of a big international company. Network was a "total" new space for me and it made my interest really quick. The best way to start networking is to combine with cloud and Kubernetes XD. I couldn't say no, so I joined as the first member of the new team. The office this time was arranged for local co-working. I had worked remotely for 5 years at that time (I forgot to mention) so we had built the first fully remote team in that office. The job was very challenging, we solved hardcore network issues in ~36 layers. Because of our love of open source, my team started to work on various open source stuff, for example, we wrote a Kubernetes operator to manage network routes of the host via custom resources. After a while, I joined to Calico community inside IBM and they gave me a few months to work on an open source solution (operator) that is able to scale BGP topology automatically from 5 nodes to 3000.
Meanwhile, I became a regular speaker at meetups and conferences, because next to open source, knowledge share is my other fetish. I was a terrible public speaker 10 years ago, nowadays I'm a terrib.. speaker ;)
I left IBM after one and a half years and have swapped to Ondat. I do what I love: building open source distributed software and ecosystems. I'm not a genius mastermind, I just did start everything years before they became mainstream which took me the position to pro-actively follow my dreams! I hope you did enjoy my trip and also hope you have found some motivation to be a better developer (we are developers, not just in code space but in our entire life and in every aspect).
So long and thanks for all the fish,