Description
Summary
A discovery epic for investments into documentation, and product improvements related to understanding and documenting use-cases for multi-repository set-ups. The epic is concerned with documenting any existing approaches, rather than implementing product features.
Context
Currently, Gitpod is built around some key product assumptions:
- A remote dev environment is configured in code, that is versioned in a git repository
- Dev environments can be started from repository contexts (branches, PRs, issues)
- Dev environments are ephemeral, so should have a great degree of automation. Do not invest in a single workspace through manual configuration.
This idea works great for single repo projects (mono-repos with multiple components in it or monoliths), but is not straight-forward with projects that consist of multiple git repositories.
That said, there are currently two main solutions for allowing Gitpod to work well for multi-repo set-ups.
🅰️ Multiple Workspaces
Depending on how many repositories a project consists of and how the components communicate with each other the preferred solution is to, configure each repository individually and then start workspaces for the needed repositories and bridge the network.
Example: A project consists of two repositories: "Backend" and "Frontend". Each repository has its own .gitpod.yml
. The backend repository doesn't even have a dependency on frontend code, so people can code on it without starting a workspace for Frontend if they wish. If you work on both, you start two workspaces one for "Frontend" and one for "Backend" and just code on them through two distinct IDE windows as devs would do locally. The network bridging makes sure your Frontend workspace uses the services exposed by the "Backend" workspace.
Caveat: If you have a large number of small services, starting a large number of workspaces and maintaining the automatic workspace timeout is inconvenient.
Benefits: This approach nicely keeps your repositories separated including their configuration (no big single dev env image but a small dedicated one per repo). Also, it allows starting workspaces on repository contexts for all your components.
🅱️ Meta Repository
Introducing one main meta-repository that contains the configuration for a single large dev environment that clones all the repos. This kind of mimics a mono-repo and if possible I'd go down the mono-repo route instead of this, because the drawbacks mentioned below:
Caveat: Starting a dev environment from the sub repositories doesn't work, because they don't have a configuration (you can add links to the Readme, though). Contexts don't work, i.e. starting a dev environment on a branch or PR.
Benefits: Kind of is the same as local, where you have one machine that is containing all the dependencies for the various components. More convenient than individual workspaces when you have a highly distributed application with lots of small services sitting in individual repositories.
Hypothesis
If we better document / show users how to convert from their current workflows (specifically more "advanced" use-cases like cross-repo and multi-container) to the Gitpod workflow, users are more likely to adopt, retain, and use Gitpod for doing significant project work.
Value
- Better understand how Gitpod fits with different architectural "patterns"
- It will be clearer to Gitpod users how they can adapt their current local dev workflow to Gitpod
Acceptance Criteria
- The main "use-cases" are well documented
- Any future epics/issues are created for required product changes
Growth Area
- Acquisition - Potentially will impact the number of users that perceive Gitpod as valid for their use-case before trying the product.
- Activation - Some users may be more likely to adopt Gitpod if they are aware of the best ways to configure their dev environments.
- Expansion - With more clarity around how Gitpod solves some of these architectural patterns, some teams may be able to progress
Measurement
- Pageviews on new documentation pages
- Sentiment based feedback on new documentation
Persona(s)
This epic is concerned with helping to define user persona's rather than impact existing ones.
In Scope
- Documenting existing product features and patterns
Out Of Scope
- Implementing new product features and patterns
Internal slack conversation [1]
Internal slack conversation [2]
Internal slack conversation [3]
Metadata
Metadata
Assignees
Type
Projects
Status