It is definitely not a good experience to need to move from one web host to another, but sadly, it is not easy to identify a web host that fits you when your first started, and many of us are bound to make such mistakes. However, since changing web host is already a concrete decision, we should minimize the impact of a transfer, you don't want your website visitors to get a 'web page not found' error for a couple of days while you move, testing your website visitors patience is definitely playing a risky game. Here are some tips to follow on transferring between web host with minimize downtime to your website.
Signup a hosting account at new web host
I am sure you have already identify a suitable web host while you are still struggling with your current web host. If you have decided to start the move, first thing you should do is signup a hosting account at the new web host, get the login info and familiarize yourself with the hosting account. If you are first time moving your website to another web host, the best way to learn is setting up a small test site identical to your current website in the new hosting account, this will help you find out all the options and features to setup a similar website, and this is going to help you a lot in the actual transfer.
In the process of setting up a test website, you can further test your selected web host if they are really providing what you expected, things like finding needed info on their support web pages when you are stuck, checking the quality given by the support staff, server load and uptime etc., you should expect those problem you are facing at your old web host being addressed in this new host, also the expectation (I am sure you have some after hosting with your old host), are the current web host meeting your expectations ? If the new web host score 90 points above of your stress test, then you have found yourself a suitable web host, you can proceed on to the actual transfer.
Why the test ? Why not just transfer everything ?
Because moving from one web host to another is a painful experience, and testing with your live website is going to be costly if you have accidentally fall in to another web host that is even worst than the old, hopping around web host seeking for a comfort home is not a good approach, you need to spend time familiarize with your new hosting account, transfer the content, switch domain nameserver, wait for the domain to resolve to new hosting account and re-check the website again for any errors. There is too much valuable time involve and it is better for you to spend those time working on your website to increase traffic rather than jumping from one host to another, you should be aware of moving from one web host to another takes approximately 3 days to get things stable down.
Backup your data at old web host
When you have familiarize with the new hosting account and ready for the actual move, first thing to do is backup your data at old hosting account, data as in the website program scripts, database if it is being used, email addresses in mailing list, list of email accounts etc. double check twice to ensure you have all all the data backup, things can be too automated and chances are you might have overlook something that is not being used often but needed. you don't want to missed out any single pieces of important data of your website.
Upload data to new hosting account
If you are still having the test site in your account, clear up everything.
Upload the data you have just backup to the hosting account, setup each piece of the data accordingly, you may need to make small changes here and there in your program scripts, things like file path, database connection strings etc. Remember to setup identical email addresses as well, this can ensure email messages to your domain is being placed in respective mailboxes the same way as in the old web host.
Check through everything at new web host
When you have all data setup, check through your website thoroughly to ensure nothing is missing or not functioning as expected, there are bound to be small little things here and there that need minor changes, fix them and retest again to ensure it is working as expected.
Please ensure you are testing your website like a normal visitor, don't just expect a web page that show up correctly on browser window is going to function properly, for example those forms, you will never know unless you hit the submit button, you don't want to find that out by your website visitors later, this can mean loosing orders if this is happening on your ordering form, does that sound serious ?
Change domain nameserver
After you have tested your website thoroughly, and are confident that everything is working as expected, you can choose a less traffic period to your website, and issue a domain nameserver change for your domain, note that this change is going to take approximately 24-72 hours to complete, and this depends on the update schedule of individual ISPs, the more frequent the ISP picks up update, the faster the visitors using that ISP gets directed to your new hosting account. That say, during the nameserver update, some visitors will be visiting the old hosting account, and some will be visiting the new hosting account, and the traffic to old hosting account will decrease as more ISPs pick up the nameserver update, check your webstats for both hosting account and you will notice the difference.
When you are only seeing traffic to your new hosting account and no more traffic to your old hosting account, that means the transfer has been completed, you can do a final sweep of data at old hosting account, like email messages etc. so that you are not missing anything sent to old hosting account during the transfer.
You know what? you have just completed the transfer without your website visitors even noticing it !