My first 6 months at Monzo as a Backend Engineer

Read the article

Hi! 👋 My name's Bee 🐝 and I work in the Infrastructure squad as a Backend Engineer.

I joined Monzo about 6 months ago, right out of university. This is my first job and taking on the responsibility of maintaining the infrastructure which runs the entire bank is hefty.

In this little blog post I'll show you what my first 6 months at Monzo looked like and the kind of things I've learned along the way 😄

The Infrastructure Platform squad

I'm currently on the Infrastructure Platform squad, which is a team of 11 people (we were ~6 when I started). I've always explained the remit of our squad as:

The Infrastructure Platform squad maintains and runs the servers the bank operates on, and makes it as transparent as possible for our customers (the product developers). This means when product developers create new features and ship them, they don't have to worry about the infrastructure it sits on.

My team maintains a lot of things like AWS, Kubernetes, data centres and more. My squad is mostly senior engineers, and I am the most junior among them.

I was placed into this team because I had some experience with AWS. I built a bunch of open source projects and one of them was a hash-lookup table on AWS. It used AWS DynamoDB to store the hashes in a key:value pairing (hash:password) and used Lambda for the API. Because of my work around security and AWS, I was placed into the Infrastructure Squad 🙂

My journey to Monzo

I was graduating into the coronavirus job market, which meant competition for a Computer Science graduate job was tough. I applied to ~28 companies and had 11 interviews in total. I had 2 offers and was close to a 3rd offer from another company (which I was very likely to accept as they are a very large name in the tech world) when I decided to apply to Monzo on a whim.

I've been a Monzo customer for a good few years and because of my dedication to the Monzo community forums I even went to London Pride with Monzo back in 2018!

Monzonauts celebrating Pride in London, dressed as Hot Coral bank cards, and waving flags.

Fun fact: Those giant cards people are wearing are scattered around the office!

Monzo weren't hiring graduates at that time so I was surprised to get an interview.

For preparation of interviews, I:

In my personal experience I was often told that every company would use Leetcode style questions. However, not a single company did during interviews. In fact, Monzo strives to stay far away from any of these brain-teaser like coding questions.

What most companies cared about were my projects, the teams I had created and managed, and the technologies I used for them. If I had to give one piece of advice to any computer scientist looking to graduate, it would be to focus on your projects. Leetcode is cool, but none of the companies I applied to asked for it.

The Monzo interview process

I applied for the role at Monzo on 11th January. Two weeks later I had my first interview with someone from the engineering hiring team. What I liked most was that Monzo had a hiring person who understood engineering. Many of the hiring people I talked to at other companies just cared about keywords.

He told me about the job and asked me a few questions to see if we matched.

Pro tip: Make sure the roles you apply for match your priorities. It's not "I hope the company will let me work for them", it's "Is this company and I a good match"? I found asking companies why I would want to work there and checking for compatibility got me much further and more offers than "Please let me work here" 😆

After this, I was given a coding exercise to take home. Monzo did not put a time limit on my test, so I could complete it whenever I wanted. It took me around ~2 weeks as I had other take home tasks from other companies I was doing at the time. Monzo now has a pair coding test you can choose to do if you prefer that instead.

The test itself was mostly about the design decisions. The testing I did, the concurrency primitives I used, how I used object-oriented design and more.

Prior to interviews, I read up on Monzo's public engineering principles, and I even watched talks from people at Monzo to learn how to design code in the same style that Monzonauts would.

I spent a few hours on the take home project and I created some technical debt. Luckily I used this Monzo engineering principle to explain why I had made that debt and how it allowed me to ship faster:

Technical debt is a useful tool. The conscious, careful accumulation of technical debt can be a powerful tool that lets us ship the thing we’re building faster. Don’t be afraid of it, but be deliberate about it. Just like with financial debt, we know that we need to repay it over time to avoid the interest on the debt becoming unbearable.

In early February, I sat down with an engineer from Monzo (virtually) and went over my code with her to explain what I did and why I did it. She asked me questions about aspects of the code. How did I come up with the design and structure? Are my tests adequate? How would I test it if I had a team of people and more resources? I'd answer a question, and she'd go deeper. Deeper and deeper until I no longer had the knowledge to answer. I quite liked it as I really had to think long and hard from first principles about some of the questions.

I feel like university teaches us to write perfect code that is super fast, but in the real world we value:

  • readability

  • great documentation

  • a lot of testing and test coverage

A week later were my final interviews. I had a systems design interview and then a behavioural interview. I deliberately scheduled this out as far as I could so I could practice.

The behavioural interview was good, I had some good laughs with Joost (who I now work with!) about some of my predicaments and we just talked about the team I work with on open source stuff. The systems design session was the hardest interview I have ever done in my life, but, it's actually the same kind of stuff I do all the time in my job as an infrastructure engineer.

Most system failures have reports written up that describe what went wrong, how and why, and how we fixed it. I do suggest reading some public incident write ups if you get the time. Facebook’s most recent BGP issue is a good one.

A lot of companies will make you do stuff that isn't relevant to the job, but at Monzo everything I did in interviews is used in my job. Even the take home project! 😉

