A basic principle of system design
I've mentioned this in passing before, but I should be explicit at least once. Here is a very basic principle of designing systems that real people will use:
The people that benefit should be doing the work.
Okay, there is one exception: the people getting the benefit can pay for the work instead of doing it directly.
You design systems that violate this principle at your peril, because generally it doesn't work in the long run. You'd think that this principle would be obvious, except that it is routinely violated.
I think that there tend to be three forms that these violations take: underestimating how much work is really involved, overestimating the benefit that people get from it, and deliberately deciding that it doesn't matter. I can't say anything about the last one, but the first two are often caused by not taking a step back and trying to look at your system with the eyes of an outsider, not an enthusiastic developer. (Unfortunately, this is very easy to do.)
Every time you design a system (whether it is software or procedures), you should step back and ask yourself who benefits and who does how much work, and how rewarding it really is. Be painfully honest, because it is much better than spending all the effort only to have your system quietly fail.