I agree with Andrew 100% regarding multiple monitors. Besides allowing one to focus on the task at hand, a few seconds saved for an activity carried out 100s or 1000s of times can quickly add up to significant savings.
Way back when, I used to add a mono card to my DOS and Windows 3 systems and had a simple C API that allowed me to display 24 debug lines and status counters. It often highlighted timing issues because it was a real time memory operation.
For the last 15 years I have used 3 screens connected to 3 or more CPUs via daisy chained KVMs. Each CPU/screen has its own mouse and the single keyboard can be connected to a particular CPU/screen via a keyboard command. A typical debug session will show the source code (screen 1), the results (screen 2) and the debug log (screen 3). While coding, the extra screens are used to display reference or code samples. The isolation of the tasks on each CPU makes for a more stable development environment.
To round out the toolset I adapted a java based clipboard utility to allow me to copy from one screen and paste onto the other screens.
I know these extra screens have improved my efficiency, code quality and job satisfaction.