Requirements
Functional Requirements:
- Create a short URL for a given long URL.
- Return the long URL associated with a given short URL.
Non-Functional Requirements:
- Low and predictable latency
- proper state machine handling
API Design
send the url, get the url
High-Level Design
we need to have a client, a server and it takes the client provided url, shortens with some processing and then sends the shortened url