First off, best practices.
You should always consider your live database the master. You can use database dumps to get this live database each member of your distributed team. This ensures that each member of the team is working from the same base.
You should use a a version control system to share your code, so that you are all working from the same codebase but have control over when to merge the code.
Sharing a database between developers, and or sharing a codebase between developers will cause confusion and should be avoided.
Now some more opinion based thoughts
Content for your site should be created and edited on the live server.
You should release the code in a managed, repeatable way. Ideally you should have a staging server to test the code before it goes live.
The tricky part is content and configuration changes. I have advocated that these should be done in update functions in a dummy module. However sometimes this is arduous to do, or in some cases changes can't be done reliably. So there should be a balance, most configuration changes should be done in code, so they are repeatable and can be distributed among developers easily. But for configuration changes which are not easily coded, or which are required outside of a release window you can make them directly on the live server. The important thing is that you can get your code and database into a consistent state across development and live.