Hello, Dear Reader!
Settle in for a long one this time. I would like to write about my journey from being a Tester back in 2004 to being a software engineer today ( 2024 ). A mere 20 year long journey. I’m going to write down how I got this far, what it took, the sacrifices, fears, doubts and all the things in between. Let’s get started.
The early days
Around 2002, I became a student for a two year long certificate study for a position called Software Programmer. It was a paid course. My mother paid for the two years, it was the cheapest options at that time in Hungary. The school, SZAMALK, was 80km from where I lived, so I had to travel everyday. The bus ride took about 1.5 hours that I mostly managed to sleep through. Then school until 2pm-ish and then travel back home. Another 1.5 hours. I woke up at 5AM to get to school on time. It was quite rough. I mostly slept through my classes.
The only reason I was doing this course is that people who got above a certain degree got a chance to have an interview at EPAM Systems. Back then, it was called Fathom Technologies.
Somehow, I made it through two years of absolutely mind numbingly boring lectures and after a first failed attempt at graduating, I managed to get a score high enough to pass. As someone with ADHD, all schools were hell. But eventually, I made it and won an interview with a couple of friends I made on the way there.
At that time, there weren’t any open software engineer positions but they said, that they are looking for Testers and that there was a chance, that we could switch over eventually.
As new starters in the industry, of course we accepted. We got thrown in the middle of things with not much testing knowledge. But it was interesting and we started to learn things. I worked in Java and we coded around an automated testing framework written in Java. Our lead was (still is) an ingenious person who worked for a lot of big names by then and had a fantastic test framework written. We just expanded on it and added new tests here and there.
I started my manual testing journey then too. For several years, I was just clicking around, building selenium tests, writing some Java, but mostly tracking tests in excel files and word documents. Sometimes, I would join an interesting client too. That’s how I first got to fly to London. My first ever flight was to the UK. I fell in love with the city back then.
Bored
This was as boring as it sounds. I didn’t know better really. But I started to gradually get better at it. I started to develop my skills around software deployment and building things. I always tried to test the most difficult scenarios. I was always eager to pick up something that I didn’t know how to do. This was my general motto:
“If I didn’t understand what the issue was about, I HAD to pick it.”.
This was a very simple way to get familiar with almost everything. And then gradually, I got more and more irreplaceable because I knew the system so well. I was always eager to pull all-nighters. I was young. No responsibilities. So I worked mostly. I rarely went out to party.
Eventually though, there wasn’t enough stimulation. I knew I had to do more, but didn’t really know when and how.
Dipping into Management
I had to resign. I had to evolve. I had to step out of my comfort zone. I tried to be a Test Manager for a little while. About half a year. I changed jobs and worked for Ustream for a while. This is were everything changed. I made a friend. This friend of mine started me on a journey that would forever change my entire life. He simply believed in me. He urged me on and showed me that there is simply so much more.
This was all the push I needed. The simple truth that there is, in fact, so much more. He started showing me better ways of doing automation at first. We started writing some nice code together and started on a Test Driven Development journey that was very new back then indeed.
We, went back to EPAM then. And he got a job opportunity to work in London for Camelot. And he urged me on to try as well. I said he’s out of his mind, I can’t do that. But I did. And I got in indeed. Again, due to this person and a wonderful recruiter. I’m pretty sure without them I would have flunked the interview. I was way out of my own league.
First big step
There I was. I got my first job as a Software Engineer in Test at Camelot UK. By then I was already together with my now wife. But she was fantastic and I moved to the UK and lived there for three and half years. I was absolutely scared shitless. I didn’t know what to do. I didn’t know how to code nicely. I didn’t know how I even ended up there?! The interview was horrible I thought ( though later I was informed that my CV actually stood out because of I how I wrote about myself ).
Friends that push you
I made some friends though. I cannot stress enough how important it is to surround yourself with intelligent people. The friends I made had a huge impact on my choices. Most of them I’m still in contact with to this day and I constantly appreciate their input.
The next motto I always live by goes like this:
“If you are the smartest person in the room, leave.”
Learning from James Marcus Bach
Around this time, I read about a tester called James Marcus Bach. I actually met him in London and took part of one of his black box testing courses. It was a blast! Absolutely fantastic experience. I bought his book called Buccaneer scholar and I immediately connected with his world view and his passion for knowledge. I started hording information. Around that time was the first time I begun expanding my second brain kind-a. Though, at that time it was just a collection of notes here and there.
Black Box Testing
That’s when I decided to get the BBST Certificate for software testing. I couldn’t care less ISTQB. I wanted something that matters to me. The course was awesome. I learned a lot again and made it on the first try. I was engaged and happy with what I was learning unlike in school.
Certificates
As time went by I took a couple more courses and got a couple more certificates. Docker, Programming in Python, Programming Android devices, Linux essentials, containerization, and a few others. All these helped me in my testing and writing more complicated test frameworks. Understanding Selenium and mobile testing better. I even wrote my very own first test framework for mobile devices.
I had some fun pursuing some knowledge.
Coderetreat and other courses
My other friend from Hungary further pushed me to attend certain other places as well that were more developer focused. I took part in Coderetreat London which was a fun little gathering with TDD in focus. I wrote a couple of implementations for Conway’s Game of Life challenge and started practicing coding katas on a daily basis after going to a course from Uncle Bob. The katas really REALLY helped me with my coding.
Around this time, I started to be more involved in actual code and not just testing framework code. I remember to this day that my first issue was to refactor some Spring code to use annotations and move around some code into a different package. I was absolutely afraid. I had no idea what the hell I’m doing and what any of this code did.
So I asked for help. I sat down with a dev and made him move some of the code and write the first couple of annotations and explain what they did. Now that I knew what to do it was quite easy to replicate and understand what the rest of the things did. Most of the code still went WAY over my head. But I was getting there.
I was still doing the same thing I did before. If I didn’t understand it, I had to do it. This idiom brought me quite far indeed.
The first opportunity to change
The build engineer of the team left. Suddenly, there was no-one picking up tickets related to build failures, distribution of binaries, deployment problems, and taking care of testing environments. I grabbed the first ticket. I still remember what it was about. I was absolutely fascinated. The ticket went something like this:
Use Puppet for the build process
. That’s it. That was the ticket. The process back then was just a collection of
bash scripts doing things. There was no versioning, no git, no nothing. Just a bunch of scripts from a guy who wrote
some stuff on sticky notes. He started to organize things, but he never managed to finish them. Before he left, he
showed me everything most of which I didn’t understand. But I knew I could learn.
And I would. I started reading the puppet documentation. What it did and why and how and where and best practices, etc. I got a lot of advice from others as well and gradually started to get into build engineering. That was my first opportunity to shift away from software testing. To be a build engineer. A guy who creates and manages the builds, automates the test environments, deploys the application, manages production boxes, etc. It was super exciting. I started to use Jenkins a lot and be a lot more proficient at it and even wrote a few plugins.
My first real code was actually to an open source project called GoCD in 2015. Pull Request.
But, I’m getting ahead a bit.
Going back home and changing jobs
For personal reasons, and because I wanted to switch full time into build engineering, I moved back home to my wife in Hungary. I started a job at Chemaxon as a build engineer. I had a wonderful partner in crime who, again, helped me a lot and had a bunch of amazing ideas about builds and encouraged me to expand my knowledge. Here, is where I first started contributing to open source software. Creating issues, creating my first pull request above, looking to use a nice automated environment.
I used a lot of Hashicorp projects too. Packer was one of the major ones. I contributed to the windows installer and started helping other people on StackOverflow and also, started my own blog with tidbits of information I gathered. Things like, a nicer Powershell scripting way. Or how to set up your laptop with chef or puppet.
It was a great time of learning.
Projects, Projects, Projects
Which brings me to projects. I have 184 repositories on GitHub and even more on various other places. About 80% of these are absolutely useless. Just code that barely works, or doesn’t at all. But they are projects nevertheless. Some of them are relatively successful at this point. But it took a LOT of work. I put in a lot of effort. I discovered Go by this time and enjoyed the hell out of it. I started coding in earnest. I wrote project after project after project. I re-wrote some things I found online. I had a few ideas of my own, some worked, some didn’t; and then I just joined an online project called Gaia. This is where I really started to grow. I started to run home labs. Bought some raspberry pis and used old laptops. I payed for a Hetzner server too at some point.
Talks and Presentations
I challenged myself every day with something new. I gave talks on Jenkins. I gave talks on go in GopherConUK. And always looked for good ideas to work on. My friends really pushed me over the limit of what I was capable of. I always followed their advice to expand my knowledge.
Creating a talk and a presentation is super stressful. I was always very nervous, but to present means that I needed to be proficient at what I’m presenting. At least to some degree. Thus, it was a great learning opportunity and incentive.
I would come up with the abstract that sounded good and then my task was to actually make it good. I’d like to think that I succeeded somewhat. One of my best talks was Robotics with Go. I really enjoyed working on that.
Messing up everything
Which brings me to my last point about projects. Do. Not. Be. Afraid. To. Mess. Up. I messed up a LOT. I made a ton of mistakes. Some of which I didn’t even understood until much MUCH later. Just be sure to learn from your mistakes. If you keep repeating them, that’s when the problems arise.
Second opportunity
After a while, suddenly, out of nowhere, an opportunity arose. Another friendly recruiter guy ( yes there are such beings ) offered me a job at a place called Cheppers. A Hungarian company working mostly in Drupal, but also had a backend engineering team. Another place that would change my whole life yet again.
This was ALMOST a software engineering position. In fact, I would never be a software engineer as such. I love working on code that produces infrastructure. So I was and will always be a cloud/build/devops/infrastructure engineer. But it’s, nevertheless, software engineering. Here is when I met another person who would, forever be, my best friend and life long companion. A person I would never again forget. A person who I could always count on who could always count on me.
Friends that push you
She would constantly push me to even greater hights. I started to do Advent Of Code problems. Around this time, I really felt my education lacking. I didn’t really know any of the algorithms involved in AOC. I could barely solve the first 10-12 problems. But that was great! Another learning opportunity. To this day, I solve AOC problems every year. Some of which are still going over my head. Especially the ones involving crazy math or DP or memoization. Although I would like to think that I did improve over the years.
I read a bunch of books about algorithms, did a 150 or more LeetCode problems, and Project Euler problems and Exercism problems ( I even contributed a test fix to this one ).
The work also involved dealing with a lot of servers and a bunch of AWS resources. And thus, my career in Cloud engineering begun to take shape.
Third opportunity
The only thing missing from that job was the fact that I was still not writing Go and I really wanted to write Go.
Another job presented itself suddenly, which was a full Go position. I worked for ArangoDB for a while on ArangoDB Oasis.
This was a pure Go job with a tiny amount of fronted. Here, I begin working with Kubernetes in earnest. I was fascinated with it. I read everything related to Kubernetes and truly enjoyed learning about it. I read Kubernetes Up And Running and wrote several guides and projects of my own that either explained Kubernetes for beginners ( one of my posts explaining Kuberenetes with example was the most successful post I ever wrote ) or dealt with some kind of problem on Kubernetes.
I wrote many controllers and many more services and software that was “Cloud native”.
In fact, I started to contribute to the language itself. To Go. I loved it so much, it was a great opportunity to learn. To be part of a huge community of like minded people. To experience working together towards a goal. It was fantastic.
Applying to Weaveworks
I knew about Weaveworks for a long time by then because of Flux and Flagger. I knew about GitOps and I used it from time to time in my own environments. I applied to Weaveworks 2020. They responded and I talked to a C*O who would later leave. She told me that at that time they didn’t really hire, but let me try next year when things look better. And I did apply again in 2021. Almost a year later. And I got in. I had one of the best interviews of my life thanks to some of the most amazing people ever.
And yet again, I found myself surrounded with intelligent, creative people who knew their way around technology.
I continued expanding my own knowledge as well and tried to build up a portfolio of things I knew and things I did. I joined reddit and started to be part of the Go community there and to helped a lot of people.
Helping others is not only beneficial to others. It’s also beneficial to yourself! Explaining things is hard! Explaining things that will help someone in the end is even harder! Thus, helping others makes you learn which helps others which makes you learn… etc.
Talks, meetups
I joined a bunch of meetups again. And took part in Kubernetes meetup Budapest, Docker meetup, Go meetup, Cloud native meetup. Whatever would accept me to talk anywhere or just go and network.
Open-source maintainer
Around this time I became a maintainer for CAPA and recently, external-secrets. Again, got to know a lot of very nice people.
The downfall of Weaveworks
Sadly, because of various circumstances, Weaveworks shutdown in 2023.12.28. I lost my job. I started to apply to various places and didn’t make it really anywhere where I really wanted to go. In the end, I don’t care because I didn’t agree with those people, but I kind of felt like I still am just a freshman in certain things. I still feel like that little tester guy who came to the big city with nothing but a nickle in his pocket and has no idea what the hell he’s doing.
I feel like I’m missing so much ground work in Algorithms and in Computer Science. I did several courses by now, including the MIT distributed system course, but I feel inadequate and out of my own league. I’m guessing this feeling will never really go away. I read about the Imposter Syndrome. I read many books about it. I read many books about Algorithms as well. It gave me a tiny bit of confidence in myself, but not THAT much.
Kubermatic and the future
Then, I got accepted at Kubermatic. A wonderful company full of wonderful and lovely people. I’m working on all things Kubernetes and I’m still learning new things all day. Today, I’m taking a Large Language model Course in order to improve myself and perhaps, to create another application and another post explaining things as I learn them. For me, that works best to distill information. I use a combination of Zettelkasten and Second Brain with an Obsidian vault to manage and process information.
The future, I don’t know about. I always write and create something. I’m always on the lookout for the next thing to work on and to learn. The next shiny project that will grab my attention. Hopefully, I can do that here. I have a feeling that I’m going to meet and get to know some great people here again. And I’m hopeful that, yet again, I’m going to be able to learn and grow a bit more because of them.
Conclusion
Phew. This was quite the journey. I hope you, dear reader, enjoyed reading it as much as I enjoyed writing it. This contained half my life going through a lot of places and finding people who supported and helped me along the way. Without them, I never would have gotten this far. I needed the push at the right time and the right place and right direction. I’m trying to do the same thing for people everywhere around the world by creating projects, posts and other material that will, perhaps, influence someone or give them the push they need in the right direction.
Good luck on your journey. And godspeed!
Thank you! Gergely.