I just accept that the list will be overwhelming in some way, and save the effort of reworking it :-)

One thing I do is to try to work on the most tightly constrained things first. If there's a collection of tasks which I need to do at the office, and two of them also require John's help, I will usually try to do those two first, all else being equal in terms of deadlines, etc. Besides the obvious benefit of getting the more restrictive tasks done ASAP (especially if John is rarely available), that means I can go up a level in the hierarchy without worrying about overlooking tasks. I usually get some extra satisfaction from emptying a context, too, no matter how narrowly it might be defined.

As for the which context issue, don't forget to use the project to accomplish some of this. For example, if John is your friend as well as a colleague, you might well have actions involving him in both personal and professional projects, which would seem to make having @People:John as the only context for him inconvenient. However, if you have all your personal projects in one folder, work projects in another, and perspectives that focus only on one of those folders, when you are looking at the work projects folder perspective, you'll only see the actions relating to fixing your office desktop, not the ones for planning the Super Bowl party you guys are going to throw, even though tasks from both groups have that same context.

Yes, there are definitely scenarios where it is awkward to make a single context work. One that comes to mind involves multiple people. Instead of waiting for an occasion where Tom, Dick, and Harry all happen to be in the same place, though, I would just make an action to set up such an event, turning it into a hard landscape event.