Reflection: My First 3 Months at Moonpig as a Software Developer
Tags: beginners, career, codenewbie
Published: 2022-03-22 14:35:36

## Introduction 👋🏽

So, I’ve hit three months as an Associate Software Engineer at Moonpig, and I thought it would be good to reflect on my time so far. Time flies, and I often forget what I’ve worked on, so I hope this blog post helps me remember what my initial three months were like 😅, and I hope this gives anyone reading the perspective of a new engineer joining the company. 

## Understanding How Moonpig Operate 🌝🐽

Moonpig are a large organisation, with a few different teams, each looking after a different area of the customer experience. This ranges from the user’s initial interaction to select a category for a card they are purchasing, to being able to attach gifts to their purchase, all the way up to fulfilling the order once a user has paid. 

A big part of my first three months was getting to grips with all the different areas (this is a work in progress!), but I’ve definitely got a better understanding with how all of this works from a technical point of view.

## Learning New Technologies 🛠️

### Backend and Serverless

Coming from a front-end role, there was a lot for me to learn in terms of back-end. For example, the company use AWS infrastructure and [Serverless](https://martinfowler.com/articles/serverless.html) which I had never worked with before. I started by understanding what Terraform is (Infrastructure as Code to deploy resources into AWS), followed by the different resources you can use in AWS. 

One area of Serverless which Moonpig heavily invest in is Lambda - these are small, single purpose functions which are deployed into AWS which performs some operation and returns. The function is called when it needs to be executed, meaning you only pay for the time your functions execute - much cheaper than keeping a server running 24/7, which most of the time will be idly waiting for requests! I was really surprised by the power of Lambda, and just how much of the company’s backend operations rely on it.

Architecture diagram showing how different AWS services interact with one another

### Testing 🧪

I’ve also been getting used to [Test-Driven Development](https://www.freecodecamp.org/news/test-driven-development-what-it-is-and-what-it-is-not-41fa6bca02a2/), where tests are written for any backend / frontend work we do. This often involves writing a test for the functionality you want to add first, which requires a different way of thinking, as opposed to just writing the feature without tests. 

## Different Working Environment 🌱

### Moving from an Agency to a Product Company 🏢

My first role in the industry was at an agency, building apps in React Native. We had a variety of clients, and depending on the workload, I could find myself working on multiple projects at once. New features and designs would come from our end client, and we’d log time worked on tickets to ensure we correctly bill the client.

Things are a little different in a product company. Everyone is working towards one product instead, which I’ve enjoyed. It’s allowed for me to slow down and focus a little more. Each team at Moonpig has a Product Manager and Designer, who are the main points of contacts for new features, upgrades / enhancements and new designs. Also, there’s no time tracking in product companies (well, at Moonpig at least), which certainly took the pressure off of me a little bit! 

### Pair Programming 🍐

In my previous role, I would work independently most of the time. The concept of pairing was totally new to me coming into Moonpig (working alongside another engineer on a single ticket). A huge benefit I’ve found with pairing is the amount that I am able to learn in a short space of time - I’ve learned a lot about not only the technical domain of the team I’m in, but also using my tools more efficiently (for example, discovering that rebasing in Git was a thing 👀). It’s also super easy to fire questions to the other person if you’re unsure - when working independently, it isn’t as easy to get help so quickly. 

### Hybrid Working & Networking 👥

As Moonpig have an office in Manchester, it’s been really nice going in once or twice a week to change my working environment up. This has also meant that I’ve been able to meet fellow Moonpig colleagues face to face, learning more about who they are and what sort of work they do. My previous role was fully remote, meaning all my interactions with colleagues were over the internet. It’s been nice to have an office space to go into since working at Moonpig.

### Working with Agile & Scrum 📝

There are various processes in place to help keep the team working together efficiently, which come from Agile and Scrum. A couple of examples I was new to at Moonpig were the following sessions: refinement and retrospectives.

Refinement is time for the team to go through upcoming work (tickets in the backlog) and ensure there is enough information to attempt the work, ahead of pulling the ticket into “to do”. This is a good time to identify any blockers and dependencies on a task ahead of time.

Retrospectives are reflective sessions where the team are able to openly discuss how things have gone over a timeframe (e.g. every two weeks), and identify areas to improve on. It’s also a nice time to celebrate any wins that the team have had, keeping the team morale high.

## Getting Involved with Working Groups 🙋🏽‍♂️

Moonpig have a concept called a “working group”, each having their own focus to improve a particular area of the business. One that caught my eye from day one was the Associate Working Group, whose aim is to improve the Associate Engineer in the company. Given that I was a brand new associate, I thought it would make sense to try and get involved however I could.

I started by sharing learning resources that I found helpful for different technologies I was currently learning, followed by attending collaborative meetings which gave me a chance to voice my thoughts and opinions to others in the group. 

When you join a new company, it can sometimes feel like you aren’t providing tons of value, but fortunately this working group gave me an instant feeling of satisfaction as I contributed to the different activities going on in the group

## Dealing with Anxiety and Impostor Syndrome 🧠

Joining a new company, whilst still fairly early on in my career, certainly hasn’t been easy. I’d constantly be questioning whether I deserved to be in my new role, and seeing how much there was to learn at the beginning made me feel like I wasn’t good enough to learn it all. I’d tell myself that I somehow fluked my way through the interviews, somehow pulling a wool over my interviewer’s eyes. 

As outlined in this post, there was a lot for me to get to grips with, which triggered the anxiety a little as well. There were many unknowns, and I often felt like I had no control over all of the things I needed to learn. I wasn’t sure if I’d “do well” as a result, contributing to the feelings of anxiety.

Despite all of my worries and doubts, I was really happy to receive some positive feedback from my manager and those who I had worked with so far, as I came to the end of my three month probation. I definitely feel more settled and acquainted with the new tech I’ve been learning, and the new ways of working. 

## What’s Next? 👀

For the remainder of the year, I’ll be rotating across different teams, which will give me a flavour of what different teams do in the business, and also help me find which side of the tech stack I’m truly passionate about (I love both front and back-end at the moment!). I started on the Loyalty team, and have recently rotated onto the Attach team. I’ll be on the Attach team for three months, after which I hope to write up another blog post on what my experience has been like. 

I hope this post was interesting and gave you an insight into what it is like to join Moonpig as a new engineer!