In this video, I will interview Churchibiti on system design and assess his performance. Can he answer my challenging questions or will he crack under pressure? With a Harriet, if he was a real person. And how can you use chatibility to your advantage when you prepare for system designing? Let’s watch and find out.
AI has been taking over the world and is here to stay. We see it becoming more and more relevant in every industry, from creating content to creating videos and even writing code. However, we’re still interviewing for software engineering and management positions, and system design interviews are an integral part of this process.
As a software engineering manager myself, I’ve done tons of these interviews and I’ve seen people struggle and fail them, even though there’s tons of good material on what to do to succeed. So, do you think Churchibiti will pass my interview or not? Let me know in the comments down below.
To begin with, I needed to create a prompt just to set the scene and so that Churchibiti knows that we’re in a system design interview and it knows how to behave itself appropriately. I’m gonna put the prompt here, but you can also find it in the description down below if you want to use it yourself.
In a typical fashion to start off the interview, I’m going to ask a very generic question such as ‘Design Instagram’. Let’s see what he comes back with.
Okay, so I see it’s saying there’s quite a broad question. I want to narrow it down a little bit, the features that we want to design, which is exactly what you should do to begin with in a system design interview. So, in this instance, I’m going to suggest that we focus on posting photos and videos, following and unfollowing users, liking or disliking posts, searching, and generating a newsfeed.
At this point, Churchibiti knows the main features that he needs to focus on, but he probably needs to ask some more clarifying questions for each of these features, which I recommend as well in order to be able to make the right decisions down the line. So, let’s see how he’s gonna do with that.
The first question I see here is about file sizes, which is an absolutely fair question to ask. In this case, I decided as an interviewer not to answer the question myself, but rather than throw it back to the candidate and see what he comes back with. Churchibiti, of course, made a good assumption here and he suggested photos are going to be up to five megabytes and videos are going to be up to 100 megabytes. It sounds about right. I think Instagram doesn’t follow exactly the same limits, but for the purpose of our interview, this is absolutely perfect.
Then I see some smart questions about private profiles, how to show likes if we need to sort search results, and if we need to show popular posts from accounts that people don’t follow necessarily. These are very good questions. I like how this is going and it shows that the candidate, in this case, Churchibiti, is able to think critically about what we need to develop in order to deliver the features that were asked.
After all these questions, now Churchibiti has a very good understanding of the main features that he needs to create. I’d like to hear a bit more about the non-functional side of things and how things like scalability, availability, latency, and consistency come into play, as well as database solutions relating to a user base and the traffic that we foresee having in our system.
Okay, so I see a lot of that, but also Churchibiti hasn’t mentioned the database yet. So, I’d like to hear a bit more about that. The good thing that he does, though, is having this conversational tone and asking how he can proceed or not. This is something that I always recommend for system design interviews. Have these conversations with your interviewer and see if you’re going down the right path or not.
In this case, I’m going to ask a bit more about the non-functional requirements and see what he comes back with.
From a quick glance, the estimations look about right and they have good justifications. So, let’s move on to the high-level design.
So far, it’s been going really well. It feels like we’re working together with Churchibiti in order to solve a common problem, which is exactly what this interview is for. You want to be showing how you collaborate with someone else and not necessarily present the perfect solution. So, at this point, I’d like to hear a bit more about the high-level design that he is going to be able to come up with and putting everything together so that it fits nicely.
First impressions, not half bad. I asked Churchibiti to use Mermaid, as you see, it’s a pretty cool plugin that you can use with GPT-3. You can actually tweak it using the link that it provided and tweak the design yourself. You can add a cluster of load balancers here, for example, and share it back to Churchibiti if it is playing text. Also, there are tons of samples that you can get going with if you want to learn how to use it.
On the answer, Churchibiti gave, it’s really great to see insights about relational versus non-relational databases, and I see it leaning towards a hybrid approach where we’re going to have a relational database for some systems but a non-relational database in others, which honestly is good enough.
Having a closer look at the design and his bits and bobs, I can see that the newsfeed generation is completely missing, forgetting a whole area of the system. It is quite a serious oversight. Let’s see what Churchibiti comes back with about this area, which admittedly is a little bit more complex than the others.
Okay, that’s impressive. This is a really good answer because I see different approaches suggested - push model, pull model, and hybrid approach - all of them with their pros and cons. Let’s see now which one is the recommended way forward and how the final design is going to look with all of that taken into consideration.
With all of that, I think this is not bad at all. Having discussed all these different areas, from general ones to more specific ones that relate to this system, is a good place, I think, to leave the interview. I like to always ask all the candidates one more question in the end, which is to do with the shortcomings of the solution and what areas they would improve if they had more time. It’s not something we’re gonna tackle in this interview, but I just like to get a sense of what people see and what they want to improve.
A few interesting ideas here, like the single point of failure, cache invalidation, and data durability. Really nice to see these suggestions coming up.
I now have to make a big decision. Did Churchibiti pass my interview or not? I would say yes. As we saw, he was able to provide solid suggestions to my questions and for the overall system itself. However, he struggled a little bit with the features that he implemented. We saw before, he forgot, for example, to implement the feed generation. And also, if we look a bit closer, we’re gonna see that some of the answers that he gave were quite long-winded, which is not necessarily the best approach in a system designing.
Overall, it was a pretty smooth interview. I think we were able to collaborate together quite strongly, and that’s what made Churchibiti be able to get a yes from me on the system designing. The main takeaway for me from this experience is that I actually plan to use this prompt with GPT-3 when I prepare for system design interviews. Not so much to steal the design solutions that they suggest, but more to help me think what are the correct questions to ask in this interview and how to navigate it.
If you’re preparing for interviews this period and you want to smash your behavior interview, I highly recommend you watch this video. You’d be surprised to hear that the techniques that people recommend for it don’t work today. Thank you for staying with me till the end, and until the next one, stay curious, keep growing, and I’ll see you in the next video.