Last updated

Team picker

The team picker is responsible for team creation and teammate assignments.

Most of the team picker responsibility happens one day every two months.

However, if new team members join during cycle or existing team members exit or go on leave the team picker is responsible for team formation and assignments.

Team formation

Each team has a fake company name.

See the full list of company names.
  • Artisium
  • Creativault
  • Inspironix
  • Designory
  • Imaginarium
  • Culturist
  • Innovario
  • Visionest
  • Galleryx
  • Creatique
  • Creativara
  • Artology
  • Designix
  • Innovique
  • Imagidome
  • Culturia
  • Visionaryx
  • Inspiratech
  • Museworks
  • Artifexio
  • Creatosphere
  • Idearium
  • Imaginest
  • Innovision
  • Creativest
  • Artinova

These were all set up in the first training project.

Purpose

Training pair selection serves two purposes:

  1. Working with a partner encourages a think-out-loud approach to be more explicit and deliberate about action.
  2. Improve teamwork and relationships with people you typically don't work with on a daily basis.

Rules

The pairs are all assigned, and you need to work together using a "pair programming" approach:

  • Screenshare
  • 1 person types at a time
  • Take turns every 30-60 minutes and rotate

You may use generative AI for assistance.

Pair selection

The pairs are all assigned (by the team picker). Pairs are assigned and not flexible. If the person you are paired with is out, go to the training slack channel to get another pair assignment.

Pair selection is done at weighted random (the full algorithm is below).

Algorithm for team assignment
def mixed_pairs(people):
    seed(99)  # Set a random seed for reproducibility
    shuffle(people)  # Shuffle the list to randomize pairs

    utc2_people = [p for p in people if p[1] == 2]
    utc3_people = [p for p in people if p[1] == 3]
    other_utc_people = [p for p in people if p[1] not in [2, 3]]

    pairs = []
    used = set()

    # First pair within UTC+2 and UTC+3
    while utc2_people and utc3_people:
        p2 = utc2_people.pop()
        p3 = utc3_people.pop()
        pairs.append((p2[0], p3[0], p2[1], p3[1]))
        used.add(p2[0])
        used.add(p3[0])

    # Pair remaining people in the same groups if any
    remaining_people = utc2_people + utc3_people + other_utc_people
    shuffle(remaining_people)  # Shuffle remaining people

    # Form pairs within remaining people, trying to respect time differences
    i = 0
    while i < len(remaining_people) - 1:
        name1, tz1 = remaining_people[i]
        name2, tz2 = remaining_people[i+1]
        pairs.append((name1, name2, tz1, tz2))
        used.add(name1)
        used.add(name2)
        i += 2

    # Check for any unpaired person
    unpaired = [remaining_people[i][0] for i in range(len(remaining_people)) if remaining_people[i][0] not in used]

    return pairs, unpaired

# Generate mixed pairs
mixed_pairs, unpaired_people = mixed_pairs(people)
mixed_pairs, unpaired_people

Pair rotation

Pair rotations are planned approximately 6-12 times per year.

Pair substitution

If a teammate is out of office, substitutions may occur.