Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Install a process for managing team changes #90

Closed
13 tasks done
Tracked by #64
chadwhitacre opened this issue Jan 23, 2023 · 33 comments
Closed
13 tasks done
Tracked by #64

Install a process for managing team changes #90

chadwhitacre opened this issue Jan 23, 2023 · 33 comments
Assignees

Comments

@chadwhitacre
Copy link
Member

chadwhitacre commented Jan 23, 2023

We are at a size where we need more process discipline around EPD team changes. There are a number of stakeholders for this, including EMs/PMs, IT/Security, Ops, DevInfra, OSPO, and GTM teams. Product is the main lens to use here, and the fundamental question we need to be able to answer is, "Who owns this?" Given a part of our product that I have a question about, who do I talk to? Where does the buck stop? This question is not easy to answer today.


chaos


Today, we have a number of systems with a concept of teams—Google Directory, Okta, Namely, GitHub, GCP, 1password—with unclear data flows between them. We also have a number of documentation pages, none of which is systematically kept up to date.

Brainstorm

The sketch of a solution is:

  1. Google Directory is our source of truth.
  2. Managers are responsible for maintaining their immediate teams.
  3. We propagate to other systems and documentation resources automatically where possible.
  4. We document and monitor our manual processes for propagating updates where we don't have automations.

The outputs of this epic are:

  • Alignment with EPD and GTM leadership teams on a process for maintaining EPD teams and product mappings, documented in Notion.
  • A big one-time cleanup.
  • Probably some automations.

To Do

┆Issue is synchronized with this Jira Epic by Unito

@chadwhitacre chadwhitacre mentioned this issue Jan 23, 2023
36 tasks
@chadwhitacre
Copy link
Member Author

Ingest has a bunch of items they want to hand off, but there's no-one clear to hand off to. Do we need a Team: Undefined for this case? Who would review it when?

@chadwhitacre chadwhitacre self-assigned this Feb 3, 2023
@chadwhitacre
Copy link
Member Author

I think the way to do this is to try to draft a Notion doc capturing all of the existing systems and processes, use that to drive clarification where missing and then prioritize cleanups and automations.

@chadwhitacre
Copy link
Member Author

I've asked🔒 for elevated Google perms to support my work on this project.

@chadwhitacre
Copy link
Member Author

After starting to noodle on this under #90 I think I'm going to have to limit focus to product teams (vs. all teams across Sentry), and also maybe break this up based on what questions we're trying to be able to answer. The main one for me personally is for routing "Given feedback from a user, what team should it be routed to?"

@chadwhitacre
Copy link
Member Author

chadwhitacre commented Feb 13, 2023

We've got a parallel initiative to clean up RBAC for GCP🔒. Architecture sketch is: security-as-code repo ⇒ Google Directory ⇒ GCP. Question is where "⇒ GitHub" could fit into that, from repo or from Google Directory. Either way, consider Terraform? 🤔

@chadwhitacre
Copy link
Member Author

Met w/ crew ...

  1. In scope for me is managing propagation from GG to GitHub teams.
  2. Aiming to use the eng-pipes codebase but run a separate instance for security reasons (high privilege to do user/group changes).
  3. Expectation is that we can listen for GG events and take action in GitHub.

@chadwhitacre
Copy link
Member Author

EPD announced a re-org yesterday. Trying to wrap my head around:

  1. Changes in EPD for FY24🔒 (email to epd-leadership)
  2. EPD FY'24 H1🔒 (lucidchart org chart)
  3. How this relates to Namely🔒.

@chadwhitacre
Copy link
Member Author

I talked to Vlad about the recent reorg, his process is to design in Lucidchart and then delegate to his reports to make updates in Namely and wherever else.

@chadwhitacre
Copy link
Member Author

chadwhitacre commented Feb 28, 2023

I also sent a big email about product vision🔒, I've been getting caught up thinking about that because team structure is related to product structure. Mostly just needed to get that off my chest, for this project I need to focus on implementing systems to codify the teams defined by others, vs. caring about what the team structure actually is.

@chadwhitacre
Copy link
Member Author

I've published the Notion page🔒 (had to shuffle some things around to make a good place for it).

I've started reaching out to Vlad's reports to understand the next level of detail in how information flows.

@chadwhitacre
Copy link
Member Author

Bottom line seems to be:

  • EMs/DEs make decisions and drive changes.
  • POPS and IT implement changes.

@chadwhitacre
Copy link
Member Author

Next step: meet with POps! This Jira intake🔒 is the contact point.

@chadwhitacre
Copy link
Member Author

Big deal. Need to organize comms around this, people care about it.

@chadwhitacre
Copy link
Member Author

Look through audit log to understand GH team usage.

@chadwhitacre
Copy link
Member Author

chadwhitacre commented Mar 14, 2023

Put product vision rant in a doc🔒 as well.

@chadwhitacre
Copy link
Member Author

From an internal Slack thread:

We need a clear definition of the structure of our product ~= our code. Then we need a mapping of teams to the parts of our product/code. It should be an intentional decision for there to be gaps in coverage, with some backstop process for occasionally reviewing otherwise-unowned backlog.

@chadwhitacre
Copy link
Member Author

