Organization/Workspace to replace instance-level functionality with group-level features
## Overview #### :tv: [Intro video](https://www.youtube.com/watch?v=tDYjMxGD2Wg) #### :construction: [Product Documentation](https://docs.gitlab.com/ee/user/workspace/) GitLab's features currently exist at 3 levels: | Level | Description | Example | | ------ | ------ | ------ | | Instance | Features for the entire instance. These are generally admin features (restricted to the admin panel or via a config like `gitlab.rb`), but not always ([Operations Dashboard](https://docs.gitlab.com/ee/user/operations_dashboard/)). | [LDAP](https://docs.gitlab.com/ee/administration/auth/ldap/#configuration-core-only), [admin-level push rules](https://docs.gitlab.com/ee/user/admin_area/#admin-area-sections) | | Group | Features configured and used at the group level. These generally inherit behavior or objects down into subgroups (like epics, settings, or memberships). | [Epics](https://docs.gitlab.com/ee/user/group/epics/) | | Project | Features used at the project level. | [Requirements Management](https://docs.gitlab.com/ee/user/project/requirements/) | See https://www.youtube.com/watch?v=U8wTrxM35ow for a discussion with Sid on this topic outlining the problem and the concept of an "instance group". ## Problem This leads to a few problems: * 3 ways to build a feature leads to follow-on requests to build a feature at some other level (see meta issues like [group level things](https://gitlab.com/gitlab-org/gitlab/-/issues/17836)) and additional engineering effort. * Restricts the audience, especially with instance level features. Many of these features are admin-only, which is a tiny percentage of most users on an instance. If we make a feature instance level, we're locking ourselves into a few thousand self-managed users and locking out GitLab.com users. * Poor UX for instance-level things. We don't have a place to put instance level features, so cool features like the Operations Dashboard and the Security Dashboard get relegated to the "More" dropdown in the top navbar. ## Proposal #### :tv: [Iteration discussion video](https://youtu.be/GmIn4O3GVWE) #### ✏️ [Figma work file](https://www.figma.com/file/lrLPzCZRAC830p9kqezQBS/4257-Workspace-to-replace-instance-level-functionality-with-group-level-features?node-id=0%3A1) While it would be ideal to have 1 way to build a new feature, most GitLab functionality should exist at the group level rather than the instance level at a minimum. We should extract features from the admin panel into a new object called a *Workspace* that covers behavior for the entire instance. * A workplace includes settings, data, and features from all groups, subgroups, and projects in an instance (including personal namespaces). * A workplace allows settings to be defined and applied to all groups, subgroups, and projects in an instance * Data from all groups, subgroups and projects in a workspace can be aggregated. * There is a single workspace per instance that is accessible to instance administrators. To make this happen we will need to: * Consolidate groups and projects into a single object * Epic: https://gitlab.com/groups/gitlab-org/-/epics/2885 * Architectural Blueprint: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/54792 * Build a consistent way to cascade settings down a group hierarchy https://gitlab.com/groups/gitlab-org/-/epics/4419 * We can then start to migrate existing settings and features into these new frameworks to have a consistent experience across GitLab. #### Object model | Current Self Managed and SaaS environments and the new conceptual workspace | Visual examples | | ------ | ------ | | ![Screen_Shot_2021-08-17_at_3.10_1](/uploads/678bff4af65bc62071ccf31130c00973/Screen_Shot_2021-08-17_at_3.10_1.png) | ![Object_Model](/uploads/e07798704632e722d05e6cdeb844d79b/Object_Model.png) | #### Iteration 1A | In progress: https://gitlab.com/gitlab-org/gitlab/-/issues/300184 | - | | ------ | ------ | | Expose the "instance level" `NAMESPACE` Workspace with `Admin` / `Users`. | ![Screen_Shot_2021-08-11_at_11.50.15_AM](/uploads/1a8649627afd69620255cba5ad33bfed/Screen_Shot_2021-08-11_at_11.50.15_AM.png) | #### Iteration 1B | - | - | | ------ | ------ | | Expose the "instance level" `NAMESPACE` Workspace with `Groups` overview listing | ![Screen_Shot_2021-08-11_at_11.50.21_AM](/uploads/70b121ac516d1a9483c950b8470d2ab1/Screen_Shot_2021-08-11_at_11.50.21_AM.png) | #### Iteration 1C | - | Issues / List | Issues / Boards | | ------ | ------ | ------ | | Expose the "instance level" `NAMESPACE` Workspace with `Issues` / `Boards` | ![Screen_Shot_2021-08-11_at_11.56.44_AM](/uploads/d652063ac140632a6bf0d0bbcbb4e92d/Screen_Shot_2021-08-11_at_11.56.44_AM.png) | ![Screen_Shot_2021-08-11_at_11.56.39_AM](/uploads/ac815b013d4d98bf92e08bb54bb8df62/Screen_Shot_2021-08-11_at_11.56.39_AM.png) | #### Wireframes (object container) | Workspace overview | Groups | Admin settings | New Admin settings | | ------ | ------ | ------ | ------ | | ![1.1-Instance_overview](/uploads/cb749c7a7dbdd54221405a3fba518f56/1.1-Instance_overview.png) | ![1.2-Groups_overview](/uploads/6142ef9b2adf9b42ef64ea95eb6d8af8/1.2-Groups_overview.png) | ![1.3-Admin](/uploads/5991d7fdd904450b13d4a2488db3b824/1.3-Admin.png) | ![Export](/uploads/f3738f09ea213d0db8ee0278f251ee4c/Export.png) | ## Related Epics and Issues * https://gitlab.com/groups/gitlab-org/-/epics/4419 * https://gitlab.com/gitlab-org/gitlab/-/issues/218333 * https://gitlab.com/gitlab-org/gitlab-foss/-/issues/62802 * https://gitlab.com/groups/gitlab-org/-/epics/4257 * https://gitlab.com/groups/gitlab-org/-/epics/2885 * https://gitlab.com/gitlab-org/gitlab/-/issues/209020 * https://gitlab.com/gitlab-data/product-analytics/-/issues/48
epic