First let me say that I'm not a developer. I'm an admin that does a
little programming. If any developers come in and contradict something
I've said they're right and I'm wrong.
I don't think you need to replicate the whole farm when you're
developing. I just install MOSS into a VM with all the options
installed and install VS in that. That way if I need to program against
a feature, it's there. MOSS includes SQL Express so you don't even need
a separate database box. Usually development is done in three stages.
Development, Test, and Production. I think you can do the first part on
one box, even a VM. Once it's developed then you move it on to Test,
which should be an environment closer to Production. If Production has
two WFEs, Test probably should too, but I wouldn't bother with it in
Development.
Since you can't test your SharePoint code on XP or Vista then you have
to do it on a 2003 box. I brought up the iisreset issue because that's
one of the things that comes up if you end up sharing that environment.
You might be iisreseting the environment when another developer is
testing his code. That's another reason I think the VM option works
well. There's no chance of stepping on anyone's toes. That problem
could also show up if you're installing things into the GAC or BIN or
making web.config changes. Iisreset was just an example.