In 30 min I could only create a draft. It's crazy what they requrie in an interview. It usually takes hours to come up with a resonable design. Anyways this design has one very bad blocker that prevents it from being extendable. It's the `CarManufactures` switch. You have a fixed number of those types and you cannot add new ones without modifying the switch and the enum. I would drop the _Family/Sport-Car_ stuff and replace it with _Coupe_, _Combi_, _SUV_ etc as they are the real car types. Those types should be classes derived from the `Car` so that you can add new ones easily. Whether a car is a family or a sport car is usually defined by the features it has - sport seats, engine with more power etc. and it's rather subjective. abstract class Car { protected Car(string make) { ... } public string Make { get; } public Feature Feature { get; set; } } abstract class Combi : Car {} abstract class Hatchback : Car {} class FocusCombi : Combi { public Focus() : base("Ford") {} } class FocusHatchback : Hatchback { public Focus() : base("Ford") {} } With this structure you can create new car types anytime. The feautures could be created with the composition pattern. Then I would reduce the factory to just: public static class CarFactory { public static Car CreateCar<TCar>(Feature feature) where TCar : Car, new() { return new TCar() { Feature = feature }; } } and use it like this: CarFactory.CreateCar<FocusCombi>(FeatureSet.Family); You could configure the feature set by composition like: var familiyFeature = Feature.Empty .Add<NinjectInjection>() .Add<PowerWindows>();