Most developers who have been in industry for a while will have heard about the SOLID principles, some may even have been asked interview questions about them, but far fewer fully understand them. The SOLID principles, understood and judiciously applied, result in code that is easier to understand, maintain, and test. With that end in mind we will cover each of the SOLID principles striving to understand them and their relationship to design patterns. In this session we’ll get our hands dirty designing a command line application that allows new commands with their associated switches and options to be easily added, parsed, and validated.