Gitlab hero border pattern left svg Gitlab hero border pattern right svg

Release Team

Vision

For an understanding of what this team is going to be working on take a look at the product vision.

Mission

The Release Team is focused on all the functionality with respect to Continuous Delivery and Release Automation.

This team maps to Release devops stage.

Team Members

The following people are permanent members of the Release Team:

Person Role

Stable Counterparts

The following members of other functional teams are our stable counterparts:

Person Role
Marcia Ramos Technical Writer, Create, Release
John Hampton Frontend Engineering Manager, Release (CD)
Jake Burden Frontend Engineer, Release:Release Management
Rayana Verissimo Senior Product Designer, Release (CD)
Mike Nichols Product Designer, Release (CD)
Shinya Maeda Senior Backend Engineer, Release:Progressive Delivery
Andrew Fontaine Frontend Engineer, Release:Progressive Delivery
Sarah Groff Hennigh-Palermo Senior Frontend Engineer, Release:Progressive Delivery
C.S. Engineering Manager, Release:Progressive Delivery
New Vacancy - John Hampton (Interim) Engineering Manager, Release:Release Management
Krasimir Angelov Backend Engineer, Release:Release Management
Jason Goodman Backend Engineer, Release:Progressive Delivery
Etienne Baqué Backend Engineer, Release:Progressive Delivery
Sean Carroll Senior Backend Engineer, Release:Release Management
Nathan Friend Senior Frontend Engineer, Release:Release Management
Vladimir Shushlin Backend Engineer, Release:Release Management
Tiffany Rea Software Engineer in Test, Release
Orit Golowinski Senior Product Manager, Release
Jackie M. Senior Product Manager, Release

Technologies

Like most GitLab backend teams, we spend a lot of time working in Rails on the main GitLab CE app, but we also do a lot of work in Go which is used heavily in GitLab Pages. Familiarity with Docker and Kubernetes is also useful on our team.

How to work with us

On issues

Issues that contribute to the release stage of the devops toolchain have the ~"devops::release" label.

In Slack

The team's primary Slack channel is #s_release, and the public managers channel is #release-managers. We also support a number of feature channels for discussons or questions about a specific feature area. We no longer support issue specific channels, as they are easy to lose track of and fragment the discussion. Supported channels are:

Team Workflow

We use the Release Team Workflow board to plan and track features as they make their way from idea to production. This board details the various stages an issue can exist in as it is being developed. It's not necessary that an issue go through all of these stages, and it is allowed for issues to move back and forward through the workflow as they are iterated on.

Workflow Stages

Below is a description of each stage, its meaning, and any requirements for that stage.

Engineering Evaluation & Estimation

In order to make sure sprints are effective as possible, it is important to ensure issues are clearly defined and broken down before the start of a sprint. In order to accomplish this, engineering evaluation will take place for issues that require it (small changes and bug fixes typically won’t require this analysis). Engineers will look for assigned issues with the workflow::planning breakdown label that have user stories defined, as well as functional, performance, documentation, and security acceptance criteria. See Build phase of the Product Development Workflow.

Assigned engineers will work with Product, UX and other engineers to determine the implementation plan for the feature.

Once an implementation plan has been finalized, the following steps should be taken:

Merge request count as a measure of issue weight

As a byproduct of the engineering evaluation process, a rough estimate of the number of merge requests required to develop a feature will be produced. This measure can be used as a way to determine issue weights. These weights can be useful during the planning process to get a rough gauge of how many features can be worked on in a milestone, and to understand how much work the team can do in a milestone. This metric also aligns with the throughput metric currently measured by engineering teams.

Tips: When you're having hard time to estimate MR count, consider PoC step.

If you have no idea where to begin the development due to lack of knowledge on the context or you're less confident on the current technical proposal, it might be better to work on Proof-of-Concept MR (PoC or Prototype) at first. This gives you more insights on the current implementation details and potential required changes.

This step removes a lot of "if"s from your assumptions. When you're making a technical proposal, often you don't have enough time to investigate the actual implementation details. In such case, you're assuming like "Probably, this feature works like …" or "Probably, this feature and that feature are connected like …", which leaves some probability in your development plan, and if it turned out a wrong assumption, you may need to rethink the whole approach, even though you're at the middle of development cycle. PoC step derisks such a turnaround by cross-checking the technical proposal with domain/performance/security experts and UX/PM.

Here is how to work on PoC step:

Technically, if you've done a PoC step, there is no need to ask additional reviews in actual MRs as long as you don't change the feature behavior. You can simply focus on general engineering review or documentation review, only. For example, improving code quality, refactoring code, writing tests, writing documents, etc.

