I know many software developers. They all have unique journeys. Many studied Computer Science or similar at university and began to work while still studying, getting their first experience through internships or at summer jobs between academic years. They took what I consider to be the traditional path to professional software development. My story is a little different, but probably quite familiar to many of today's developers.
I didn't study Computer Science, for starters. I'm a Mathematics and German graduate. After finishing university, while travelling for a month in Australia, I decided, for reasons still unknown, to do a ski instructor course in Austria in the coming winter. After qualifying and spending a few weeks teaching skiing, my season came to an early end with a helicopter ride, a broken wrist and an operation in the nearby hospital. I returned to the UK and, once I was able to drive again, found myself a job close to my parents' house.
I had considered starting a career in translation, using my German skills, but the job was in marketing, and I only got it through a friend from university. I didn't have any idea what I wanted to do, so I took the first thing available to me, hoping to figure it out along the way. Working in the PPC team (some know this as SEM, essentially just advertising on Google and other search engines), my colleague recommended I get familiar with HTML and CSS.
This is where I found Codecademy with its free courses in HTML and CSS. It wasn't long before I was hooked, spending evenings and weekends outside of work learning and experimenting with building web pages. I soon built a very crude and ugly website, figured out how to buy a domain and host it somewhere online, and after that I knew I wanted to go further in this field.
Shortly after, in late 2014, I decided to move back to Berlin, where I had spend my year abroad during university. Having so many great memories there, and with nowhere in the UK seemingly very interesting to me, I found a job in SEO at a startup, and made the move. I continued learning in my free time and, to my good fortune, it turned out that the SEO team was responsible for maintaining the landing pages for the marketing department. A colleague of mine took on this responsiblity, and I quickly expressed my interest in helping him out. He left the company a couple of months later and the burden fell onto my shoulders. I made some small changes to existing pages and created a new landing page advertising the mobile application.
For example, getting a project up and running with HTML and CSS is simple. Browsers understand both perfectly well and you can create an
I changed jobs, spending a year working in Conversion Rate Optimisation, another branch of marketing which took me slightly closer to software development, before deciding that it was time to start applying for developer roles.
Once again I found myself frantically applying for jobs. This time I had a deadline. With just a year of experience under my belt, I struggled to find the next job. Applying for every frontend developer job I could possibly find in the city, I left no stone unturned in my search for employment.
At one point a recruiter contacted me on LinkedIn, the role was a full-stack developer position with a small startup. The team already consisted of 5 senior developers each with many years of experience, so my expectations were low. I very frankly told the recruiter about my complete lack of backend experience and my very limited frontend experience. He was unaffected, a trait I've come to recognise quickly in many an ambitious recruiter. We went ahead with the application and I had the interviews. The first wasn't technical in the slightest, despite being with the Engineer Team Lead. He asked logic-based questions which I quickly figured out (they were quite mathematical in nature) and he informed me that I was through to the second round.
The second round hit me hard. The questions were highly technical, and I failed to answer many of them, hazarding a guess at some answers as they threw question after question at me. I left feeling dejected, assuming already that I hadn't got the job. My other applications had not gone so well either, even the most junior positions were being filled by other candidates and I worried that I might have to return to marketing just to be able to afford to live.
To my surprise, the recruiter called me a few days later saying that they were offering me the job. An even better surprise was the 25% pay increase that came with it! I had someone managed to accidentally fall from my first developer job, learning basic frontend skills and earning not much above minimum wage to a full-stack position where I would be learning Ruby on Rails and React for quite a bit more money!
I have no doubt that luck has played a huge part in my career so far, but this step might have been the luckiest of all of them. The role I landed, at a HealthTech company called Klara, was by far the best of all those that I had applied to.
My job at Klara was where things started to accelerate for me. Not only was I learning lots of new and interesting technologies - technologies that would ultimately form the foundation of my career - but I was also getting into the full-stack mindset. Delivering features end-to-end, even if it took me a while and was a steep learning curve.
If joining Klara was one of the luckiest and best steps in my career, leaving was probably the worst step I took to date. Even though I was learning a lot there, another opportunity presented itself to me, and it came with another hefty payrise of over 30%. My greed got the better of me, and I decided to take the new role.
After over a year at that company, I began freelancing after a friend of mine asked me to help him build a product he'd started building on his own for his marketing clients. His tech skills were limited, but he'd tried to create a nice and clean web application with Python. However, when I took over, I told him I'd rewrite the whole thing with Ruby on Rails, which I did. We met frequently in the beginning and at a certain point he heard that I was looking for a new job. So he offered me one. I was hesitant to join a brand new company where I would be the only developer and responsible for building everything from the ground up, but it also sounded like an interesting project and a great challenge for me. I took the leap and started working with him full-time.
I enjoyed the role and the nature of the very small company. I got to building the web application as a full-stack Ruby on Rails application and managed to make a good start. The timing of this role, however, was very unfortunate. Just a few months after starting, the COVID-19 pandemic hit the world and many of the company's clients ceased marketing operations overnight. As business dried up, it became a challenge for us to continue working in the same way and I was unfortunately let go. This, of course, was a huge lesson for me, as it showed me how quickly situations change and that even a friend would not hesitate to make a difficult decision that was critical to keeping the business afloat, which he did. There were no hard feelings about the whole situation, it was just an unfortunate turn of events and I can't complain about it because many more people were more severely affected by the pandemic than I have been up to now.
I scrambled to find my next role. With just a month to find a replacement job to afford my rent, I was stressed, but I ended up landing another proper full-stack role with a FinTech company using Node.js on the backend and once again React on the frontend. Both were written with TypeScript, which gave me a chance to further my knowledge and experience and this is where I really improved in a big way. Once you can get past the complications and fighting with the compiler, TypeScript becomes a tool that hugely boosts your productivity. The tech team also embraced Test-Driven Development (TDD), which was new for me. Changing mindset to think about testing first before implementation can be a double-edged sword. On the one hand, you need to be intimately familiar with the testing tools that you're using and be able to write tests straight out of the gate. This can be challenging, especially at the beginning. But what TDD also gives you is a new perspective on how you build software. Everything gets broken down and coded into a set of criteria that must be satisfied. With the help of CI, it means you will never build flakey code. It might be buggy, if you don't consider a test case that you should, then of course you will miss that functionality or that particular edge case, but at least it gives you consistency.
At this point in my developer journey, I had become a generalist full-stack developer. This is a role I wouldn't really suggest anybody to aim for since it makes you a jack of all trades, rather than being an expert in any one particular area. If I have one general regret from my career so far, it's that I didn't try hard enough to specialise earlier on. My next role allowed me to do that, and it also pushed me to go freelance full-time, something I hadn't considered at all before then. A recruiter from an agency was hiring Ruby developers for Deliveroo, and it seemed like a good idea to apply. I wasn't actively looking to move on from my job, but the contractor rate was much higher than my salary and I also thought it would be a big plus to have a name like Deliveroo on my CV. I applied and after a technical round, which I passed, all that remained was a chat with an Engineering Manager. It was quite a relaxed conversation and we just discussed how I work in a team, and those sort of soft skills than I presume most developers have gained after 5 years working professionally.
I started with Deliveroo and was put onto their Geosharding project, a project that spanned basically the entire tech team and required partial rewrites of all services. Deliveroo is a huge company by my standards and with dozens or maybe even hundreds of services, this project was a big one. To give a brief summary, our main task was to switch from interger IDs (i.e. 1, 2, 3, etc) to a string ID which contained information about what kind of resource it was, which country it was from and then a unique ID (we used UUID for this). Making this change took well over a year and I'm not sure what the result of that project was since it was ongoing when I switched to another project.
The other project was focussed on improving the performance of the database, which was under threat of crashing at peak times because of the huge amount of data that was being stored and retrieved. After some attempts to improve query performance, reduce writes to the main database and generally just reduce the load, the team ended up working on another project, which was to take 3 core tables from the database, and put them in a secondary database, which would also be connected to the application. This was quite a fun project, and I learnt a lot about how Rails connects to Postgres databases, and quite a bit about the theory of setting up a database.
My contract with Deliveroo was limited to 12 months, and before the end I had managed to secure a contract with a VR company in Munich that started as my Deliveroo contract ended. So, at the start of July 2022, I began working with holoride. Here I worked with Ruby, React, Next and a bit of Elixir/Phoenix, which was a great challenge but also very interesting.
That contract was once again limited and at the end of January 2023 I left holoride with nothing to do. I thought briefly about taking some time off to rest and to work on some side projects, but just a few days after finishing my contract, I interviewed for a role via Toptal and landed it, so I began working on a greenfield booking and scheduling project, where I was the only developer. Unfortunately, the client wasn't very experienced with working with tech teams or tech people and his expectations were far too ambitious for what he wanted to build, so at the end of March 2023 our work together came to an end and we parted ways.