I have a family of questions that I am piling into one post, because my suspicion is that they will all point to a short list of bad practices that cause these quandaries. The way I have been taught to develop for salesforce is just unbelievable to me, and I don't know what I'm doing wrong or what better options are available.
1) I think it's fairly obvious that we should all want more than just a "Last modified by" name and date. How do you get the metadata to play nicely with version control? Is there any way to do a merge without crazy stuff happening? Has anyone gotten a sensible system in place for using branches on their various sandboxes and developer organizations, and been able to actually use the VCS history in the way you would in a traditional development language? (e.g. to look at the code on production in "blame" view and learn anything useful from it). What parts of the metadata API do you enter into version control? I am asking all these questions because it seems like salesforce expects all version control to happen after the fact, making it more of an archaeological process than a "control."
2) The IDE, day-to-day: Is there a way to speed it up, or is this even necessary?
How long does "Refresh from server" take for you? It's a Loooooooong time with my organization, like 20 minutes or more. Compared to "svn up" or "git pull" this is just unbelievable. Do you just live with it, or is there something else?
Does it kill your PC's performance while you're using eclipse/the IDE? It eats up a ton of memory for what it is. We have about 100 megs of code and resources, object & profile definitions, etc . . . so maybe if it used 500 megs of memory, I wouldn't be surprised . . but I had to bump up the java heap size to a gig or two, and during a refresh from server the CPU and IO usage become very high and a system with 4 gigs of RAM starts acting wierd. Is there a way to speed it up, or should I just not be using this software?
3) Also about the IDE, but related to first-time per project setup. "Choose metadata components" is also horrifically slow, if I want to get the objects. Should I not even bother? Is there a better way to track changes to the objects?
4) Should multiple developers be sharing sandboxes? On one hand, it's nice to have your own environment to work in, but on the other, keeping sandboxes up to date appears to be a trial of its own.
When I say in the subject that "I am in disbelief" I'm not exaggerating, nor am I necessarily looking just at the IDE - it is self-evident that many salesforce customers have had great success, but the way I have been introduced to the system by the development team at my new job is blowing my mind, as an experienced (10 yrs) developer on other platforms. It's like this system was designed by people who had never seen the type of modern tools that developers have had for decades. So how do you all do it? Are the problems my team and I are having an indication that we are doing this all the wrong way?