Skip to content

Latest commit

 

History

History
98 lines (71 loc) · 3.68 KB

tagging-photos-with-people.md

File metadata and controls

98 lines (71 loc) · 3.68 KB

Design Photo Tagging

Problem Statement

Design a feature that allows users to tag other users in photos they upload. Users can optionally select a rectangular region of the photo and tag it with the person. By default a small square should be picked as the region of interest.

Relog Tgging Photos with People

Requirements

Core Requirements

  • allow people to tag other people in photos
  • region is always rectangular and user can pick how big or small the region would be

High Level Requirements

  • make your high-level components operate with high availability
  • ensure that the data in your system is durable, not matter what happens
  • define how your system would behave while scaling-up and scaling-down
  • make your system cost-effective and provide a justification for the same
  • describe how capacity planning helped you made a good design decision
  • think about how other services will interact with your service

Micro Requirements

  • ensure the data in your system is never going in an inconsistent state
  • ensure your system is free of deadlocks (if applicable)
  • ensure that the throughput of your system is not affected by locking, if it does, state how it would affect

Output

Design Document

Create a design document of this system/feature stating all critical design decisions, tradeoffs, components, services, and communications. Also specify how your system handles at scale, and what will eventually become a chokepoint.

Do not create unnecessary components, just to make design look complicated. A good design is always simple and elegant. A good way to think about it is if you were to create a spearate process/machine/infra for each component and you will have to code it yourself, would you still do it?

Prototype

To understand the nuances and internals of this system, build a prototype that

  • design a database schema to hold people tagged in photos
  • render the tagged people on different image resolutions

Recommended Tech Stack

This is a recommended tech-stack for building this prototype

Which Options
Language Golang, Java, NodeJS, C++
Database Pick your favourite

Keep in mind

These are the common pitfalls that you should keep in mind while you are building this prototype

  • devices have different resolutions

Outcome

You'll learn

  • data representation
  • database schema design

Share and shoutout

If you find this assignment helpful, please

  • share this assignment with your friends and peers
  • star this repository and help it reach a wider audience
  • give me a shoutout on Twitter @arpit_bhayani, or on LinkedIn at @arpitbhayani.

This assignment is part of Arpit's System Design Masterclass - A masterclass that helps you become great at designing scalable, fault-tolerant, and highly available systems.