The machine must be able to take in input through the keypad
The machine must be able to keep track of inventory
The machine must dispense the product that the customer request
The machine must be able to accept different types of payment
The machine must charge the correct amount for each product
The machine must verify payment methods
The machine must be able to display product selection and price
The machine must be able to be restocked through an administrator mode
The machine must be able to hold different types of products at different price points and these must be liable to change.
The machine must be intuitive to use
The UI must be clear and concise
The machine must be efficient in both product delivery and messaging.
The machine shall be able to restocked with ease to minimize downtime.
Assuming our machine has 5 columns of 6 different products each, and each product has an inventory of 10 when fully restocked, our machine would have 300 products when restocked. If restocked once per week, that would mean that we have a maximum amount of 300 successful purchases, or about 42.85 uses per day.
Payment Validation
Deliver Product
Validate Product in stock
Prompt Payment
Restock product
Change product
Sell Product (Reduce Inventory)
Display success message
Display product selection
Get Input
Validate Input
Get product price
Return Change
The database shall keep track of four things for each product:
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...
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...
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...
Explain any trade offs you have made and why you made certain tech choices...
Try to discuss as many failure scenarios/bottlenecks as possible.
What are some future improvements you would make? How would you mitigate the failure scenario(s) you described above?