@aral Yes! Yes! Yes! This is key! So many projects ignore design and pick horrible defaults. In many cases the developer designs the interface as an external representation of their internal code (I'm looking at you iptables and tc). If you understand the code then it makes sense, otherwise *shrug*.
Good design requires empathy. You must think of how someone else would approach your software without understanding the code. If your defaults make a user shoot themselves in the foot, it's a bug.