Design Challenge
Good programmers like to solve interesting problems. Here is an interesting problem, and we'd love to see how you would tackle it.
Along with your response please include your resume and code sample as per the instructions on this page. Please note this design challenge is intended as an exercise for potential Goodreads employees - it is not something we necessarily need solved - though if you have an amazing solution we'd love to see it!
The Problem
You are an engineer at a purely hypothetical startup - let's call it Goodreads. Your hypothetical boss - let's call him 'Otis' - comes over and says: "I'd like you to build a new feature to show a given member other members with similar books to them." You agree, and now have to design said system.The Requirements
- Ability to take as input any number of books from the users shelves
- Show up to 100 members with similar books, and show what % of the input set they have in common with the member.
- Extra credit: show which books they have in common as well as what %.
- Scalable to hundreds of millions of users.
- Scalable for users with up to 10,000 books.
- All results must be returned in under a second.
- For simplicity's sake assume the relevant data is stored in 3 database tables: users, books, and reviews (a user_id to book_id mapping).
The Deliverables
We're not asking you to build this, but rather to explain how you would design it. What database tables would be involved? Application servers? Caching? There is no right answer per se - we just want to see how you think. Response should be plain text and not include any actual code. Please keep your response to a couple paragraphs and don't spend a lot of time.Along with your response please include your resume and code sample as per the instructions on this page. Please note this design challenge is intended as an exercise for potential Goodreads employees - it is not something we necessarily need solved - though if you have an amazing solution we'd love to see it!