10 minutes or so should be the norm, 20 minutes max only rarely, longer than 20 minutes only if and when pertinent events or circuмstances justify it.
I heard a sermon where Fr. said that when he was in the seminary, he was taught in his homiletic class to "tell the people what you're going to say, say it, then tell them what you said."
I don't think I ever heard a sermon that did that, not even from the priest who gave that sermon lol.