7 Design patterns
🚧 This website and documentation is still in very active development and evolving quickly, so content could undergo substantial changes at any time 🚧
To help simplify how we work, it’s useful to follow commonly used patterns in project development and collaboration. In our case, the design patterns we will use are:
7.1 One Git or GitHub repository per “product”
The pattern of “one repo, one product” is a widely used pattern in many types of projects. There are many tools, templates, and workflows that are built around this pattern. For instance, it is easier to ensure a scientific document is reproducible if it follows this pattern. So administratively and collaboratively, it is easier to use a pattern like this, since it is a standardized way of structuring work. For DP-Next, a “product” includes scientific output such as papers, but also includes protocols, documentation on data, standard operating procedures, and guides (like this one).
Some servers don’t allow internet or easy access to outside resources like GitHub. But all servers have Git installed. In those cases, each scientific output is one Git repository.
7.2 Prefer to revolve work around teams and “products”
Linking to the “one repo, one product” pattern, it’s also useful to revolve work around teams. From the Team Topology book, the “the means of delivery of a product” is the team. What that means is that teams should be assigned work, not individuals, as teams are what effectively create and build products (especially knowledge work products). So by designing work on a product with a focus on a team and teamwork, we can make use of all the established and proven ways to structuring teams and organising how people work within a team to more effectively and efficiently produce a product.
How do we define team then? As per the (excellent) Team Topology book, a team is a small group of people (of no more than 8-9 people) who work closely and cohesively together on a shared product. A team usually has these “signs”:
- Requires a high level of communication and coordination of tasks between members.
- Is usually composed of people with different, though complementary, skills.
- Is responsible for the entire lifecycle of a product.
- Has a high level of autonomy in deciding how they do and structure their work.
- Has specific roles within the team.
- Has a lead who is responsible for curating and coordinating tasks and ensuring the environment and organisation enables members to work effectively.
With this in mind, the pattern of “one team, one product” is an effective and widely used pattern to structure work around products. This way, it makes it clear who is responsible for what. In DP-Next, we use this pattern for most of our main, larger products. However, many of the smaller products are not suitable for using a team-based approach, for example, a PhD student’s paper product for their thesis. In those cases, the individual assigned the product is responsible for it, with support and review from other (potentially explicitly assigned) people.