A fast way to get complicated is to violate the purpose of what you’re doing.
For example, what’s the purpose of a web page? To give and receive information. Mostly to give information, and then some websites also take information, such as when you’re buying something.
How many complicated web pages have you seen that think they’re doing something else than giving or receiving information? Maybe they think they’re being entertaining, or something. I don’t know what their designers were thinking, but they probably weren’t thinking about giving or receiving information. Instead they’re hiding their information in a complicated mass of pictures and shapes.
Usually, the basic purpose of any given thing you’re working on is pretty simple. But if you add to that purpose, things can get complex pretty fast! For example, the basic purpose of Bugzilla is to store and organize bug reports. If we suddenly made Bugzilla also able to read your email, it would get ridiculously complicated. (Not that Bugzilla is the simplest program in the world, but we’re working on it.) Can you imagine what the UI would look like? Where would we put all the buttons? That would be a violation of Bugzilla’s purpose.
It’s also important to think about user’s purpose. Your user is trying to do something. Ideally, the purpose of a program should be very close (in the exact words you’d use to describe it) to the user’s purpose. For example, I’m trying to blog, and WordPress is blogging software. That’s a pretty good match. WordPress is good about not trying to do everything under the sun–it’s just blogging software, and that’s it, which I like.
Now, if your purpose and the user’s purpose don’t match up, you’re probably making their life difficult. For example, they want to read their email, but your manager’s purpose is to show them ads. Those don’t sound like quite the same purpose to me. 🙂
Want to see a user get angry really fast? Make it difficult for them to accomplish their purpose. Pop up windows in their face when they’re trying to do something, add so many features to your program that they can’t find the right one, use lots of cute little icons that have no meaning–there’s all kinds of ways to do it. But they all boil down to interfering with the user’s purpose or violating the basic purpose of the program itself.
Sometimes, marketers or managers have goals for a program that are not really aligned with the basic purpose of the program: “Be cute”, “Have an edgy design”, “Become popular with the news media”, “Use the latest technologies”–on and on. But marketers are not the people who should be deciding what your program does! As an engineer or technical manager, it’s your job to see that the program stays on track and never violates its basic purpose. Nobody else is going to hold that responsibility. Sometimes you might really have to fight for it, but it’s well-worth-it in the long run.
And it’s not like you’d come to a marketing failure with that philosophy. I mean, look at the iPod. That’s a device that sticks to a simple purpose, and it doesn’t have any marketing difficulty. You don’t have to have a complicated product to have good marketing. You just have to have good marketing.
There’s no need to get fancy and complex and try to do five hundred things at once in a single program. Users are usually happiest with a focused, simple product that never violates its basic purpose.