What arguments are there for and against homogeneous and heterogeneous development environments, especially for a Java dev shop. Is your shop and most of the shops you know about heterogeneous or homogeneous?
Extended explanation.
I just had a long discussion with my Manager regarding our development environment.
I work at a small Java dev shop (I'm on a team of 3) and we're developing our first Java Web App. Our stack at the moment is Spring WebMVC, Hibernate, DB2, Windows (XP Dev|2003 Server Production), Java EE 6, Eclipse, Hudson, Findbugs, Doxygen, JUnit, etc. The primary reason we chose Windows was because it was forced on us by the higher ups who don't want to have to train IT to admin and secure Linux. The oddity of it all is that they also don't trust our abilities to create something secure so they put us on a private network that is not connected to the Intranet in any way and also has no connection to the Internet. The hope, however, is that after we prove ourselves we'll get let out of the dog house and get back on the Intranet. In order to do that (get back on the Intranet), we basically have to be on Windows.
I have this impression, however, that developers work better when they get to choose their own tools. For instance, if I like Emacs or Netbeans more than Eclipse, I should be able to use Netbeans as it will increase my productivity, in theory. Developers seem to be, as a rule, obstinate, habit forming, curmudgeonly people who prefer to do things their way. Making them do it some other way seems to bite into that image I have of them and just ends up shooting the team in the foot.
My manager, on the other hand, said that he sees the inherent impedance mismatches that would happen between developer machines (possibly Linux and Windows on developer boxes) and production arising from differences in tools and platforms as far outweighing the relatively small cost of changing habits and tools.
My Question boils down to asking for anecdotal information or hard statistics that point to whether or not shops in general are homogeneous or heterogeneous and why they are that way. I get the impression that a company like Google or Amazon or Microsoft imposes no tool requirements on their developers and just lets them do their own thing. My manager doesn't have that impression at all and thinks that even if different parts of a corporation have different platforms, within a team the company will always choose to be homogeneous as it presents less opportunity for pain.
As a caveat, I'd like to hear about this specifically for a Java shop. My overall impression is that Java tooling tends to work best on a *nix stack as that's where it was primarily developed. Obviously, if you're a .NET shop, it probably makes far more sense to be on the Microsoft stack. Even though Java is supposed to be platform independent, the tooling around it seems to be more *nix centric (for instance, I've had trouble getting Hudson to run on our Windows CI Server but when I ran it out of Cygwin, it worked fine).
Thanks for your thoughts.