Plan:Product Planning Engineering Team

Plan:Product Planning team

The Plan:Product Planning team works on both the backend and frontend parts of GitLab’s Product Planning category in the Plan stage.

For more details about the vision for this area of the product, see the Plan stage page.

Team members

Name Role
Kushal PandyaKushal Pandya Fullstack Engineering Manager, Plan:Product Planning
Abhilash  KotteAbhilash Kotte Senior Fullstack Engineer, Plan:Product Planning
Eugenia GrieffEugenia Grieff Senior Backend Engineer, Plan:Product Planning
Florie GuibertFlorie Guibert Senior Frontend Engineer, Plan:Product Planning
Jack ChapmanJack Chapman Frontend Engineer, Plan:Product Planning
Joseph JoshuaJoseph Joshua Senior Backend Engineer, Plan:Product Planning
Nicolas DularNicolas Dular Staff Backend Engineer, Plan:Product Planning
Rajan MistryRajan Mistry Frontend Engineer, Plan:Product Planning

Stable counterparts

Name Role
Costel MaximCostel Maxim Senior Security Engineer, Application Security, Plan (Project Management, Product Planning, Certify), Create:Source Code, Growth, Fulfillment:Purchase, Fulfillment:Provision, Fulfillment:Utilization, Systems:Gitaly
Melissa UshakovMelissa Ushakov Group Manager, Product Management, Plan
John HopeJohn Hope Senior Manager, Engineering, Plan
Natalia TepluhinaNatalia Tepluhina Principal Engineer, Plan
Ottilia WesterlundOttilia Westerlund Security Engineer, Fulfillment (Fulfillment Platform, Subscription Management), Govern (Security Policies, Threat Insights), Monitor (Observability), Plan (Product Planning), AI-powered (Duo Chat, AI Framework, AI model validation, Custom models)
Matthew MacfarlaneMatthew Macfarlane Product Manager, Plan Stage, Knowledge Group

Hiring chart

Check out our jobs page for current openings.

Team metrics dashboard

We have a metrics dashboard intended to track against some of the Development Department KPIs, particularly those around merge request creation and acceptance. From that dashboard, the following chart shows MR Rate. Please reference the dashboard section below.

Application performance dashboard

We have useful dashboards tracking the performance of parts of the application we’re responsible for:

  • Application dashboards; showing request throughput, latency, SQL query counts, cache hits, Sidekiq jobs for Web and API endpoints, git usage and error budgets. Also links to other useful resources in Kibana.
  • The Sitespeed Dashboard; showing the results of ongoing synthetic tests against representative product pages. Useful for identifying changes in page load time (TTFB), LCP, etc.

OKRs

Active Quarter OKRs

As we migrate to using GitLab to track OKRs, the active quarter (FY24-Q1) OKRs will be visible here and Key Results here.

Previous Quarter OKRs

FY23-Q4 OKRs were conducted in Ally.io and are no-longer available.

Work

See the Plan stage page and the Plan:Project Management backend team page.

Capacity Planning

We use a lightweight system of issue weighting to help with capacity planning, with the knowledge that things take longer than you think. These weights are used for capacity planning and the main focus is on making sure the overall sum of the weights is reasonable.

It’s OK if an issue takes longer than the weight indicates. The weights are intended to be used in aggregate, and what takes one person a day might take another person a week, depending on their level of background knowledge about the issue. That’s explicitly OK and expected.

These weights we use are:

Weight Meaning
1 Trivial, does not need any testing
2 Small, needs some testing but nothing involved
3 Medium, will take some time and collaboration
4 Substantial, will take significant time and collaboration to finish
5 Large, will take a major portion of the milestone to finish

Anything larger than 5 should be broken down if possible.

We look at recent releases and upcoming availability to determine the weight available for a release.

Weighing bugs

Estimating bugs is inherently difficult. The majority of the effort in fixing bugs is finding the cause, and then a bug be accurately estimated. Additionally, velocity is used to measure the amount of new product output, and bug fixes are typically fixes on a feature that has been tracked and had a weight attached to it previously.

Because of this, we do not weigh bugs during ~“workflow::planning breakdown”. If an engineer picks up a bug and determines that there will be a significant level of effort in fixing it (for example, a large migration is needed, or we need to switch state management to Vuex on the frontend), we then will want to prioritize it against feature deliverables. Ping the product manager with this information so they can determine when the work should be scheduled.

Consider a Spike and/or a Design Document

Work that arrives in ~“workflow::ready for development” that is out of scope or ill-defined should be returned to ~“workflow::planning breakdown” for further refinement. To avoid the disruption this introduces we try to reduce the number of times it happens by planning more carefully. While it’s not always possible, we aim to identify complexity before the build phase, such as by assigning an engineering DRI during the design and validation phase.

However, sometimes complexity can’t be accurately estimated until development work starts. If you anticipate this during planning, consider creating a spike to produce a design document. Notify the participants in the issue, especially the PM, that a spike is required, create a separate issue and follow these steps:

  1. Title the issue with the goal of the spike;
  2. Add the ~spike, ~backend, and corresponding stage/group labels;
  3. List the unknowns and questions to be answered;
  4. List decisions, architectural or otherwise, that need to be made;
  5. Identify specializations required to complete the spike (e.g. Backend, Frontend and UX) assign a DRI from each;
  6. Mark the issue as blocking the original, and
  7. Label with ~“workflow::ready for development” and assign to the current milestone.

The deliverable is a design document that answers the questions set out in the issue description. This can simply be the issue itself, containing a summary of the discussion in the description, answers to the questions and links to any PoC MRs produced.

Historical Capacity

Points of weight delivered by the team in previous milestones, including a 3-month rolling average, are available in this chart. This allows for more accurate estimation of what we can deliver in future milestones.

