Hey all! It’s time for another weekly Q&A with an awesome Monzo team member… This week we’ve got James Routley on board, who is a Backend Engineer here!
James is currently working on getting Golden Tickets back up and running on the current accounts, so that’s great timing! Fun fact about James - he runs a dinner club in his spare time , and his favourite thing about working for Monzo is building a product that’s used and liked by the public
Get your questions in, and James will be here on Friday to answer them!
Just in case you missed any of the previous Q&A’s:
Is this indicative of how quickly you work? Because that’s a damned good turnaround. This was posted after Tristan announced their return . Dude, you work outside of the standard timeline. No wonder Monzo hired you!
In terms of version control, do you use any kind of strategy like Git Flow or do you just use the standard master branch & merging feature branches in there as necessary?
Cool question! I think they are similar - they’re both about creating things. I find cooking a fun contrast to coding because it’s physical and there are you can’t always fix things the things you get wrong!
I’m really into functional languages but I don’t have a whole bunch of experience with them. I’ve written a fair bit of Lisp (Scheme + Racket) for fun, and I’ve worked through the first bit of a Haskell book but don’t know what a monad is. I’ve also done some work with Elm, which I wrote about here.
So I have a degree but it’s not in Computer Science so I’ve been teaching it to myself over the last two years. A couple of things you could do (this would be my advice to someone with a degree as well):
Try to learn how things work at a deep level - having a deep understanding of how fundamental things work will be useful throughout your career.
Try and find someone who can answer questions you may have - it’s really helpful to be able to check things
If you have the money and inclination, I really really really recommend the Recurse Center. It’s a 3 month programming retreat in New York. I went last summer and it made me a significantly better programmer. The course itself is free, but living in New York is $$$$.
I also came across this post recently about programming career progression and I think it’s great.
Hope this helps! I’m guessing there are a fair number of programmers on our forum, I’d love to hear what they think as well!
We have a 10 minute standup first thing, where we share what we did on the previous day. Then it’s mostly coding - I tend to have one meeting per day, which could be a weekly planning meeting, a ‘kick off’ where a couple of engineers will discuss how to implement a feature. I’ve also been involved with hiring recently, so I’ll have one or two interviews each week.
My team is relatively large, and some of us work remotely, so we use Jira for issue tracking, but different teams will use different things, like Google docs or a physical whiteboard depending on what works for them.
I guess the ‘app’ I depend on most is vim-go, which is an amazing plug-in for the text editor I use for the language I most often write.
The backend uses the standard master + feature branches. We continuously release code, so we don’t need anything as heavyweight as Git Flow. The mobile teams have a fixed release schedule, so I think they use Git Flow.
We have a really good community of users who make it a pleasure to build new things for, we have a really strong design team, and I think the way we handle customer support is amazing. Hopefully the experience of banking with Monzo is fun and simple!
I think improving budgeting could have the biggest impact. Making budgeting easy and seamless could help our users save money . I’m looking forward to the upcoming work we’ll be doing on spending, targets and pots!
You said in another answer that you continuously release code to the backend. How does the team make sure nothing is being broken in the course of developing features?
At Monzo we have a microservices architecture. This means that most of the time, you’ll be working on code that no one else is working on at the same time. This simplifies deployments - you can be fairly sure that your deployment won’t conflict with something that someone else is doing.
We also have a staging environment, where we deploy to first. This lets us test our code out before shipping it to production.
Finally, we use Docker and Kubernetes for our deployments. For each piece of code we wish to deploy, we build a new Docker container and deploy that. If something happens to go wrong, we roll back the changes by deploying the previous container, which only takes a few seconds to do.
Actually another question if you wouldn’t mind. At some point in the past Monzo revealed they were using Apache Kafka.
I was wondering whether you use Kafka for synchronous operations (as in operations that require an immediate reply, like MasterCard asking for an authorization) - how do you do it? I’m contemplating using Kafka for my own project (a mobile network) and while I’m already using it for asynchronous operations (SMS delivery, where I can acknowledge immediately to the sending carrier, but then deliver to one of my SIMs on a best-effort basis), but I’m looking to try and use it for synchronous operations like call delivery which requires a reply immediately, within seconds, to the original requestor (as in the SIP endpoint that receives the call from the carrier). How would I build this?