System requirements


Functional:

List functional requirements for the system (Ask the chat bot for hints if stuck.)...

We should have a correlation as to what car has been allotted what space and when it has been freed, with 2 APIs, one for entry and one for exit.


Non-Functional:

List non-functional requirements for the system...

Handling cars of different sizes i.e. SUVs vs Hatchbacks and alloting spaces according to that.

EV specific spaces could be considered with Electric Charging spots and marked separately.

For accessibility, we should consider pregnant woman, people in wheel chair with specialised parking space close to entry exits.

For security, since we would likely have the system on a local system without interference from the network, we shouldn't be too concerned with security.



Capacity estimation

Estimate the scale of the system you are going to design...

Assuming the parking spaces are limited in number, 150, which is fairly low in size. We can have a small system in place.




API design

Define what APIs are expected from the system...

/entry/{car-number} - Returns the allocated space.

/exit/{car-number}




Database design

Defining the system data model early on will clarify how data will flow among different components of the system. Also you could draw an ER diagram using the diagramming tool to enhance your design...

The database will store {

entry time,

isFree,

car number ,

parking-lot-number{Primary-Key}

}




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. If you are unfamiliar with the tool, you can simply describe your design to the chat bot and ask it to generate a starter diagram for you to modify...


A simple entry / exit API service, which will be present at every entry/ exit point, with a service call to the database to check for an empty spot.

Our components will be

  1. clients which are entry / exit booths, which will send api calls to the service
  2. a service which will handle the api requests
  3. a database which will store the context



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...


We can make a entry call to check if its free. This will return with 4xx error if no spot is available, and then we can make a periodic call in intervals of some minutes to find a free space.




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.

Power outages.

In too much traffic, the retry mechanisms may fail over and over with 4xx.




Future improvements

What are some future improvements you would make? How would you mitigate the failure scenario(s) you described above?


We can further add a cache in front of the database for spots which have been recently freed.