Collaborating to Improve Velocity

As a team we often work on features that require close collaboration. We’ve identified a list of techniques and characteristics that help projects like this proceed at a pace that is sustainable, predictable, and challenging, yet rewarding. An example of such feature was Epic Linking.

  1. Feature is designed and broken down in advance of milestone start, including a spike if appropriate.
  2. Participants in the spike take part in delivery of the feature.
  3. Prior to closing the description is updated with Acceptance Criteria, with sign-off by each assignee + PM. This is what will be delivered.
  4. For efforts that are part of larger initiatives (like Work Items), architectural documents are kept up to date with larger decisions; for example, around API design or functionality.
  5. Requirements are well-defined with a goal that is achievable within a single milestone and provides business value. For larger features, work may be spread out over several milestones.
  6. Items that must be delivered in separate milestones are identified and prioritized first; such as migrations, security issues, and other multi-version compatibility issues.
  7. The stable counterpart from documentation is included at the start of the spike.
  8. Reviews are kept inside the team where possible to ensure domain expertise, capacity and a low level of context switching.
  9. EM and PM work to remove or limit unneccessary/distracting work.
  10. Feature is set as primary deliverable.
  11. Due dates defined well in advance.
  12. DRIs assigned to every upcoming and in-progress piece of work.
  13. Use of Slack and synchronous communication to capture regular updates.
  14. If team members have PTO during the milestone, make a plan to hand over work in progress to another team member.

Collaborating across disciplines

Workflow Labels

Most issues, especially features, involve working with other disciplines. A single issue will often be shared between frontend and backend and it can be difficult to know which workflow label should be applied, especially when progress is at different stages.

To ensure visibility for other team-members, for issues with a frontend and backend component:

  • Assign yourself as early as possible if you have capacity to work on it;
  • When both frontend and backend DRIs are assigned, consider hosting a small kickoff discussion.
  • When the backend work is merged and verified add the ~“backend complete” label.

We value velocity over predictability so use your own judgement on whether you should wait for your counterpart to get involved before proceeding with development.

Using the ~“backend complete” label

The ~“backend complete” label is added to issues with multiple specializations (usually backend and frontend) to indicate that the backend component is complete. Backend engineers should add this label when the backend work is functionally complete, merged and verified but frontend, or other, work is ongoing.

Health Status

To help with visibility of whether or not an issue can be delivered in a milestone, the team uses health status to communicate quickly. At the beginning of a milestone, all issues relating to the primary deliverable are assigned the “On track” status. Throughout the milestone, feature DRIs are responsible for updating issues statuses when necessary. If the health status is set to a status that is not “On Track”, feature DRIs should leave a comment with additional details about why and if there’s a way others on the team can help. Using health status allows stakeholders, such as product and engineering managers, designers, and other engineers, to get a quick and easy overview of what is unlikely to make it into the current milestone.

Documentation

Documentation should accompany code for any new or changed functionality as per our definition of done. This can become tricky when collaborating on a feature that is behind a feature flag.

Since all feature flags start as disabled by default, we should aim to document the feature as soon as it’s safe for testing by users using the feature flag template. Don’t wait until a feature is performant and stable to document it, instead do so once it’s secure and won’t leave data in a corrupt, interim state.

Try to include docs with the first MR to introduce usable functionality. If this is an API addition with no UI, document that and allow the FE engineers to update it as work proceeds. As the feature flag rollout proceeds, the documentation should be updated.

This avoids the rush to provide documentation that often accompanies the release cutoff.

Dashboards

Detailed metrics are available on the Engineering Metrics page.

Product Planning is part of a test of new MR sub-type labels which are designed to make it easier to understand which top-level type should be applied. You can read more about them in the Work Type Classification section of the metrics page.

Note: MR Type may differ from issue type. For example, a ~“maintenance::dependency” change that supports a new ~“feature::enhancement”.

Picking something to work on

The team Build Board always shows work in the current release, with workflow columns relevant to implementation. Filtering it by ~backend shows issues for backend engineers to work on.

It’s OK to not take the top item if you are not confident you can solve it, but please post in #s_plan if that’s the case, as this probably means the issue should be better specified.

Direction Items

Items that are customer-facing deliverables and high impact are labeled with ~“direction”. We strive to have these items in production by two days before the release cut-off to give ample time for validation.

High Severity Issues

When an issue comes through that is both ~“severity::1” and ~“priority::1”, our SLO requires that it be looked at right away. Other items being worked on should be postponed in favor of any investigations or work for the high severity/priority issue. When postponing an issue, engineers should leave a comment on the issue with a link to the high severity item that is being prioritized instead. Leaving a comment will help with communication with the cross-functional team and for historical tracking. The exception to this is if another ~“severity::1”/~“priority::1” issue is currently being worked on by an engineer. If this is the case, the engineer should make others on the team aware of the new issue on Slack but then keep working on the initial issue.

Working on unscheduled issues

Everyone at GitLab has the freedom to manage their work as they see fit, because we measure results, not hours. Part of this is the opportunity to work on items that aren’t scheduled as part of the regular monthly release. This is mostly a reiteration of items elsewhere in the handbook, and it is here to make those explicit:

  1. We expect people to be managers of one, and we use GitLab ourselves. If you see something that you think is important, you can request for it to be scheduled, or you can work on a proposal yourself, as long as you keep your other tasks in mind.
  2. From time to time, there are events that GitLab team-members can participate in, like the issue bash. Anyone is welcome to participate in these.
  3. If you feel like you want to have some specific time set aside, but aren’t interested in the topics of an existing event, feel free to label issues with “For Scheduling” and copy your manager for visibility.

When you pick something to work on, please:

  1. Follow the standard workflow and assign it to yourself.
  2. Share it in #s_plan - if not even more widely (like in #development or #backend).