@Malachi start simple and then refactor; my code started with a monolith in the Main method, then I broke it into static methods in the Program class, then I extracted methods into classes, classes into interfaces - check out the revision history on my post, you'll see what I mean :)