Project Templates - Best Practices
### Problem to solve
As new organizations and teams adopt GitLab, they must configure GitLab in order to adopt project management / GitLab best practices. Unless they intimately know the design trade-offs of how to use GitLab's features of Labels, milestones, CI pipelines, Issue Templates, etc, they are forced to learn on the fly and face a steep learning curve.
We recently implemented the ability to have a `Compliance Framework` project template, and this is an opportunity for us to create other possible project templates to solve two specific problems:
1. For **Totally New GitLab users**, a small set of pre-built `GitLab Project Templates` where the templates could be copied and applied for new projects, will make it easier for teams to set up and configure their GitLab projects. The templates should include:
- A set of scoped labels for specific workflows
- Prioritized labels to showcase how to prioritize work
- Milestones and/or iterations to pre-configure the use of sprints/time boxes
- Issue Templates (with the right folder structure etc) so they have templates
- A read.me file that explains the project configuration with key links
- Several boards to showcase different scenarios such as Kanban, Assignments, Milestones, etc
- Some reference to managing work through epics (even though they may not have epics in their account)
This configuration for **Totally New GitLab Users** might also have several variations for example
- Scrum
- Kanban
- Cloud-Native Development (or other specific technologies)
- Non Sw Development (like Marketing, events, etc)
GitLab would provide and define these best-practice templates for our future users.
2. For **Existing** GitLab customers/users, this feature would be very, very valuable so that organizations could pre-define their Organizational project templates such that they could establish and encourage teams to follow/adopt their standard practices and policies. Such as:
- Define common issue templates for specific common issue types (bug, vulnerability, idea, etc)
- Reference other organization policies and standards in the read.me file
- etc.
### Intended users
The typical user for this would be GitLab administrators and teams that are rolling out GitLab to larger organizations. Probably some mix of the following
* [Cameron (Compliance Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#cameron-compliance-manager)
* [Parker (Product Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#parker-product-manager)
* [Delaney (Development Team Lead)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#delaney-development-team-lead)
* [Devon (DevOps Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#devon-devops-engineer)
* [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sidney-systems-administrator)
<!-- Who will use this feature? If known, include any of the following: types of users (e.g. Developer), personas, or specific company roles (e.g. Release Manager). It's okay to write "Unknown" and fill this field in later.
Personas are described at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/
* [Cameron (Compliance Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#cameron-compliance-manager)
* [Parker (Product Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#parker-product-manager)
* [Delaney (Development Team Lead)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#delaney-development-team-lead)
* [Presley (Product Designer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#presley-product-designer)
* [Sasha (Software Developer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sasha-software-developer)
* [Devon (DevOps Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#devon-devops-engineer)
* [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sidney-systems-administrator)
* [Sam (Security Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sam-security-analyst)
* [Rachel (Release Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#rachel-release-manager)
* [Alex (Security Operations Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#alex-security-operations-engineer)
* [Simone (Software Engineer in Test)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#simone-software-engineer-in-test)
* [Allison (Application Ops)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#allison-application-ops)
* [Priyanka (Platform Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#priyanka-platform-engineer)
* [Dana (Data Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#dana-data-analyst)
-->
### User experience goal
<!-- What is the single user experience workflow this problem addresses?
For example, "The user should be able to use the UI/API/.gitlab-ci.yml with GitLab to <perform a specific task>"
https://about.gitlab.com/handbook/engineering/ux/ux-research-training/user-story-mapping/ -->
### Proposal
- In a **Gitlab Group**, administration, include a list of available 'Project Templates', where the Group Owner / Maintainer can manage the `Project Templates`
- Effectively, a `Project Template` would be a hidden/invisible project in the Group UI.
- The Group Owner/Maintainer could `edit` a project template, `rename` a template, `copy` a template to create a new template, or `delete` a project template
- SubGroups would have an option to Inherit the Parent Templates and have no specific templates, or they could add additional templates.
- When creating a new project, a user would be able to select from the list of `Project Templates` and then GitLab would create a new project as a copy of one of the `Project Templates`
Note:
- `Project templates` would **ONLY** drive project creation/definition.
- `Project templates` would NOT be able to update or change existing projects.
<!-- How are we going to solve the problem? Try to include the user journey! https://about.gitlab.com/handbook/journeys/#user-journey -->
### Further details
<!-- Include use cases, benefits, goals, or any other details that will help us understand the problem better. -->
### Permissions and Security
<!-- What permissions are required to perform the described actions? Are they consistent with the existing permissions as documented for users, groups, and projects as appropriate? Is the proposed behavior consistent between the UI, API, and other access methods (e.g. email replies)?-->
### Documentation
<!-- See the Feature Change Documentation Workflow https://docs.gitlab.com/ee/development/documentation/workflow.html#for-a-product-change
* Add all known Documentation Requirements in this section. See https://docs.gitlab.com/ee/development/documentation/feature-change-workflow.html#documentation-requirements
* If this feature requires changing permissions, update the permissions document. See https://docs.gitlab.com/ee/user/permissions.html -->
### Availability & Testing
<!-- This section needs to be retained and filled in during the workflow planning breakdown phase of this feature proposal, if not earlier.
What risks does this change pose to our availability? How might it affect the quality of the product? What additional test coverage or changes to tests will be needed? Will it require cross-browser testing?
Please list the test areas (unit, integration and end-to-end) that needs to be added or updated to ensure that this feature will work as intended. Please use the list below as guidance.
* Unit test changes
* Integration test changes
* End-to-end test change
See the test engineering planning process and reach out to your counterpart Software Engineer in Test for assistance: https://about.gitlab.com/handbook/engineering/quality/test-engineering/#test-planning -->
### What does success look like, and how can we measure that?
<!-- Define both the success metrics and acceptance criteria. Note that success metrics indicate the desired business outcomes, while acceptance criteria indicate when the solution is working correctly. If there is no way to measure success, link to an issue that will implement a way to measure this. -->
### What is the type of buyer?
<!-- What is the buyer persona for this feature? See https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/buyer-persona/
In which enterprise tier should this feature go? See https://about.gitlab.com/handbook/product/pricing/#four-tiers -->
### Is this a cross-stage feature?
<!-- Communicate if this change will affect multiple Stage Groups or product areas. We recommend always start with the assumption that a feature request will have an impact into another Group. Loop in the most relevant PM and Product Designer from that Group to provide strategic support to help align the Group's broader plan and vision, as well as to avoid UX and technical debt. https://about.gitlab.com/handbook/product/#cross-stage-features -->
### Links / references
issue