At the moment my current workflow looks like this.
I will take the latest copy of WordPress and its database from the live server and develop it using MAMP on my machine.
On my local server I will make my changes. For example, I might add a new custom post type and some custom fields using the Custom Post Type UI and Advanced Custom Fields Plugins. Then I would code a custom post type template. After that I will change the settings in my wp-config.php, upload the whole WordPress directory to the live server (which takes ages) and do a search and replace on the database.
What if someone has created new posts and pages on the live website while I've been developing locally? When I upload my local copy it will erase the latest posts and pages. The only solution I have come up with is manually mimicking the settings on the live server with the local settings before uploading the files.
This doesn't seem very efficient. Is there another, better way?