For Java J2EE - toolset:
Eclipse - Perfectly good IDE, would be nice if it had deeper integration with ANT
Checkstyle - boring and intrusive, needs base rules tweaking, but consistent code style is good
ANT - local builds, deployment
Subversion - Version management
Hudson - Build tool, nice reporting, easy to install. Configure to build every couple of hours, stopping at least one hour before people start to go home. Last thing check-ins punishable by death.
JUnit - doesn't help with UI testing, should be compulsory for business layer & below
Clover - Code coverage tool, integrate this with build and hold people to a decent level of coverage
Jira, Fogbugz - or equivalent bug/job tracking ideally should integrate with version management
Umlet - very basic UML/diagramming tool, works with Eclipse but doesn't get in the way
Wireshark - for figuring out what's going on at the lowest level
Work environment -
Decent dual screen setup, proper desk space
Test target box(es) networked so deploy and test can be performed on system matching the live platform spec
Decent source of tea/coffee - no vending machines!
Large set of whiteboards
Separate readily available meeting room for discussions
Kitchen (minimum kettle, toaster, microwave, fridge, dual dishwashers),
Things to avoid:
Progressing to new code before fixing poor unit, code coverage and code style scores.
'Personal projects' within the overall codebase - code ownership is good, building empires is not
General observation. Whilst it flatters developers to make them feel individual, consistency of environment shows consideration for their fellow developers and a willingness to work as a team. Editors, PCs and toolsets that are 'their favourite' or customised to hell are a good sign of a diva in the making, or a set of code that no-one else can work on.
Developers should be given an environment where they can finish components off to a satisfactory status before moving on to the next piece. Coding frenzies, late-night working, skipping tests and missing documentation should never be necessary if the timescale is properly managed. It's the manager's job to buffer their team from external pressures and let them get on with the job.