Most of the timeout issues are due to the speed selenium runs compared to the user’s input. A common practice is to add time.sleep() commands where this happens, but that slows down your app considerably. That is called implicit wait.
A better way to do this is to add a constant polling to the DOM you are waiting to show or the condition on the UI that will tell you you are ready to continue. See examples of this on:
http://seleniumhq.org/docs/04_webdriver_advanced.jsp
By removing all implicit waits, and just relying on explicit waits we made our testing app take 5 minutes instead of 30. You can never underestimate the amount of time you can save by sticking to this simple principle.