Here are the examples of PoC step. Example 1, Example 2

Issue template for a feature development

This is an issue template for feature development. It includes some important engineering tasks to be done in general.

<!-- The issue begins with "Problme to solve", "Intended users", "Proposal", etc.
     Read more https://gitlab.com/gitlab-org/gitlab/blob/master/.gitlab/issue_templates/Feature%20proposal.md -->

## Technical proposal

<!-- In this section, describe technical proposal for the problem to solve.
     It should give enough contexts to be able to be reviewed by domain/performance/security experts. -->

## Feature Flag

This feature is implemented behind `feature-flag-name` feature flag and disabled by default.
Once we've confirmed the feature is deemed stable, we remove the feature flag in order to publish the feature as GA.
<!-- Read more [Feature flags in development of GitLab](https://docs.gitlab.com/ee/development/feature_flags/) -->

## Planned MRs

### Backend

- [ ] [MR-1 title](MR link if it already exists)
- [ ] [MR-2 title](MR link if it already exists)

### Frontend

- [ ] [MR-1 title](MR link if it already exists)
- [ ] [MR-2 title](MR link if it already exists)

### General

- [ ] [Write a feature spec to test frontend and backend change altogether](MR link if it already exists)
- [ ] [Remove the feature flag and update documentation](MR link if it already exists) # i.e. publish the feature

Issue template for feature evaluation (dogfooding, beta-tester program)

This is an issue template for feature evaluation. It includes some important engineering tasks to be done in general.

When you enable a feature via feature flag and expect a significant impact on user workflow or production load, you should create an issue with the following template to communicate better with the affected users or SRE.

## Summary

<!-- The reason of feature evaluation. -->

## Feature details

<!-- Describes the feature details and expected performance or usability impact -->

## Timeline

<!-- This section describes the timeline of the evaluation.
     Example:
     - 2019-10-12 01:00 UTC The second evaluation: We will enable the feature on yyy project for X days.
     - 2019-10-11 01:00 UTC We've disabled the feature on xxx project because ...
     - 2019-10-10 01:00 UTC The first evaluation: We've enabled the feature on yyy project for X days.
-->

## How to enable the feature

<!-- Describes how to enable the feature that anyone can execute -->

## How to disable the feature

<!-- Describes how to disable the feature that anyone can execute.
     Consider, in an emergency case, someone else might need to disable the feature instead of you. -->

## Beginning of evaluation

- [ ] Announce in Slack/CompanyCall (T-minus 1 day)
- [ ] Enable the feature

## End of evaluation

- [ ] Announce in Slack/CompanyCall
- [ ] Disable the feature

## Feedback/Metrics

<!-- This section should be filled after the end of evaluation.
     You can collect metrics from user feedback or looking at Grafana, Sentry, Kibana, etc -->

### The second evaluation

<!-- The result of the second evaluation. e.g. We didn't observe any problmes. -->

### The first evaluation

<!-- The result of the first evaluation. e.g. We've found a crucial problem thus we need to fix YYY issue before the second evaluation. -->

Async Status Updates

Since we are a remote company, we utilize a Slack plugin called Geekbot to coordinate various status updates. There are currently 3 status updates configured in Geekbot, one is weekly and two are daily:

Weekly Status Update

The Weekly Status Update is configured to run at noon on Fridays, and contains three questions:

  1. What progress was made on your deliverables this week? (MRs and demos are good for this)

    The goal with this question is to show off the work you did, even if it's only part of a feature. This could be a whole feature, a small part of a larger feature, an API to be used later, or even just a copy change.

  2. What do you plan to work on next week? (think about what you'll be able to merge by the end of the week)

    Think about what the next most important thing is to work on, and think about what part of that you can accomplish in one week. If your priorities aren't clear, talk to your manager.

  3. Who will you need help from to accomplish your plan for next week? (tag specific individuals so they know ahead of time)

    This helps to ensure that the others on the team know you'll need their help and will surface any issues earlier.

Daily Standup

The Daily Standup is configured to run each morning Monday through Thursday and posts to #g_release Slack channel. It has just one question:

  1. Is there anything you could use a hand with today, or any blockers?

    This check-in is optional and can be skipped if you don't need any help or don't have any blockers. Be sure to ask for help early, your team is always happy to lend a hand.

Daily Social

The optional Daily Social is configured to run each morning and posts to #g_cicd_social. It has just one question:

  1. What was something awesome, fun, or interesting that you did yesterday outside of work?

    This check-in is optional and can be skipped if you don't have anything to share.