DEV Community

Cover image for Embracing Failure: A journey from Tester to Tech Lead
Craig de Gouveia
Craig de Gouveia

Posted on • Edited on

Embracing Failure: A journey from Tester to Tech Lead

It started with one of the biggest failures of the last few decades, the sub-prime mortgage market, and several other factors that caused the failure of the global financial system. This isn't ideal when you're contracting for companies that earn most of their money installing network infrastructure for banks 🙋🏻‍♂️.

It was 2008, and I lived in London, 24 years old and recently married (too young), having been in the U.K. since 2005. I effectively worked as a labourer, just with extra steps, meaning I installed network cabling on various building sites. The job was pretty great for someone without a university education; it paid well. I got to work in some exciting places (the McLaren F1 development facility was definitely a highlight), and it was technically demanding. The point is, I enjoyed the job and was good at it. Unfortunately, the economy had other plans. Right, okay, cool, but...

Isn't this supposed to be about the tech industry?

So we managed to stay in London until the end of 2008 through the recession. I had not worked for about 4 months at this point, and remaining in London on a single salary for two people just wasn't feasible. We somewhat randomly decided to move to Newark-on-Trent, having never set foot in the place; it's a great little town, though. This put me in the Midlands with no work and minimal savings; it was very hard not to feel like I had failed at doing London in my 20's at this point. I needed to find a job fast, so I wasn't expecting anything significant and kept my expectations very low. I guess this is where the story actually begins ✨.

I interviewed for a job in Lincoln at a software company as a support engineer. Honestly, I wasn't expecting to get the job. After being stonewalled by pretty much everyone, I was happy to just get the opportunity to interview. I got the job, possibly because I have spent most of my life tinkering with computers and was already providing tech support to my family for free. I started on £12k, which was a £13k pay cut 😅.

I had just begun doing something that I loved. I highly doubt that would have happened without leaving London; all it took was a global financial crisis, easy. It was clear that I had developed a skill for this kind of work. I moved from 1st to 2nd line support pretty quickly due to the technical nature of the cases I was dealing with. Shortly after that, I moved to the Quality Assurance team. And...

What does testing have to do with failure?