No company is ever resourced to where there is an owner for every line of code or feature. We gotta decide what’s most important all the time. If a feature ever comes up that someone wants to fight for sentry is an open door

@BYK
Copy link
Member

BYK commented Mar 15, 2023

No company is ever resourced to where there is an owner for every line of code or feature.

I think this is a bit of a hyperbole but prioritization is very important, that's for sure. You'd still need a contact team/person for potentially every single line. Think about when your product has a security vulnerability.

@chadwhitacre
Copy link
Member Author

Internal debate raging. 🐭

@BYK
Copy link
Member

BYK commented Mar 15, 2023

🍿

@chadwhitacre
Copy link
Member Author

I had a meeting with HR and IT.

IT states that "100% should be the HR system that is the system of record / source of truth." Our HR system is Namely. Apparently it's not clean enough to fulfill it's destiny, however. 🤔

@chadwhitacre
Copy link
Member Author

chadwhitacre commented Mar 23, 2023

Alright, what's going on here?

There's two outcomes I need:

  • solve routing
  • solve GH team creation

They can be linked but don't necessarily have to be.

Link dump of tabs I've got open on this, historical + current attempts:

@chadwhitacre
Copy link
Member Author

Current thinking is to have a structure of product owners that covers the whole product surface from an outside-in perspective, slightly separate from the org chart for EPD teams working on strategic product investments (inside-out).

@BYK
Copy link
Member

BYK commented Mar 24, 2023

Why can this not be in a repo like the publish repo, where each team change is a PR updating the configuration.

Once approved and merged, a GitHub action syncs it to other services.

@chadwhitacre
Copy link
Member Author

I'd love to integrate it somehow with the code for the left nav itself. 😁

@BYK
Copy link
Member

BYK commented Mar 24, 2023

If it's a static yaml file, you can do a build-time include? I think this is already done for Swagger API definitions or something?

@BYK
Copy link
Member

BYK commented Mar 24, 2023

@chadwhitacre
Copy link
Member Author

Hey who wrote that? 😏

@chadwhitacre
Copy link
Member Author

chadwhitacre commented Mar 31, 2023

Here's my current thinking:

  1. Generate a comprehensive set of product areas, as seen from the user's point of view. Start with the left nav, but also review our open tickets to pick up any additional areas. The goal is to be able to associate every ticket with exactly one product area.
  2. Add a required dropdown field to the issue template with all of the product areas. This eliminates routing entirely from our process (even better than Route with AI #123), possibly frees up Support to do L1 triage.
  3. Create Product Area: Foo labels for each product area. Eventually I'd like to explore using Projects for this instead of or in addition to labels, but one step at a time.
  4. Update eng-pipes to work with Product Area: * instead of Team: *. Map labels directly to Slack channels so we don't have to deal with GH teams. Possibly start a UI for eng-pipes to easily see what areas are mapped to which Slack channels. If any areas have no slack channel associated, consider hard-closing them as wont-fix.
  5. Add an OSPO chore to review and update product areas monthly.

@chadwhitacre
Copy link
Member Author

Okay, I've got buy-in on switching from Team labels to Product Area labels. 👍

I'm tempted to use Projects instead of Labels for this, but a) I'm not sure that's actually the best solution (labels are more visible on the issue detail), and b) that's probably a lot more work in eng-pipes.

@chadwhitacre
Copy link
Member Author

How should I think about GitHub Teams here? I'm pretty sure I want to use teams to encode the owners for each product area. How about this teams structure:

  • Product Owners > individual product areas
  • Code Owners > only subteams of this in CODEOWNERS
  • Eng - review perms, why do we need other teams in GitHub? Can we get away with a single Eng team that has access to everything?

@chadwhitacre
Copy link
Member Author

I made a proof of concept for manipulating a Project V2 programmatically from eng-pipes. This is a standalone script that updates metadata fields in a project based on properties of an issue, number of comments in this case.

demo.mov

Next step is to wire this into eng-pipes to fire on issue changes. (GitHub doesn't provide an event when reactions change, but we can approximate for now by updating on adjacent events such as commenting, and maybe someday we can poll.) That will get the ball rolling, and even then there will be value in adding issues to 76 (this board number is going to be A Thing™️, I can already feel it).

From there we can build out automations to use the status field on that board to drive our responsiveness goals. I've reached out to the Crons crew to be our guinea pigs. Once we build it out it will be simple to retire the label-based system, since the two will operate essentially independently.

flow

The workflow will be approximately:

  1. Add all new issues from non-engineers to this board with no product area, assigned to Support.
  2. Add all issues where a non-engineer comments to this board, probably also assigned to Support for routing.
  3. Routing means assigning a product area on the board.
  4. Set due dates automatically on the board.
  5. Probably also still comment on the issue as well.

So basically port over the existing to here. Advantages of a project vs. issues/labels are:

  1. Projects are decoupled from repos. We can have a single process that spans all repos we care about.
  2. Projects are decoupled from each other. Product teams can have their own boards with their own metadata and workflows, without any of that showing up here, or vice versa.

I am also leaning towards trying to get away without using GitHub Teams here. Let's just use the Slack notifications instead of Team mentions.

@chadwhitacre
Copy link
Member Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants