C#

Design rules of thump (these actually go for any object oriented language - maybe should be moved to design patterns or similar?)

Spells out SOLID See also: https://www.youtube.com/watch?v=-9b8NRqjUFM top 10 c# best practices.

Practical programmer has some simpler design principles:

Clean code

https://www.youtube.com/watch?v=7EmboKQH8lM

Other notable watches

Mixed best practices

Stuff I read that resonated below.

The overall guiding principle seems to be that code should be understandable/verifiable in the near context from naming, typing etc. So exceptions are bad because you lose ability to see whether this code actually ensures cleaning up or if an exception can skip the cleanup step:

doSomething();
cleanup();

same goes for primitive obsession. Whenever you see a string CurrencyCode in code you will wonder whether it's empty, whether it's 3 characters etc. To know if it has been validated you need to F12 all the way back through countless methods. If you see a CurrencyCode tradeCurrency you can F12 the CurrencyCode type and see that it can't be created from empty strings. Same issue with extension methods.

Effective Engineer by Edmond Lau

Leverage = impact / time. Maximize this by:

Analysers wanted