The main idea behind the agile methods is to help you be productive - in a positive sense. No one cares if you spend an hour surfing every day if you meet the deadline. Everyone gets mad if you surf half an hour every day but miss your deadline. The solution: Make it easier for you to meet the deadline.
As you noticed, pair programming makes sure you stay focused (among all the other advantages like improving skill/knowledge spreading, better code, less bugs, uniform design, etc.).
I found that discipline is always a struggle for me. If I pair with someone, chances are that one of us wants some work done today and pulls the other along. So the "work for a month" often becomes turns into "work together for one week", being surprised how that huge amount of work resolved in the end, spend a day or so recovering (refactoring, fixing TODOs in the code, adding a couple of tests, surfing with a clear conscience) and then grabbing the next month of work.
Net result: I'm much more relaxed (more because than despite the constant supervision), team cohesion is much better, work gets done more quickly, people don't hang around some minor issue for hours or even days (because someone else can spot the problem much faster).
When you say "you may actually feel ashamed", isn't that a good thing? It means you feel that you did wrong and you should. You're not getting paid to get nothing done. Not getting anything done makes you feel helpless, unhappy, unworthy, miserable. Instead of feeling ashamed, stand back and think "Why didn't I accomplish anything today?" Do you need help? Is there something you don't understand? Is the current task too hard? You don't like it? Maybe you can switch the task with someone else. Maybe someone else can help you get through. Agile means: Assume responsibility instead of being micro-managed like a puppet on strings. You need a tool? Go to your boss and ask for it. Learn to argue. Learn to stand up and shout when you have to.
As for tests, there is a sweet spot when your code suddenly collapses from "nice" to "perfect". That's the moment when you notice that you need to implement feature X and you thought that will be a nightmare and suddenly realize that the code is almost there. Just a small refactoring here and there. A new class and done. Four weeks of work suddenly became a day. Victory! Triumph!
I had both sides of the story in my carreer, and personally found the landscape thing literally hell. Even the constant movement of other people distracts me, let alone the humming noise of talking, phones that go off, meetings right next to your desk, and the fact that you lack enough daylight and fresh air when sitting in the middle. I like a rather fresh temperature, makes me think better. Not everybody agrees though.
Currently we're three in one office. It's still not perfect, but it does help that my colleague and I can discuss server-related issues while we're working on it. And it saves office space. But honestly, more than three I hope I never have to experience again.
So in summary, I think it's important to look at :
- modest interruption
- enough light and air
- putting closely collaborating people together, but not more than that
YMMV.
Best Answer
I am doing it with a team of one currently (I have been promised help in the near future).
But I find it useful for planning (I drag in other developers to help in estimation processes so it is not just me) and tracking progress (for both me and the management team).
Also when other team members join they will be able to see what tasks are currently available to work on and be able to jump in and help.
During planning it still works for prioritization and the demo are still cool.