For an understanding of what this team is going to be working on take a look at the product vision.
The Release:Progressive Delivery is focused on all the functionality with respect to Continuous Delivery and Release Automation.
This team maps to Release devops stage.
The following people are permanent members of the Release Team:
|Chase Southard||Engineering Manager, Release:Progressive Delivery|
|Shinya Maeda||Senior Backend Engineer, Release:Progressive Delivery|
|Jason Goodman||Backend Engineer, Release:Progressive Delivery|
|Etienne Baqué||Backend Engineer, Release:Progressive Delivery|
|Amy Troschinetz||Senior Backend Engineer, Release:Progressive Delivery|
|Nicole Williams||Frontend Engineering Manager, Release (CD)|
|Andrew Fontaine||Frontend Engineer, Release:Progressive Delivery|
|Sarah Groff Hennigh-Palermo||Senior Frontend Engineer, Release:Progressive Delivery|
The following members of other functional teams are our stable counterparts:
|Marcia Ramos||Senior Technical Writer, Create, Release|
|Rayana Verissimo||Senior Product Designer, Release:Release Management|
|Mike Nichols||Product Designer, Release:Progressive Delivery|
|Nadia Udalova||UX Manager, Release and Verify|
|John Hampton (Interim)||Engineering Manager, Release:Release Management|
|Krasimir Angelov||Backend Engineer, Release:Release Management|
|Sean Carroll||Senior Backend Engineer, Release:Release Management|
|Vladimir Shushlin||Backend Engineer, Release:Release Management|
|Jaime Martínez||Backend Engineer, Release:Release Management|
|Orit Golowinski||Senior Product Manager, Release:Progressive Delivery|
|Jackie Meshell||Senior Product Manager, Release:Release Management|
|Lorie Whitaker||Senior UX Researcher, Release and Verify|
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.
Our planning and build process is detailed on our planning page.
Issues that contribute to the release stage of the devops toolchain have the
~"group::Progressive Delivery" labels.
The team's primary Slack channel is
#g_progressive-delivery, 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:
We use the Progressively Delivery Planning Board to organize and plan upcoming features. This board details the various stages an issue can exist in as it is being readied for development. 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::scheduling labels are used to feed the next board where EM and PM connect on scheduling upcoming issues.
We use the Progressive Delivery Scheduling Board as a checkpoint to ensure that we have a well-formed issues prior to being ready for development.
~workflow::ready for development will automatically remove the
~workflow::scheduling label. The following Build Board contains columns for each of the workflow labels beginning with the
Ready for Development. The intention here is that this is the only place that developers should update issues with the relevant workflow status.
We use the Progressive Delivery Build board to track features as they make their way from idea to production. Here, issues move more or less linearly from Ready for Development thru to Verification, but on occassion they have to return to Ready for Development as priorities shift.
Issues if over a weight of 1, will have multiple MRs. Each of these associated MRs will likely be in a different stage of development. It's important to update the issues on the build board with the lastest, most relevant state. Example, if an issue has three MRs with one in review, another in development, and one ready for development, then the we should place that issue is in
In Dev as this is where the most activity for this issue is happening - it's the most relevant signal to the rest of the team. Because we have a one-to-many relationship between our issues and MRs, activity on the board will appear slow. Async daily standups and weekly sync meetings outlined below help with any ambiguity that this system introduces.
Below is a description of each stage, its meaning, and any requirements for that stage.
workflow::ready for development
UX Readylabel, as well as either
backendor both labels to indicate which areas will need focus.
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:
workflow::ready for development.
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.
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.
This is an issue template for feature development. It includes some important engineering tasks to be done in general.
``` ## Technical proposal ## 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. ## 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 ```
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 ## Feature details ## Timeline ## How to enable the feature ## How to disable the feature ## 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 ### The second evaluation ### The first evaluation ```
Code reviews follow the standard process of using the reviewer roulette to choose a reviewer and a maintainer. The roulette is optional, so if a merge request contains changes that someone outside our group may not fully understand in depth, it is encouraged that a member of the Release team be chosen for the preliminary review to focus on correctly solving the problem. The intent is to leave this choice to the discretion of the engineer but raise the idea that fellow Release team members will sometimes be best able to understand the implications of the features we are implementing. The maintainer review will then be more focused on quality and code standards.
This tactic also creates an environment to ask for early review on a WIP merge request where the solution might be better refined through collaboration and also allows us to share knowledge across the team.
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:
The Weekly Status Update is configured to run at noon on Fridays, and contains three questions:
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.
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.
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.
The Daily Standup is configured to run each morning Monday through Thursday and posts to
#g_release Slack channel. It has just one question:
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.
The optional Daily Social is configured to run each morning and posts to #g_cicd_social. It has just one question:
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.