Software Design

Understanding design principles is essential - especially if you plan on breaking them. Getting pinned in a code review is never fun, but if you can clearly explain your reasoning then breaking the rules is fun!