Programming in teams
A plea for pair-programming
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
Why program in a team?
What are the problems?
Communicating
Planning & Distributing
The Psychological Factor:
Difficult people by Karl Fogel,
Producing Open Source Software
Suggestions
Sprint-based development
Pair-programming
Agile Development
Communicating
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
Planning & Distributing
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
The Question of Leadership