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 from web analytics opened up the necessary PRs to build this feature. It was reviewed by the Product Analytics mini crestProduct 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.

ChangeSuggested path
Typo or small bugOpen 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 worksGive 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.md file next to the code you own. For an example, see the Issue or PR? section of the posthog.com AGENTS.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.

FeatureOwnerLabel
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'.

Was this page useful?