I spend a lot of my time here at Microsoft thinking about complexity—and asking myself lots of questions. My guess is that you do the same.
When we design code, we ask ourselves questions such as these: Can I make this code more readable? Can I write this loop with fewer lines? Can I factor out behavior into a separate class? Can I architect this system so that it is more cohesive?
When we design user interfaces, we ask similar questions: Are we asking the user to make too many decisions? Did we lay out this UI in the clearest possible way? Can we make error states clearer and easier to avoid?
When we design systems, we ask other questions: How many concepts must the user learn? Do those concepts map to things the user knows and ...