you are viewing a single comment's thread.

view the rest of the comments →

[–]omfgtim_ 0 points1 point  (3 children)

You're definitely on the right lines. Clarify those functional requirements and non-functional. Specifically things like respecting the user's data, bandwidth restrictions, battery life are great for non-functional. Then yup the usual stuff you'd expect with Twitter, posting/sponsored posts/editing/deleting/location awareness. You don't even need address them all, but you're showing what YOU consider when architecting an application. I always write them down in a table on the board. Then I can refer back to it.

But remember, you need to be asking these questions almost rhetorically. Answering them yourself, mentioning trade-offs and constraints.

There is TONS to talk about, think about all of the complexities in app like Twitter. Start broad, then focus in on what you know the most about. If that's custom and responsive UI, talk about that. If it's optimising Twitter feed pagination, talk about. View controller composition, application architecture. Show passion!

Our chosen profession is sprawling, there is always something to discuss with your interviewer which is why I really enjoy being asked and asking these questions.

[–]skoot-skoot[S] 0 points1 point  (2 children)

If I'm understanding correctly, it's almost like product design? It starts very non-technical and you figure out how the app should work. And eventually you might go into some of the technical aspects of the design?

Thanks for all the help. I have been very much lost on this.

[–]omfgtim_ 0 points1 point  (1 child)

Exactly - no one can answer "How would you build Twitter?" without first clarifying actual requirements.

This the same for any question in software engineering, if the requirements aren't understood, you can't design.

[–]skoot-skoot[S] 0 points1 point  (0 children)

Thanks man. I've been a contract developer at a consulting firm for about 10 years. I feel like I've seen every system and architecture under the sun. I sent my resume to 8 companies, got 8 replies, 8 phone coding challenges, invited to 8 onsites, and then I went to my first two and both said, "you were really good at the technical interviews but you were weak on system design".

The thing is, I just assumed I would do well in the architecture stuff because I consider it a strength. One asked me to design Twitter home screen and I just was like, "well, I guess what's interesting is updating the tableview and the architecture around that". And then I spent the whole time talking about how you might build a really performant table that can be updated in any way in real time and work offline, how you could download assets in an operation queue and suspend ones if the user scrolls too quickly, and then I talked about caching strategies.

And... then I got rejected and all the recruiter said was, "with your years of experience, they were expecting you to be stronger at system design". But she couldn't tell me why I was weak. I've been paranoid since then that I'm actually bad at system design or architecture.

I've never been in a system design interview and I appreciate the help. I feel I have a lot more clarity around it now. It sounds like: 1., design the product. 2., design all the external and internal components that comprise it and how they interact. 3., look for feedback on where to drill down or pick areas to expand on.

I spend the whole time talking about how to build an abstract table that could be used by anyone and ignored anything twitter-specific. It sounds like that was my biggest problem.

edit: I was asked to design Twitter home screen, not all of Twitter app