Principles, Patterns and Practices for C# Development