Workspaces • Viable Maturity
## Closed
We've decided to move away from maintaining the maturity levels with the epic hierarchy. Sub-epics and issues should now be created under https://gitlab.com/groups/gitlab-org/-/epics/7419+ root. See High Level Planning for decision trail https://docs.google.com/document/d/1Xfr5YHdStC7_3kVAognj0SxbXlcavj2ofgp1mH2zH4U/edit?tab=t.0#heading=h.tpfj927nd26f.
## Problem to solve
&9189+ outlines the scope for the Remote Development minimal maturity and includes the ability to connect the GitLab Web IDE to an externally-managed remote environment configured as described in our documentation. While this unlocks new possibilities for developing within the GitLab UI, it does come with a significant limitation: You have to have access to and know how to manage your environment entirely outside of GitLab. As a solution to the larger problem of managing complex local environments, it is truly an MVC.
A more viable Remote Development feature will need to do more than shift the burden from manually managing a local environment to manually managing a remote environment. We need to have a way, within GitLab, to define, provision, and interact with remote environments in an accessible and approachable way.
### Viable Maturity
As outlined in the GitLab Handbook, Viable maturity means:
> <span dir="">Significant use at GitLab the company. </span>[CM Scorecard](https://about.gitlab.com/handbook/product/ux/category-maturity-scorecards/)<span dir=""> at least 3.14 for the </span>[job to be done (JTBD)](https://about.gitlab.com/handbook/product/ux/ux-resources/#jobs-to-be-done-jtbd)<span dir=""> when tested with internal users. No assessment of related jobs to be done. Suitable to replace the need for existing tools for new namespaces, projects, and environments.</span>
To get here, we need to be able to get work done at GitLab without ever having to clone a project locally. If we can do work on `www-gitlab-com`, `gitlab-docs`, or `gitlab-org`, then we can assume contributors to projects of similar complexity will be able to use the feature as well.
## What makes this Viable?
The goal is to replace a local development environment. So, being viable means that for some projects you can develop entirely within the GitLab UI. This means we should be able to:
* Define a remote environment in a file hosted in a project repository
* Use the configuration to provision an ephemeral environment on an external cloud platform (AWS, GCP, or Azure)
* Securely connect to the new environment from the GitLab Web IDE or via SSH from your local machine
* Receive realtime feedback from the terminal and preview changes in real-time (without requiring a CI build)
* View a list of environments that I have created
* Support for VS Code as the primary editor
* Integration with the GitLab Workflow extension
* Manually suspend or destroy an environment
At the very least, we should be able to do this on `www-gitlab-com` and `gitlab-docs`.
A ~Stretch goal is to make it possible to use the GDK and develop on `gitlab-org`.
## What's not in scope?
While all of these features are part of our long-term direction, we won't need them to reach a viable maturity. Some may come earlier anyway, but in order to widely adopt a remote development workflow within GitLab we do not need:
* Compatibility with other editors like JetBrains, Theia, Xcode, or Visual Studio.
* Support for non-Kubernetes-based deployments
* Advanced data isolation
* Integration with the GitLab CLI for managing environments locally
* Options for specifying varying levels of compute in the configuration file
## Availability
Remote Development is a multi-tiered category. The features described in this epic are primarily going to be available on ~"GitLab Premium" and interact with existing cloud platforms provided by the customer.
## Assumptions & Unknowns
There is still a lot we do not know about how remote environments will be adopted and what features constitute a truly viable offering. We will challenge our assumptions by defining our core JTBD and measuring them with a [Category Maturity Scorecard](https://about.gitlab.com/handbook/product/ux/category-maturity-scorecards/).
Key assumptions that may change the scope of this epic:
* To what extent do we need to support non-Kubernetes based infrastructure at this maturity level? For significant GitLab usage, we may not need support for bare metal VMs or Kata containers.
* Can we run the GDK on it? Is that necessary for wide adoption internally?
* What's the length of time someone is willing to wait for a new environment to be created? Do we need an extensive pre-build strategy or is providing a dockerfile in the repository a sufficient solution?
* Do we need additional support for passing secrets, credentials, secure variables?
* Do we need additional features around the container registry?
epic