by Bovee and Thill is licensed under CC BY-NC-SA 2.0

Object-Oriented Design Interview vs System Design Interview: What’s the difference?

Jianghong Ying

--

In today’s software engineer interviews, Object-Oriented Design(OOD) and System Design(SD) are two different but confusing concepts. While it seems that they’re all asking you to design something, the interviewers are expecting you to present different skill-sets. Let’s check it out.

OOD VS SD: Design A Car Storage System(parking lot)

Let’s start with an example. The interviewee was given a task, to design a car storage system(you may argue that mocking real car parking scenario, is, in essence, a storage system within Computer). What would happen then? Maybe he or she would come up with a simple solution: using a hashmap to record the mapping from parking space to the parked car. So the put operation represents parking, the remove operation represents getting a car, etc. But that’s the end of the similarity. If it’s an OOD interview, then the interviewer would ask about how to define car-parking-lot relationships using classes, functions, (possibly) callbacks, etc. But if it’s an SD interview, then the interviewer would be asked about which data structure would be used to store, what’s the API exposed to consumers, etc.

OOD is a reversed Turing test

I’d like to consider today’s Object-Oriented Design problems are like a reversed Turing test. Turing test assumes that if an AI is smart enough to trick humans into considering it’s one of their kind, then the AI has the capability to think like a human. The reversed Turing test, which is a concept invented by me, is actually doing things the other way around:

if a human is smart enough to trick computers into considering he or she is using the same machine language, then the human has the capability to think like a machine.

Now here’s the tricky part. Machine languages are still invented by the human, but unlike human languages, which most formed by convention, they have many pre-defined rules to help users. Think about reserved keywords like class in Java, self in Python and this in Javascript. So it’s more or less like composing a masterpiece by following paradigms set up by Mozart and Wagner.

Also, the OOD interviews probe into the candidate's communication ability. Can he or she stay calm and grasp the essence of relationships without verbose information? Can he or she reason the decisions with fluency?

So a typical OOD interview is full of communication, both talking and coding. The code required may be much longer than traditional Algorithm interviews.

System Design is a test of experience

System Design is quite different. There’s not much coding, except for define API endpoints, Database schemas, etc. But here we’re talking about the real deal: think about the ticket selling system. Quickly the problems will be deep-dived into Query Per Second estimations, microservice designs, etc.

System Design is actually designing a feature like an architect, where the candidates are required to make mission-critical technical decisions.

So how to prepare for both of them? Object-Oriented Design, I believe, is all about using paradigms to write elegant code, which is more or less programmer’s everyday work. The best preparation is to pay attention to good coding practices. System Design, on the other hand, requires candidates to pay attention to the latest development trend. Not as if the candidate has to know the nuances, but he or she must get down to the nitty-gritty ASAP.

About the author: Jianghong Ying is a junior developer, happily coding and blogging while looking for a job. His LinkedIn: https://www.linkedin.com/in/jianghong-ying-8756b7119/ This article is inspired by one of his friends, @microemulsion. Kudos to her!

--

--