C# Development Interview Project
1 Introduction
Ah, welcome to the world of business. You’ve just struck it out on your own and clients are filing in
everywhere! This is great news! However, you’ve started to notice that all your clients have a single thing in
common; They all need an inventory management system.
In the past, you have built these systems individually tailored to each of your clients. Unfortunately, you
don’t have the time to continuously be re-building and refactoring code for all the new business you have
coming in. You now must make a decision…
1. Continue building customized solutions for each client, which may lead to turning customers down.
2. Rethink the architecture of your System and build a re-usable inventory system that meets the needs
of most of your new clients and old.
Being the savvy developer-businessman you are, it only seems reasonable to build a more robust underlying
architecture from the start. So you decide #2 is the way to go. Now it’s only a matter of getting it built.
2 Goals
After a thorough analysis of your customers’ needs, you have determined that the following items are what
they need most:
1. The ability to add products to the System with arbitrary metadata. In some cases, customers need
SKU(s), in others, they need Color, Brand, and other details.
2. The ability to search for products utilizing the metadata
3. The ability to categorize and create hierarchies of products for simple sorting on various UI
frontends.
4. The ability to add and remove products from inventory, with the ability to “undo” transactions easily.
With these goals in mind, it is time to get the requirements started!
3 Requirements
After some thought, you determine the following, simple requirements for the System.
1. Products can be added to the System but never deleted
2. Products must allow arbitrary amounts of metadata and categories
3. Products should be searchable by the metadata and 1 or more categories
4. Adding and Removing inventory should happen on an individual product level or multiple products at
once.
5. Inventory Counts for a specific product, or subset of metadata on a product, must be retrievable
6. Individual transactions should be able to be removed