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
Anastasia KhomchenkoAnastasia Khomchenko Frontend Engineer, 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
Kassio BorgesKassio Borges Staff Backend Engineer , Plan:Product Planning
Nicolas DularNicolas Dular Staff Backend Engineer, Plan:Product Planning
Backend EngineerBackend Engineer Backend Engineer
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
Nick BrandtNick Brandt Senior Product Designer, Plan:Product Planning
Natalia TepluhinaNatalia Tepluhina Principal Engineer, Plan
Ottilia WesterlundOttilia Westerlund Security Engineer, Fulfillment (Fulfillment Platform, Subscription Management), Security Risk Management (Security Policies, Threat Insights), Monitor (Observability), Plan (Product Planning), AI-powered (Duo Chat, Duo Workflow, 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.
    • [Product Planning]
  • 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

Beginning FY24, we have moved away from Ally.io and have been using GitLab to track OKRs. Please note that the links below are only accessible to GitLab team members.

Active Quarter OKRs

The current quarter (FY25-Q3) OKRs are visible here.

Previous Quarter OKRs

All the previous quarter OKRs are available here.

Work

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

Milestone Planning

The week after a release of current milestone, planning issue for next milestone is created by automation and is available here. Once the issue is created, Product Manager fills out initial information (i.e. broader theme for the milestone, product priorities, deliverable areas, etc.) within the issue description and refines the Milestone Planning board.

Once the milestone candidates are available, Engineering Kick Off Call is scheduled. This call happens once a month on the day after the release is cut for current milestone (i.e. every second Friday of the month). In this call, team members review the proposed list of candidates and slippage from previous milestone that they’re already assigned to, and the Milestone Planning board for issues labelled workflow::planning breakdown to identify any missing information, blocking dependencies, and ensuring if issues are indeed ready for development. If an issue in the list already has expert/DRI available, then they are required to update the issue to include additional information about what needs to be done, and possible hints around approach that an engineer can take while working on the issue. At the end of the meeting, following outcome is expected;

  • List of issues we want to work on in the milestone
  • DRIs for those issues who can update it with implementation details
    • Once issue is updated, workflow label is updated to workflow::ready for development
  • Team member bandwidth and availability for the milestone

Estimation Template

The following is a guiding mental framework for engineers to consider when contributing to estimates on issues.

### Refinement / Weighting

<!--
Ready for development means replying yes to the following questions:

- Is this issue sufficiently small enough? If not, break it into smaller issues
- Is it assigned to the correct domain (e.g. frontend, backend)? If not, break it into two issues for the respective domains
– Is the issue clear and easy to understand? If not, try asking further clarification questions and update the description once they are received

If more than 2 MRs are needed, consider adding a table like the following to the description (e.g. under `Implementation plan`).

| Description | MR |
|-|-|
|||

It will help track the status.
-->

- [ ] Ready for development
- [ ] Weight is assigned
- [ ] Number of MRs listed
- [ ] Needs testing considerations
- [ ] Needs documentation updates

**Reasoning:**

<!--
Add some initial thoughts on how you might break down this issue. A bulleted list is fine.

This will likely require the code changes similar to the following:

- replace the hex driver with a sonic screwdriver
- rewrite backups to magnetic tape
- send up semaphore flags to warn others

Links to previous examples. Discussions on prior art. Notice examples of the simplicity/complexity in the proposed designs.
-->

Capacity Planning

Estimating effort

When estimating the effort involved in upcoming work, we use the same approach and numerical scale as other groups in the Plan stage.

When weighting an issue for a milestone, we use a lightweight, relative estimation approach, recognizing that tasks often take longer than you think. These weights are primarily used for capacity planning, ensuring that the total estimated effort aligns with each group’s capacity for a milestone.

Key Principles
  • Relative Estimation: We focus on the relative complexity and effort required for each issue rather than precise time estimates.
  • Aggregate Focus: The sum of all issue weights should be reasonable for the milestone, even if individual issues vary in actual time taken.
  • Flexibility: It’s acceptable for an issue to take more or less time than its weight suggests. Variations are expected due to differences in individual expertise and familiarity with the work.
Weight Definitions
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

Initial Planning: During milestone planning, tasks can be estimated up to a weight of 5 if necessary. However, as the milestone approaches and the team moves closer to starting implementation, any task with a weight larger than 3 should be decomposed into smaller, more manageable issues or tasks with lower weights.

Why This Approach: Allowing larger weights early on provides flexibility in high-level planning. Breaking down tasks closer to implementation ensures better clarity, reduces risk, and facilitates more accurate tracking and execution.

We assess the available capacity for a milestone by reviewing recent milestones and upcoming team availability. This ensures that our milestone planning remains realistic and achievable based on the collective effort estimated through these weights.

Weighing bugs

Estimating bugs is inherently difficult. The majority of the effort in fixing bugs is finding the cause, and then a bug can 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), 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.

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.

Definition of Ready

During the planning and breakdown process we usually need to make issues and tasks that outline the technical work required.

A Definition of Ready is an agreed set of guidelines for ensuring an issue or task is ready to be picked up and worked on. Its job is to provide a reference that we can use when deciding whether we can add the ‘ready for development’ workflow label and expect somebody to be able to complete the work.

To determine whether an issue or task is suitable to be deemed ready for development, consider the following Definition of Ready.

  1. The work is described in sufficient detail. A reader without previous context or assumed knowledge is able to understand what work is to be undertaken. What we’re doing and why we’re doing it is described.
  2. Acceptance Criteria or Requirements are clearly defined. This should help the assignee understand the scope of the work and verify the intended happy/sad paths are functional and tested.
    • Including the relevant license level and feature flags in the Acceptance Criteria or Requirements is also advised.
  3. Other work that blocks or is blocked by the work is linked with the correct relationship.
  4. Relevant resources such as designs, documents, and external links are attached.
  5. Cross-functional dependencies are described; such as needing to ask for Technical Writing assistance.
  6. Documentation that needs to be updated or added is linked.
  7. In case of feature development, a weight has been added and confirmed with at least one other engineer (preferably a domain expert).
    • In case an item is weighed as 4 or above, domain expert can provide guidance on breaking down this issue into separate issues (or tasks).

During the process of populating an Issue or Task for engineering work, we will probably need to ask questions for extra clarity or to help prevent us from making assumptions. We may also feel we don’t have enough information to be able to properly break down work into suitably sized chunks. Consider a spike where the path forward is not clear.

Why?

During the planning/breakdown process, it’s important that we keep in mind a couple of things:

  1. The author of the issue/task may not be the person to work on it
  2. We might not start working on the issue/task right away

Our Definition of Ready should help ensure that our work is defined well enough that the two points above are not problems.

Due to our async nature and distributed team, treating a Definition of Ready as a hard quality gate could have a negative effect on productivity. Because of this, the Definition of Ready should be used as a guide rather than as rules and we shouldn’t prevent work from being picked up if an issue/task doesn’t adhere to the Definition of Ready perfectly.

Issues and tasks are mutable — we can always go back and change plans, add missing context, document decisions made during development, etc.

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).
Last modified November 14, 2024: Fix broken external links (ac0e3d5e)