The common pattern that I find in “bugs that make no sense” is that I am believing something that isn't true. Once I identify and challenge that belief, the bug becomes obvious. The reason that these bugs are harder to find in my own code is because I believe my code is correct, so I don't question it so closely. When I'm reading other people's code I have less belief that it is correct, so less hindrance to finding the bugs.
Put another way: finding a bug in my code is both a success and an admission of failure. Finding a bug in someone else's code is pure success. This sounds like a strong case for pair-programming!
—Neil Brown, How to ruin Linus's vacation, LWN newsletter
Communicating
Planning & Distributing
The Psychological Factor:
Difficult people by Karl Fogel,
Producing Open Source Software
Pair-programming
Agile Development
Meetings (presentations/progress reports), online (mailing-lists,
IRC, Wiki), commit messages!
Listen/read, think before you speak: productive vs. unproductive threads –
bikeshedding
Give and accept positive feedback, constructive criticism *only*, self-criticism, ask and offer for help (no need to be ashamed)
Don't bypass team-mates. If it happens: no blaming – look for a solution instead
Avoid private discussions
Deadlines, milestones
Identify compact and self-contained work packages
Identify skills and preferences in the team
Check progress often, identify bottlenecks, flexible re-allocation of resources