System requirements
Functional:
-create account
-upload plaintext
- link to said text
- ability to set read/write access
- expiration
- timestamp
- created
- updated
-view text
Non-Functional:
-highly available
-eventual consistency
-significantly more reads than writes
Capacity estimation
Estimate the scale of the system you are going to design...
API design
-POST createAccount(email, user, password)
-POST createText(user, text, permissions, expiration) -> returns link to the text
-PUT updateText(user, link, new_text, new_permissions, new_expiration) -> returns link to the text
-GET text(user, link) -> returns text if valid permissions and not expired
Database design
due to the nature of pastebin, sharing large amounts of text, a nosql database would be ideal for sharing the unstructured type of data. Also, having a nosql approach would be better to scale and shard.
-Users
- username
- password (hashed)
- texts
- text_1 link
- ...
- text_n link
-Texts
- metadata
- owner
-expiration
- permissions
- timestamp
- created
- modified
- data
- text
High-level design
You should identify enough components that are needed to solve the actual problem from end to end. Also remember to draw a block diagram using the diagramming tool to augment your design...
Request flows
Explain how the request flows from end to end in your high level design. Also you could draw a sequence diagram using the diagramming tool to enhance your explanation...
Detailed component design
Dig deeper into 2-3 components and explain in detail how they work. For example, how well does each component scale? Any relevant algorithm or data structure you like to use for a component? Also you could draw a diagram using the diagramming tool to enhance your design...
Trade offs/Tech choices
Explain any trade offs you have made and why you made certain tech choices...
Failure scenarios/bottlenecks
Try to discuss as many failure scenarios/bottlenecks as possible.
Future improvements
What are some future improvements you would make? How would you mitigate the failure scenario(s) you described above?