Collaborative programming

How does one classic way of Collaborative Programming work?

 * 1) There is no rules, there is only a set of recommendations.
 * 2) It’s not a requirement to join the session that one knows the codebase or the specific language because you will be working as a team (a group of two to five people) who meets for a call.
 * 3) One person is always driving the sessions and sharing their screen and is implementing one small step of a problem that the group wants to solve together.
 * 4) If you have a nice pair programming tool setup that’s great, otherwise the one that types can following the instructions for the driver.
 * 5) Being the driver make sure you describe what you are trying to do and as the navigator make sure you stay engaged and ask questions about things you are unsure about.
 * 6) After about 15-20 mins (whatever works) the driver switches and the next developer is describing their idea and putting it into practise.
 * 7) At any point, people can ask questions and ask for help from the team for looks up things in the docs ask for ideas about what to do next.
 * 8) If there's people in the team that have less experience than you make sure you keep them included by asking little questions: "What should we do next?" or "How can we solve this?"

How to communicate during a session?
As opposed to a workshop the goal of a pairing session is not to present a solution or a technology to your team, but rather to get to a solution together. Therefore specific communication rules apply:
 * refrain from saying things like "obviously" or "simply", because what you are implementing seems simple to you, but rather approach your teammates with empathy, and assume that you have different knowledge of different parts of the codebase
 * when somebody has a question we pause and answer as good as we possibly can
 * rather overcommunicate and talk the others through what you are trying to do
 * when you realise the other one did a mistake, do not interrupt but bring up your concerns when they have finished their point
 * use always only non-judgemental language, saying "you did it wrong" might not be the best way to make your pairs aware of a mistake, rather say: "wouldn't it be better to..."

How do you initiate pairing sessions?
They can be either ad-hoc or once you enjoy them be scheduled sessions few times a week.

A change of mindset about the way we work together is required:
The point of having a collaborative session is not that you will all be more effective together, the point is to collaborate and learn from each other and get more conscious of anti-patterns and with a bit of practise you will actually write better code.

"Try treating programming as a learning activity that throws off running code as a byproduct" ~@KentBeck