Other people have asked this question and there are some answers but they do not clarify one moment. Implicit wait will wait for a specified amount of time if element is not found right away and then will run an error after waiting for the specified amount of time. Does it mean that implicit wait checks for the element the very first second and then waits for the specified time and checks at the last second again? 
I know that explicit wait polls the DOM every 500ms. What is the practical use of implicit wait if tests take longer with it?
In case of implicit wait driver waits till elements appears in DOM but at the same time it does not guarantee that elements are usable. Elements might not be enabled to be used ( like button click ) or elements might not have shape defined at that time. 
We are not interested with all the elements on the page as far as we are using selenium. All element might not have shape even.But presence of all the element in DOM is important to have other element working correctly. So implicit wait. 
When working with any element, we use explicit wait ( WebDriverwait ) or FluentWait.
Selenium Webdriver Python - implicit wait is not clear to me