So besides the obvious "this thing failed x tests for y reasons", there's a subtler and more insidious issue that most new testers experience. When you're new to a job, new-ish to a culture (I'm South African) and new to a project, understanding how to navigate the conversation of "there is a problem with x" is hard. Approaching the devs feels a lot like the response is going to be "Oh? You're Approaching Me?" regardless of what the person is actually like, it feels like you're guaranteed to fail. It is, however, your literal job to communicate these issues, so embracing that feeling is necessary for everyone to succeed.

Suppose I didn't welcome that initial discomfort as motivation to learn how to present helpful, actionable information as transparently as possible? I wouldn't have lasted very long as a tester. I believe it is this skill that separates good testers from great ones. I decided that the best way for me to do this would be to tell people precisely what part of the application code failed and for what reason. It meant getting much more in-depth and hands-on with code than many testers ever do.

It's around 2013, I have been testing desktop applications initially written in Delphi, and we are most of the way through migrating everything to C# and .Net. These applications are integrated with large supplier catalogues using SOAP web services backed by mainframe systems. I learnt a lot here, but I didn't realise at the time that the most valuable lesson was not to allow complacency to prevent me from moving on from something comfortable. I would need to learn this a second time before it sunk in.

Next, I take a job in Nottingham with a company that is SaaS-based with some mobile offerings. The tech is a lot more exciting, and the pay is much better. The commute to the new place kind of sucks, though. Lincoln had low salaries for tech jobs, which is probably why Rockstar had its testing dungeon there. Over the next year, I mostly get to grips with new ways of working (using "proper" agile methods) and a complex system with challenging release cycles.

This is also around the time my marriage fails; which was another source of valuable lessons and an opportunity to develop and grow as a person. One of the driving factors for moving to the city centre where I worked was having a commute that didn't suck. As a result, I had more time to evaluate where I was in my career. This evaluation kicked off a doom spiral (🤘🏻) that made me enrol on a part-time course with the Open University in Computer Science & Statistics. I also started spending a lot more of my spare time writing software; I wasn't getting a chance to do this as a tester. I felt like I had failed to make opportunities for myself and was course-correcting pretty violently. I also began to look for new jobs, again much later than I should have.

In 2016 I started a new testing role for a Big Data company; I was absolutely stoked that I got the job. It came with a hefty pay rise, and I thought it was out of my league; they didn't; this was a recurring theme with how I valued myself. It was the largest company I had worked for by a significant margin. I had exposure to some incredible tech and phenomenal talent; the access to training was top-notch, and the pay was excellent. At this point, I was focusing on massive scale performance tests; I was writing more code than performing manual testing. Those years of testing had developed my ability to keep the big-picture structure of large-scale distributed systems in my mind while focusing on low-level detail. It is unconditionally one of my most valuable skills in designing systems.

I absolutely despised working there and only just forced myself to eke out a year despite all of what I have just mentioned. The problem is, large companies have a lot of space for people coast in. When you're going through a phase of immense self-development, it really kills your buzz to be met with that resistance to improvement. I felt like I had failed to crack working in a big corporation, but I learned what kind of culture I need to thrive. So...

What does software development have to do with failure?

After the foray into the corporate world, I started a limited company planning on contracting. I began working for a small insure-tech company instead, which was awesome. I wanted to build cool things with exciting tech and was not disappointed; it was a great cultural fit. I created a test automation framework, contributed to open-source projects and contributed components to the platform that we were building. I learnt so much here, but more than anything, it just reinforced my love of solving problems with creative software solutions. I think it was here where I really stopped fitting into a "Tester" or "Developer" box.

REPL driven development is my preferred way to work, which is conveniently explained in this article where John Stevenson mentions getting fast feedback as a core benefit. This, in my opinion, is closely related to a systems design concept called fail-fast. To be horribly reductive in the pursuit of a point, detecting failure early on helps you avoid sunk cost bias. Acknowledging something isn't working, identifying elements that did work and moving on early is almost always, in my experience, the best approach. I view software development as a process of continuous failure that ultimately culminates in success. This approach is core to how I work. Back then, it meant building tools to enable people to get feedback on whether something was working as quickly and unobtrusively as possible. Today, it means evaluating options and making decisions as pragmatically as possible and communicating this in a way that lets people buy into the strategy.

So at this startup, the whole team was super motivated and passionate; the product and the timing were both excellent, which meant we had many interested investors and clients. However, the eagerness to please and the number of "suitors" we had for growth meant simply too many opportunities. We got pulled in multiple directions, ultimately leading to the company failing to capitalise on any of them, which is a shame. I had already moved on whilst the final steps towards this were being taken, which brings us to...

What does seemingly abandoning your career have to do with failure?

It was scary to decide to walk away from a company that I loved working for, where I was doing something that I loved. The prospect of going from a decent salary to a student loan was terrifying. I think that I must have gone back and forth about whether to do this about a thousand times before ultimately taking steps to do it. Having just finished the first year (two years part-time) of my Open University course, I weighed up my choices. I did not enjoy distance learning. I love learning, but something about doing it remotely just doesn't work for me. So I tentatively decided to send some applications out to universities offering full-time courses with in-person lectures.

I felt like getting a degree was somehow necessary to legitimise my transition from testing to software development. Even though I had already proven this by doing my job and doing it well, I often fail (or refuse?) to see evidence of my own ability. Of the 5 universities I applied to, 4 got back to me, 3 offered me a place, and 1 said no almost immediately. Amusingly, the one that rejected me was also the only one I contacted ahead of time for advice on whether it was a futile attempt; thanks, Nottingham 😘. Without that rejection, I wouldn't get the chance to spend my time focusing on deepening my knowledge and understanding of computer science or discovering a love for psychology, neuroscience and philosophy. I also wouldn't be living in Sheffield, easily one of my favourite places in the U.K. so far.

My enthusiasm didn't stop me from failing and needing to resit a maths module in my first year to progress. It turns out not doing "serious" maths for 14 years and then suddenly diving in is hard. There is nothing like failing at something you've staked your career on to light a fire under your arse. Going to university for the first time when you're in your 30's is tough. However, I feel like you're a lot more motivated to engage with the subject matter; perhaps you're in less of a rush to get out there and start working and earning money.

Speaking of earning money and my worries about not being able to eat on a student budget 😬. I built relationships with a few clients doing freelance work whilst working at the startup and used this to supplement my income. The work ranged from various web dev tasks to building a service that would run performance tests on point-of-sale systems at multiple sites worldwide and continually send results to a central hub. All fun challenges with unique quirks and constraints, with many failed attempts at building things, but ultimately successful. Having let go of the security of a fixed income really allowed me to reframe my thinking around how I earned money. This led to me finally making that move into contracting...

What does working for yourself have to do with failure?

Having a Personal Service Company requires some curious mental acrobatics. You are not an individual; you are a business, but at the same time, you are the owner and sole service deliverer for that business. As a creative (yes, we are), you put a lot of yourself into your work; it can be hard to separate them. Engaging with feedback on what you create and building on it separates good developers from great ones. When that feedback is delivered to a business and not an individual, well, let's just say the delivery of it is a little less restrained. This is, of course, a good thing once you get over the discomfort. Even better, it hones that ability to determine what is a good fit for you and how to walk away when something isn't.

Leading up to the summer break at university, a former client contacted me about some new work. I had helped them build a performance testing framework the previous year. They wanted me back to help define and build an automation strategy for a new stream of work. Unfortunately, the people initially involved in bringing me back moved on after a year to other projects. What we had discussed and agreed on changed quite drastically. New stakeholders with wildly different expectations got involved, and the relationship soured not long after that. In retrospect, that engagement should have ended after that initial year when everyone was happy. The following contract aligned perfectly in the end; it was a much better fit, and I continued to work with this client for some time on a few projects.

Managing a business throws several interesting new things in your way. It gives you a taste of the challenges of running something much larger and more successful and perhaps a much healthier appreciation of the work involved in doing that. Most importantly, though, it gives you an appreciation of what failure means and how it can shape your future positively.

I have shelved contracting and have taken a permanent role as a Principal Engineer and Tech Lead for a former client of my business. I did this because I believe that what they are doing is incredibly exciting. I get to work on a diverse set of projects solving unique and complex problems. I could have easily carried on contracting, but I absolutely love the people I work with. Every day, I am reminded how worthwhile the change was. Being somewhere because you want to be, not because you have to, is excellent. Cool story, bro, but...

What does failure have to do with me?

Increasingly we are becoming more comfortable with failure as an industry and a society, treating it as a learning opportunity, and this is a remarkable thing. That being said, I believe it is still important to share your experiences to possibly help others. What it means for you is one of two things. Either it will serve as a valuable source of inspiration if you are someone along a similar path and unsure about some risk or perception of things going wrong. Or you are in a similar position but feel that you have your own story to share, which could help someone, and the text above may inspire.

Writing this article has helped me gain a new appreciation for some aspects of my journey that I had forgotten about. It's also the first thing I have ever written for a public forum, so any feedback you can frame as a JoJo reference is gladly welcomed.

Failure never feels good while it is happening. I hope that this retelling of my career's meandering path will provide some compelling examples of all the ways seeming failure often results in new opportunities. Whether in understanding your role, direction, or self, embracing failure and allowing it to shape you will pay off. Just perhaps not as quickly or in the way you expect. It will inevitably lead to you being more resilient, capable and accepting of the interesting little curveballs life throws at you.

And remember:
Jotaro says nothing is impossible

Top comments (0)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.