To me it seems that classroom training gives us building blocks of technique, but rarely covers actually building anything large or complex, and even when classroom training covers "large projects" you are still just graded on getting the correct end result.
Where should people turn to learn the larger aspects of software design? Specifically where can people go to learn actual "best practices" when starting to work on mid size to large projects/systems? (With less theory and more application)
(My focus would be on .NET and C#, but the question is valid for any technology)