It depends on your development environment and the type of production system.
Personally I am using Mac and/or Linux for development, and Linux for production systems.
Here is how I do it:
- Run a local installation of every shop whose files are stored in a version control system. I store both the web server folder with magento, etc. and the SQL database there in order to track all changes made during development. Usually I have a local domain without .com, etc.
- Install Magento using the Downloader into the local development system, and install the Blank theme to customize this for each customer… but: copy the blank theme, do not edit it directly. Having the blank theme installed helps tracking updates required for themes.
- Transfer all files using ssh and rsync to the target host. This way its faster and easier than FTP, etc. I usually have a shell script, which I hand a client name, and it will transfer all web files, plus the sql data changed.
I usually disable the Magento downloader on managed client installations, since the past has shown that clients often play with it and wonder why their shop all of a sudden dies.
Moving a local installation to a production system is pretty easy. One file edit, and one database update to set the config flag for the base_url to the correct value.
Rough breakdown, but I hope you get the idea.