DigitalDud wrote:

I'd say working with as a team is definitely important but so is developer privacy. Considering developers are going to be spending most of their time debugging, I'd say some privacy and the ability to shut off distractions is going to be pretty important. The last thing you want when you're debugging, and going deep into the call stack, is someone coming in and disrupting your concentration.

The most interesting thing about the way we work is how little time our developers actually have to spend in the debugger. When you practice things like TDD and pair-programming, you literally spend less than 10% of your time in the debugger.

I was giving a "agile" presentation to another team here on campus lately and had a few other agile folks from around MSFT with me. I asked the room, "How much time you spend in the debugger?"

The team I was talking to responded with numbers like 50% or 75%. Then I asked my agile friends and they responded with numbers like 0% or 5%.

TDD allows you to build the system in a small way so surprises rarely occur. You don't spend very much time in the debugger, because you only added one or two lines of code since you last ran the tests.

I typically only use the debugger when an API call I'm using doesn't behave the way I expect. But then it is a VERY targeted attack. Step into the one test I'm having problems with, trace through to the API call and inspect the result. Once I've learned better what's going on, I add typically add a new test that explains that behavior better and then I can move on.

Hopefully that helps explain things a bit better.