The best programming tool I've ever used was a whiteboard with dry erase markers. When I worked for IBM, we had a team of, oh, about 10 or so developers working on an internal project with usage spanning the globe. We turned out tight code on a tight schedule and we did it with relatively few errors and hell if we didn't come in under budget, just for kicks. We had a really great team of developers but one thing which I think had a big impact was having a huge whiteboard in every. single. office.
We were, at the time, technically part of the services division, even though we had absolutely no outside contact with customers. We provided purely internal benefit through our software. In a nutshell, we wrote the ticketing and billing software for the maintenance and support services for IBM. When you called IBM for support on your AS/400, we were the ones responsible for tracking that little guy and making sure you were billed appropriately. This involved working with several systems and a home brewed database (it was some time before we completed our migration to DB/2) but it was well done. We didn't get many complaints.
I don't know if it was due to being part of the services division or if it was something IBM was doing as a whole (I suspect the latter) but at the time, we were undergoing a management shift as well as a process management shift. Our management shift was moving to matrix management where projects had business managers and individuals had HR managers so you were reporting to two entities and.. well.. the less said the better. The process management involved weekly meetings, lots of status updates and tons of charts. But in spite of all of this, the whiteboard kept us on time and under budget.
Each office held two developers (or architect or team lead, whatever). The wall as you walked in was taken up by a massive whiteboard with two or three dry erase markers plus an eraser and maybe some whiteboard cleaner. You had to go the breakroom and grab some paper towels if you wanted to actually use the stuff.
Anyway, we used the hell out of those things. You could walk into any office and immediately know what they were working on by checking out the edges of the board, where long term task lists were kept. But the big plus were the middle areas, where technical notes and diagrams were kept. We would do object designs and data flows and leave them up for a month or so until things were complete. Need a gigantic scratch pad to work out the logic for your module? No problem, just stand up and walk over to the whiteboard and write down the contents of your mind.
Perhaps the lone problem was lack of space. Make no mistake, these whiteboards were huge, wide enough to span two cubicles. Still, if the problem was sticky enough, you wanted, nay, needed more space. And of course you were sharing with your officemate, so you had to be mindful of what space they needed. As it happened, we had a few extra rooms where we could use whiteboards unfettered by occupancy restrictions. It was a wonderful time.
Since then, I have been to many locations and seen many team sharing arrangements. The supremacy of the whiteboard has typically received at least a nod in the form of a shared whiteboard in a common area but never was worshipped as it was when I was at IBM.
Things have probably changed since then. Times certainly have. There are whiteboard software applications that allow users to draw to a shared space on their computer, but it's not the same. Using a mouse to try to draw programming diagrams and notes is like trying to build a ship in a bottle using salad tongs. And if you have a Wacom tablet or similar device you're probably not the focus of this post. No, there is no substitute for the real thing. The whiteboard is the king of programmer tools. Long live the king!