I've been delving into more "organized" programming recently and I've been learning that I should be programming to an interface, not an implementation. With that in mind, would it be better to "sketch" out a project in interfaces before writing the implementation for it where possible?
And if this is the case, in the case of using 3rd party libraries (ie Lidgren), should I be wrapping those in interfaces as well and resolve them through IOC containers, or is it OK to expose them to the interfaces?
Unfortunately, you'll find this often boils down to personal preference.
What you've described so far, though, seems good. In fact, if you wanted to (and I recommend it) you could use the following approach:
You're focusing on trying to write more "organized" code. Following TDD will help you with this.
Some extra points: