Feature ownership
Contents
Each feature at PostHog has an Engineering owner. This owner is responsible for maintaining the feature (keep the lights on), championing any efforts to improve it (e.g. by bringing up improvements in sprint planning), planning launches for new parts of it, and making sure it is well documented.
For shared developer tooling and infrastructure that cuts across product teams (CI, local dev, builds, migrations, etc.), see the Developer Experience page.
When a bug or feature request comes in, we tag it with the relevant label (see labels below). The owner is responsible for then prioritizing any bug/request that comes in for each feature. This does not mean working on every bug/request, an owner can make the deliberate decision that working on something is not the best thing to work on, but every request should be looked at.
Who can contribute to owned features?
Feature ownership does not mean that the owner is the only person/team who can contribute to the feature. If another team requires something from an existing feature that isn't supported, that non-owning team builds it. How you start depends on the size of the change (see PR or context?). The owner team is responsible for reviewing PRs to make sure the code patterns and UX makes sense for the feature overall. After the change is merged, the owner team then owns it (assuming no major bugs from the initial implementation).
For example, web analytics wanted a heatmap insight type to see what times of day people were active.
Javier Bahamondes
Javier Bahamondes from web analytics opened up the necessary PRs to build this feature. It was reviewed by the Product Analytics Team
Product Analytics Team, owner of all insight types, who then took responsibility for it after it was merged.
This process does four things:
- It prevents people feeling like they need to wait on another team to build out necessary functionality for them
- It ensures that features built by another team get proper review, because reviewers know they will have to own it eventually.
- It makes sure no feature is left "orphaned" with no real owner.
- It embraces our value of Why not now?.
PR or context?
"Context" means a Slack message or issue to the owning team that explains the problem and why it matters, without code.
| Change | Suggested path |
|---|---|
| Typo or small bug | Open a PR, then tell the owning team. |
| Small improvement (one screen, no new behavior) | Open a PR, then tell the owning team. If you don't know that code well, check with them first. |
| New feature, or a change in how something works | Give the owning team context first. Once they agree on the approach, you build it. A draft PR can come with the context, and they are free to close it. |
The bigger the change, the more it shapes the owning team's direction, and they maintain it after it merges, so they get a say before the code exists.
Not sure which row fits your change? If all else fails, ask the owning team. Not sure who owns it? See Fuzzy ownership.
If you open the PR, you own it
The owning team maintains your code after it merges, so they review it as their own. Generating a PR takes minutes, so the PR itself isn't the work. Before you ask the owning team for a review, understand the change well enough to explain it and its tradeoffs without the diff open. "I pointed an agent at this" is not a description. Then follow Before requesting a review.
What the owning team does
- Say what you prefer. If a PR doesn't meet your bar, or you'd rather get an issue than a PR, tell the author.
- Close an outside PR that conflicts with your team's direction, and say why. The author then gives you context instead.
- Write your preferences down where agents read them. Many outside PRs start with an agent, so put your conventions, your bar, and when you'd rather get an issue in an
AGENTS.mdfile next to the code you own. For an example, see the Issue or PR? section of the posthog.comAGENTS.md.
Expect that the owning team may close your PR and build the change their own way. That's a normal outcome, not a judgment of your work.
If you don't usually write code
The same tiers and the same ownership bar apply to you. If you aren't sure how the code you're changing works, ask the owning team before you open the PR, not after.
Feature list
You can also view the list directly in GitHub and filter issues there.
| Feature | Owner | Label |
|---|---|---|
| Actions | ||
| Activity log | ||
| Activity view | ||
| Agent proxy | ||
| Agent runtime | ||
| Agentic provisioning | ||
| AI gateway | ||
| AI playground | ||
| AI plugin (Claude Code, Codex, Cursor, Gemini CLI) | ||
| Alerts | ||
| Annotations | ||
| API structure | Shared responsibility, with features owned by the relevant small team. | |
| Authentication | ||
| Autocapture | ||
| Base currency | ||
| Batch exports | batch-exports | |
| Billing | ||
| Cache warming | ||
| Canvases | ||
| CLI | Error tracking owns the symbolication/upload pipeline and symbol/sourcemap upload internals. | |
| Client libraries | See SDKs | |
| Cloud agents | ||
| Cohorts | ||
| Command palette | ||
| Comments/Discussions | ||
| CSP tracking | ||
| Currency rate dataset | ||
| Customer Analytics | ||
| Dashboard templates | ||
| Dashboards | ||
| Data colors & themes | ||
| Data management | Owns Actions, Event definitons, Property definitions | |
| Data models | Views, materialized views, orchestration, and lineage. | |
| Data pipelines | ||
| Data quality checks | ||
| Data table | ||
| Data visualization | ||
| Early access features | ||
| Embedding worker | Oliver Browne is the point owner. | |
| Endpoints | ||
| Error tracking | ||
| Experiments | ||
| Feature flags | ||
| GitHub integration | ||
| Group analytics | ||
| Health alerts | ||
| Heatmaps | ||
| Hog harness | ||
| HogQL | ||
| Inbox | ||
| Ingestion | ||
| Insights | ||
| Integrations | ||
| Internal messaging (email, notifications) | ||
| Live events | ||
| Loops | ||
| Managed migrations | ||
| Marketing analytics | ||
| MCP analytics | ||
| MCP server | ||
| MCP store | ||
| Notebooks | ||
| OAuth | Growth owns all of the OAuth Applications + marketplace integrations around it. Platform features owns the concept of authentication. | |
| Onboarding | ||
| Organization Management & Deletion | ||
| Path cleaning | ||
| Permissions and access control | ||
| Persons | ||
| Persons view | ||
| Pipeline destinations | ||
| Pipeline sources | ||
| Pipeline transformations | ||
| Platform (US + EU) | ||
| Platform add-ons | Boost, Scale, and Enterprise, including their adoption and growth | |
| PostHog AI platform | ||
| PostHog Desktop | ||
| PostHog.com | Website owns conversion from PostHog.com visits to the signup page. Growth can make suggestions and requests here, and those get more weight than requests from other teams. | |
| Project homepage | ||
| Project secret API keys | Jovan Sakovic is the point owner. | |
| Property filters | ||
| Queries as a Service | ||
| Query performance | ||
| Quota limiting | ||
| Realtime cohort calculations | ||
| Replay | ||
| Revenue analytics | ||
| Revenue data management | ||
| Reverse proxy | ||
| Scouts | ||
| SDKs & client libraries | Shared responsibility, with features owned by the relevant small team, or try #support-client-libraries. There is an engineer assigned to SDK support on a rotating schedule. Check the incident.io schedule. | |
| Search | ||
| Security | It's every team's job to consider and react to security issues. | |
| Self-hosting | ||
| Semantic layer and data catalog | ||
| Sentry integration | ||
| Session analytics | ||
| Session explorer | ||
| Session summaries | ||
| Settings structure (personal & project) | All teams manage their own settings | |
| Signup | Growth owns everything from the moment someone lands on the signup page, plus every path to signup from any surface other than PostHog.com (for example partner integrations and agents). Website owns conversion from PostHog.com visits to the signup page. | |
| Skills store | ||
| Slack app | ||
| Source maps | ||
| SQL editor | ||
| SQL insights | ||
| SSO | ||
| Statistical analysis | ||
| Subscriptions | ||
| Support | ||
| Surveys | ||
| Table exports | ||
| Tasks | ||
| Taxonomic filters | ||
| Terraform integration | ||
| Toolbar | ||
| Usage reports | ||
| Variables | ||
| VS Code extension | ||
| Warehouse | managed-warehouse | |
| Warehouse properties | Syncs tables and materialized views to person or group properties. | |
| Web analytics | ||
| Webhook delivery service | ||
| Weekly digest | ||
| Wizard | Wizard and docs owns the wizard platform, agent library, and TUI wizard. Product teams own the programs for their products. See who owns what. | |
| Wizard (app handoffs) | Moving a task between the wizard and the PostHog app, so users can start in one and finish in the other. For example, the wizard finds a data warehouse source and the user finishes creating it in the app. | |
| Wizard (cloud in-app) | The wizard running in our cloud, started from inside the PostHog app. It does point implementations, such as adding a new product, and shows cross-sell and upgrade opportunities. | |
| Wizard (headless CLI) | A version of the wizard without the TUI, so any coding agent can run it. | |
| Wizard (migration) | A wizard program that moves a customer to PostHog from a competitor. | |
| Workflows |
Don't just copy other products
Some of the features we are building may exist in other products already. It is fine for us to be inspired by them - there's no need to reinvent the wheel when there is already a standard way our users expect things to work. However, it is not ok for us to say 'let's copy how X does it', or to ship something with the exact same look and feel as another product. This is bad for two reasons:
- We're highly unlikely to overtake everyone else if we just build the open source version of everything that is already out there.
- We may expose ourselves to legal risk/challenges from those companies, especially if they can point to a public issue where we have said 'let's copy X'.





