Stages of development

  1. Understanding the domain
  2. Shaping the idea
  3. Designing a solution
    1. UX
    2. Architecture
    3. GUI
  4. Coding
    1. Tests
    2. Implementation
    3. Deploying
  5. Maintaining
    1. Fixing bugs
    2. Upgrading the system
    3. Improving scalability
    4. Observing production
    5. Rewriting the system

Understanding the Domain

For each individual, some base knowledge of the domain is needed (domain: real world problem we want to solve). As such, I'd count the cost as about the same for three individuals to discover a domain compared to a squad of three.

(squad: people focusing on the same task. It can be the same as the team, or more temporary.)

There might be some domain expert outside the squad that will become a bottleneck, which would then suggest that the whole squad mobs with the domain expert to maintain high quality communication.

If the squad is the bottleneck, the domain expert can gather information and choose to present it to the squad whole squad.

I have seen cases where the domain expert keeps close conversations with only one squad member, usually the most senior one. This saves time up-front while the rest of the squad is starved.

(Starving squad member: someone who doesn't get to participate and stops growing as a professional. Often coupled with a Squad Hero. Discussed more later.)

Recommendation: Full squad. The more of the squad the better.

Shaping the idea

When brainstorming as a group, you will usually have a homogenization issue where the team attaches to a certain idea too early. The group dynamics can also hamper innovation when a boss always knows the best, or some people don't feel safe to share. This will be discussed later.

As such, brainstorming usually take the form of a group where each individual is lead by a facilitator that creates structure and provides safety to the participants. The ideas are then presented to the group and narrowed down into a concept.

Discussion points

The Squad Hero and the Starving members