Mechanical Engineering to Software Engineer: My Journey

George Jones
dunnhumby Science blog
7 min readOct 21, 2020
dunnhumby Manchester graduates 2018 (myself on the far left)

Background

Earlier this year I finished the 18-month graduate programme at dunnhumby as a software engineer. When I think back to how inexperienced I was when I started at dunnhumby, I realise it has been an interesting journey, and I decided it was worth sharing my experience for anyone thinking of applying in the future.

I had no idea what I wanted to do with my life when I finished university. I graduated in mechanical engineering, went travelling for a few months, and started applying for jobs all before figuring out I was interested in software. I felt obliged to apply for mechanical engineering jobs but my uncertainty at the time meant I was never putting my all into the applications and they were never successful (something I am now thankful for). Once I discovered software engineering roles, I knew I had to change my approach but it wasn’t going to be straightforward given my mechanical engineering background.

My inexperience came to light during a technical test where my attempt at the solution was shambolic. I wasn’t completely inept, but the test was restricted to a language I had never used. For my interviews I needed to be self-assured on my coding logic, insistent on my problem-solving skills, and able to demonstrate that I was a confident, quick learner. Most importantly, I had to believe in myself, which is the biggest key to any success. I landed myself a place on the graduate scheme at dunnhumby and was excited to start.

Working Life

On my first day the doubt started to creep in and I was anxious. I understood very little and I was pretty useless for at least the first month, but fortunately I was in the right environment to learn. I was given time to settle in, I was able to learn at my own pace and I have had super-smart, helpful colleagues that have supported me since I started at dunnhumby.

It’s easy to forget now how much I didn’t understand back then. The multitude of acronyms and software names were seriously confusing, especially when you hear a recognisable word but it means something completely different! Names like Guacamole, Squid and Cucumber definitely don’t mean what you think they mean. Despite the confusion and naivety, my colleagues were always there to answer my questions, no matter how silly I thought they were, and it was reassuring to learn a lot of the other software engineers had different backgrounds too; maths, physics and various engineering disciplines. It makes you appreciate that everyone has to start somewhere.

Software engineering is a relatively new industry, it’s unique in the sense that you don’t need a license to practice and there aren’t many regulations. However, this has paved the way for the exciting, thriving industry that exists today with amazing online communities, countless open-source projects and new emerging technologies always on the horizon.

Rotation 1 — Infrastructure Management Technology

The first of my 3 rotations was on an application platform team. I started with a tutorial on an infrastructure management technology called Kubernetes, and for someone with little to no experience this really was getting thrown in at the deep end. I think I ended up watching it 3 times before realising I’ll never fully understand anything by just watching videos. I had to get stuck in.

For an initial task I wrote some scripts that recreated and enhanced existing ‘kubectl’ commands. To recreate some commands I used the python Kubernetes-client, and to enhance or create new commands I used bash scripts with the kubectl plugins. Although my experimentation wasn’t directly contributing towards the team’s goals, it was a really useful task to get me started, I was learning and it gave me some confidence going forward.

Although I felt like I didn’t make many significant contributions in these first 6 months, that was absolutely fine. It was more important to settle in and absorb as much as I could from the experienced people around me. One major take-away from this initial period was to always listen and engage whenever possible, because you can’t expect to learn everything straight away but if you are patient and keep listening, it will eventually click into place.

Rotation 2 — Cloud Computing Technology

The technology used in my second rotation was similar to the first, but the team was half the size and the product was completely different. Looking back, this was ideal. I had basic knowledge of the technology, I had built confidence through my first rotation, and I was keen to build on that with practice.

I got stuck in more with the work on this rotation, I was putting what little knowledge I had of Kubernetes, Terraform and Google Cloud to practice. I couldn’t come up with quick solutions at this stage but if all the trial and error eventually led to success, then I’d achieve that sense of satisfaction we all love as software engineers, and I knew I was developing my knowledge along the way.

Technologies used at dunnhumby

I started to feel like an actual developer this rotation rather than a naive graduate that looked like he’d walked into the wrong office. Although I started to really settle in, I was still excited by the prospect of a new rotation with new work as it was another chance to learn, and how often will I get to chop and change teams in my career?

Rotation 3 — Front-end Technology

My final rotation and it was the perfect time to learn some front-end technologies; React and Typescript. It was refreshing to use new technologies that were easier to grasp compared to the likes of Kubernetes and Docker. It is always good to learn something new but this felt more satisfying because I was finally getting to grips with all aspects of a software product.

The biggest pro of front-end development, which I loved the most, is the immediate feedback you get. You can set up your machine to run as a web server and display your local UI code in the browser, which automatically reloads when making changes to the code and you see the effect of these changes almost instantly. It’s difficult to obtain that sort of feedback when creating new resources in the cloud, or updating existing ones, it takes more time when you are deploying, redeploying, and then testing, it is always more tedious.

Nevertheless, I decided I wanted to go down the DevOps/Cloud engineering route, and I was lucky enough to be welcomed back onto the team from my second rotation. I may have sounded critical previously but I do in fact derive more joy from this type of software. I can’t quite put my finger on it because it’s harder to understand and I definitely find it more challenging, but I suppose that just may be the reason.

Looking Back/Things I’ve Learnt

A recurring theme in these rotations is the support I have had from the people around me. For me this has counted more than my ability or my personal motivation. It’s important to remember that you are never the smartest person in the room; we can all learn something from each other and if you ever forget that then you limit yourself. Make friends, ask questions, be open-minded, and absorb information because each and every person in your team will have more knowledge than you about at least one thing.

One thing I love about software is the ambiguity, there’s no right or wrong way to write software, for every end goal there is more than one way to achieve it. It means the work is never monotonous, it makes research interesting, and encourages you be creative and open-minded with finding solutions. Don’t get me wrong, this certainly makes things harder at times, but it also keeps it thought-provoking and exciting, and with support from teammates and online communities, nothing ever seems impossible.

On the flip side of this, there’s the issue of imposter syndrome. It can be very easy to self-doubt at times and this can descend into questions like ‘why did I ever think I could write software?’ and ‘what am I doing with my life?’. I’m almost certain a lot of software developers have experienced this at some point which is why I’m mentioning it, it’s the nature of software and isn’t something anyone should worry about because no single developer can know the full extent of all the programming languages and software tools out there, there’s simply too much and it’s forever evolving.

Summary/Final Message

If I were to give advice to anyone starting out their career in software, no matter what background they have, I would tell them it’s all about your attitude to work. Be eager to learn, be open-minded, be curious, listen to the people around you, adapt in new environments, go out of your comfort zone. If you do all of this, the rest of it will fall in to place; you’ll improve as an engineer, you’ll grow as a person, and you’ll be on the right path to success. Software is constantly changing, everyone has different ideas and ways of doing things, so just absorb as much as you can and enjoy the learning process because it never stops.

--

--