we declared implicit Wait of 10 secs but an element takes more than that, say 20 seconds and sometimes may appears on 5 secs, so in this scenario, Explicit wait is declared.
anytime implicit wait don't wait for the default time it will stop waiting once element is visible
It's generally bad practice to mix your implicit and explicit waits -- rather, you should stick with doing one or the other, and not both, if possible.
Based on the problem you described -- you can increase your implicit wait to 30 seconds to account for long loading times, and the wait will be finished even if the element only takes 5 seconds to load.
I prefer explicit wait because I can perform negative wait too. Sometimes, I want to wait until a certain element is NOT visible on the page. With explicit wait, my wait is finished as soon as element disappears. However, with implicit wait, you will have to wait the full 30seconds to know if element has disappeared or not.