When you’re trying to tidy up a room, there’s a right way and a wrong way.

You can pick up each thing off the floor and ask “Now where shall I put this?”

That’s the wrong way. You will have random objects stashed in hidey-holes all over your house, and when you need something you’ll have to dig through all sorts of random cruft to get to it.

The right way is to look at the room and say “What is this room used for? What things do I do here?”

If one of the things you do in the room is “pay my bills”, then you need a desk with a drawer where you keep stamps and envelopes and your checkbook, a jar of pens on top of the desk, a tray for incoming bills, and a wastepaper basket. For each thing that you do, you set up a “workstation” like this. Then, you get rid of everything that’s not part of one of your workstations.

The analogy to UI design should be obvious.

Look at some software and it’s obvious that the designer had a list of desired features, and they went through trying to find a place to put each one. This is backwards! (In especially bad cases, you can deduce the database schema of the persistence layer just by looking at the visual layout of the interface, because the latter is a reflection of the former.)

You must think in terms of supporting each task that the user will do with your software, providing an efficient workflow for each one, instead of looking at the features you’ve implemented and saying “Where shall I put this?”