My favorite example is the military. Generals always want something for the future. So we end up with a helicopter that has all the weapons systems available, but it does not fly because it is too heavy. On the other side there is the Kalashnikov. Most successful gun ever. Very good at shooting and killing people even when wet (the gun not the people), muddy and in situations when more advanced western weapons malfunction.

What does that have to do with IT systems? Do not ask the generals what they want, ask the foot soldiers/end users what they need to get the job done. The decision about new systems is usually done by people who do not actually do the job. As in:  I have no idea what my AP accounting clerk actually does, but I know what she should do. Systems after systems are designed and written, never to be used. That is ok for me since I write systems. So end users start writing their own systems with Excel as tool of choice. I have never met an accountant or CA who knows less about Excel than I do. Actually most know more. They can write insane formulas in one line.

One of my favorite aha moments was at the implementation meeting for a pricing module that I coded according to specs. User: this does not help us at all. Analyst: but you signed the (60 page) specs. User: but I did not read them. Yeah, my brain gives out after about 3 pages of specs unless they are data definitions.

So design something smallish. Involve users with prototypes, get their feedback.  Complexity grows. After a while throw the whole thing out and re-develop when the percentage of remarked out code > 50% or the language used is COBOL. Start again. Ask your end users or customers what they need to make their jobs/life easier.