Gathering requirements for a System Design Mobile Interview
A practical example of how to succeed in a System Design Mobile Interview from the most fundamental part
In my career as a Mobile Developer one of the most uncertain parts of the process to prepare an interview was the Mobile System Design. Most of the content in articles/videos is focused on Backend systems and designing a system for complex apps needs to be taken the importance it deserves for writers. In this article, I will focus only on the first part of the interview which is gathering the requirements and I will follow a practical example of a worldwide known app. ALERT! Taking bad decisions in gathering requirements could cause you to fail the interview.
In the next articles, I will show you how those requirements are translated into the design.
What should you expect in the interview?
Usually, this interview will take 45 minutes: 2–5 minutes for presentation, 35-40 minutes to solve the problem, and the rest for any questions you have about the company. You will use a tool for drawing diagrams such as excalidraw or lucidchart.
After the presentation, the interviewer will tell you about an app he wants to build, ie: a trading app, Snapchat, Spotify, Netflix, Twitter, Instagram, Uber driver, caching library… and that’s it! The question statement is probably going to be vague, so don’t worry about the design yet and read the next section to see the mental process you have to follow to succeed.
Scoping the problem
If you have some experience in the industry I am almost sure you have participated in a conversation with a Product member about what must be covered in a feature. This is the same thing you must do, but you will design a product proposed to be used by billions of people and you will only have 35–40 minutes to design the whole system.
Think in terms of Minimum Valuable Product (MVP), so you can decide what are the most important features you want to cover. You are expected to drive the discussion with the interviewer and talk out loud about your mental process to decide the requirements.
So for example, if you are given the problem of “Design a social feed as Instagram”, you can write something like this:
Functional Requirements
- Users can see an infinite list of posts (images) of the people they followed
- Users can like a post
- Users can comment on a post
Non-Functional Requirements
- Security and privacy
- Memory, network, and battery performance
- Offline mode
Let’s hop on this for a minute as you probably have many questions right now.
Functional requirements
If you open your Instagram feed you will notice there are a lot of things not covered in the requirements: user stories, opening an infinite scroll list of comments, video support, a carousel of pictures/videos, sharing the post, saving the post, or opening a post detail.
In the interview, you should take that into consideration and let the interviewer know that this will not be part of this iteration because you consider those features are not part of an MVP. This will be a discussion and you must listen carefully to the interviewer's arguments. For example, if he wants to discuss how you will support videos in your design or if he thinks that feature must be part of the MVP, then add it as a requirement.
It is also a good idea to take notes about the points the interviewer doesn’t want you to cover so you can remember them later and you won’t waste time designing nonrequired components. You can create a section with the title “Out of the scope” for this.
For this case, I think the 3 requirements selected are the right ones for the MVP because the user will be able to scroll indefinitely through a list of posts and can interact with a post by liking and commenting on it.
Non Functional requierements
The first time I thought about non-functional requirements for a mobile app it needed to be more obvious what things should I cover. I had a mindset that functional requirements were more related to backend systems, so concepts such as availability, interoperability, accuracy, or cost came to my mind. But for this kind of interview, you usually assume the backend is already there so you should focus only on the mobile part of the system and the API.
I want to discuss one by one the non-functional requirements for this case:
- Security and privacy: privacy and security have been a top trend in the last years, and companies that don’t worry about this can face judicial problems. Also the interest of the users in how the apps use and protect their data has increased.
- Memory, network, and battery performance: this is something that directly affects the user experience. If the app takes up a lot of space, is running low, or drains the battery, then the user will probably uninstall it.
- Offline mode: today this is a must for almost all apps as using the offline capabilities improves the user experience and decreases the number of calls to the servers.
Some examples of non-functional requirements could be: support for emergent markets, push notifications, real-time updates, analytics tracking, AB testing, and OS versions supported.
If you have doubts about what non-functional requirements are, this is an excellent video.
Moving forward
When you are sure you have covered what is intended for the problem, you can discuss this with the interviewer, take feedback and continue to the next part of the interview.
Final thoughts
This is an exciting topic for me because this kind of interview shows your knowledge about developing amazing apps. I have been building apps for years but when I faced this interview for the first time my mind went blank. After studying a lot I discovered that I had almost all the concepts needed in my first attempt, but I didn’t have a structured knowledge about the theory I was using under the hood.
There is no single solution for this kind of problem and the final requirements can depend on your expertise and the areas the interviewer wants to discuss.
Hope you enjoy this post! let me know if you want to know more about this topic in the comments.
References