"Minus 100 points", an article on deciding how to add features C#, remains one of the best introduction to PL design principles I've seen: https://docs.microsoft.com/en-us/archive/blogs/ericgu/minus-100-points (Design is hard, combinatorial complexity grows easily, saying "no" needs to be a default.)