“It’s really simple, I just want one screen.”
“Wow, that [shiny thing] must have taken a lot of work.”
I find that non-technical clients are very bad at estimating how simple or complex the functionality they are asking for is. Their estimates of how hard things are seem to revolve mainly around how much of the UI they can see, and they think of the computer as a person that can answer open ended questions.
As programmers we know this is not the case. Often complex interfaces are just a matter of doing more wiring, and it is often the ‘magic button’ that knows the correct answer that requires the most work (or can not actually be implemented on a computer today because it requires strong AI).
We also know that this causes problems, particularly when estimating and delivering work, or when ‘small changes’ require a lot of back end work, and it costs more money or takes more time to get them done.
What are some ways to gracefully handle the complexity mismatch and keep your clients happy?
“What are some ways to gracefully handle the complexity mismatch and keep your clients happy?”
Accurate and honest estimates of cost and time and sticking to agreed functionality and timing.
To address the rest of your question, the best way is to organise your estimates of effort in the same way that they think about the problem. When they see “shiny button = 128 man days” or “10 new screens = 0.5 man days” then they will either ask why, which gives you a chance to explain the difference between their perceived complexity and your reality, or they will not ask, in which case you have disclosed the costs and they can make a judgement about how important the relevant features are against their budget priorities.
What I have found is that the relationship with a non-technical client works fine so long as you have their trust and the only way to consistently earn and retain their trust is by delivering on quality on time on budget.
HTH and good luck.