In total, my first contact was the 27th of January and my final interview was the 22nd of February. I received an offer a day or two after that. That's going from 0 to a full time job in less than a month!

🚌 Starting out

Monzo was my first ever job, and this led to many questions:

  • Would my coworkers appreciate being sent memes?

  • How am I going to wake up in time for 9am?

  • How do I do adult things? Pay for electricity, gas?

When I first started at Monzo, I had to complete onboarding which takes about 2 weeks. Typical onboarding for an engineer looks like this:

🥳 Week 1

During the first week I:

  • met my team

  • met other Monzonauts

  • learned about Monzo and what we do

  • learned a bunch of mandatory banking regulations

I was placed in a group with other Monzonauts who started on the same day. They didn't all work in engineering or even in the same team as me. Some of them worked in data science, and others were experts in financial controls and regulations.

I also got to get to know my actual team. My squad played a game of GeoGuesser on Friday as a little welcome social, and I played some games / talked to people all over the company for other icebreaker stuff.

We also got our Macbooks in the first week. My WiFi is rather slow, so TechOps (the amazing team that does so much they're hard to describe) sent me an Ethernet cable. I felt like I would work better with a monitor / keyboard / mouse, so TechOps also sent me that. Also, my IDE of choice required a license so TechOps also got me that.... basically, TechOps is absolutely amazing. If it improves your technical life at Monzo, they are on it 🔥

The TechOps team have a script which runs at startup to get your Macbook up-to-date. WiFi Passwords, the software I use, VPNs and more were all automatically installed thanks to their amazing one-click script! At Monzo we like investing in our tooling as it improves all of our aspects, and oh boy does TechOps invest in the tooling.

✍️ Week 2

In my second week I worked on our technical introduction to engineering at Monzo. It's about ~5 lessons and each one can easily take a day.

A screenshot of chapters from the Backend 101 onboarding documentation, including 'Hello Cassandra' and other topics.

Each chapter is designed to teach you about one important Monzo thing. For example, we use Cassandra as our database at Monzo and every engineer will eventually use Cassandra.

Monzo is a microservices company, so every engineer creates their first microservice here too.

If you get lost along the way you can post into an onboarding channel on Slack and receive help from other engineers. This is a great way to:

  • learn the ins-and-outs of Monzo's most used tech

  • make sure all of your tools are up-to-date and working

Also, I frequently refer to these docs as I do not work in that side of the business much and being able to easily follow the tutorial again is perfect for me 🙏

This is also when I made my first pull request to Monzo!

A screenshot showing 208 closed pull requests.

I've made 216 pull requests at Monzo 😄

I created a pull request to make it truly random, and had to find the team responsible for that code-base. Luckily it was TechOps, so I went and asked them to review it. It was reviewed rather quickly. My favourite part of this was realising if I found something I didn't like outside of my team, I can just go and change it. I wasn't just confined to my team's repositories and I can have an impact on the entire company.

Around the 3 week mark, my swag box finally came!

Monzo swag box for new joiners including a mug, t-shirt, and lots of stickers!

The Monzo swag box for new starters: lots of stickers, a tote bag, and more!

I learnt more about the Monzo tech stack during that week too. We primarily use:

  • AWS for everything, some companies use multi-cloud setups but we've simplified by using AWS

  • Kubernetes - Monzo is a micro-services heavy company with around ~2000 microservices and we use Kubernetes a lot

  • Go as our main programming language of choice, but we do have hints of Python (as it hooks better into the rest of the datascience ecosystem) and some Node.js (for frontend components) around the place

😬 First assignment

I feel like the "first thing" you do at your job really sets you up. It lets you see how the team operates, and how to contribute things. My first task involved security, which was something I have an interest in.

My Tech Lead booked some time to pair with me on this project (as I didn't know the language I was over my head 😅) but I quickly picked it up and contributed my first pull request.

Pull requests (PRs) are slightly weird as you have to seek approval from the team responsible for that code. Often times it'll automatically tag a team for review, I'll normally drop into their -ask channel on Slack to ask for a review too. At Monzo, every team has a team-ask channel where you can ask that team questions. We have workflows setup on these channels to help streamline things and one of those workflows is "Pull request review".

After my first pull request, the rest of the problem was just more of the same but slightly different. Once I got the first pull request down I was on a roll and proceeded to create multiple PRs.

🍍 Tips and tricks for any new starters

After my six months at Monzo, I wanted to share some tips for anyone starting their first job in tech:

  1. Ask questions, lots of questions!

  2. Don't be afraid to book 1:1s with people to learn more about what they're doing.

  3. Socialise with your team and other new-starters! It really helped me to understand that being a sponge for knowledge is what's best for me.

  4. Working on the most impactful thing doesn't always mean shipping products. It can also mean creating more documentation, teaching other Monzonauts, and simplifying processes. We look at both the long-term and short-term view at Monzo.

👋 Join us

At Monzo we’re aiming to build the best current account in the world. We're always keen to hear from capable, creative engineers who want to help us accomplish that goal.