Shares Persona
Two products share the same target persona.
A mobile app and a desktop product both serve the same Product Manager archetype.
Graph Structure
When one organization runs multiple products, a single UPGDocument is not enough. The portfolio model extends UPG with an organizational root, a dual ownership axis, and typed cross-product edges that make relationships between products explicit and queryable. A UPGPortfolioDocument is backward-compatible with single-product files; they coexist in the same ecosystem.
The portfolio hierarchy runs on two independent axes. A product may appear on one, both, or neither. The axes are fully optional.
Cross-product edges are typed relationships between entities in different products. They live in the cross_edges array of a UPGPortfolioDocument, not inside individual product graphs. Source and target use qualified IDs: {product_id}/{node_id}.
Two products share the same target persona.
A mobile app and a desktop product both serve the same Product Manager archetype.
Two products face the same competitive threat.
Two products in a portfolio both compete with Notion.
Two products track the same success metric.
A freemium product and its paid tier both track 'time to first value'.
Product A depends on Product B to function or deliver value.
A CLI tool depends on a cloud API service.
Product A takes market share from Product B in the same portfolio.
A new self-serve tier cannibalises the high-touch enterprise offering.
Product A is the successor to Product B.
v2 of a product succeeds v1, replacing it rather than competing.
Product A runs Product B inside itself (composition or hosting), as distinct from a runtime dependency.
A dashboard shell hosts a studio app that runs inside it.
A product's strategy entity rolls up to a higher-level one: the OKR cascade across products (subordinate to superior).
A product's objective contributes to a company objective; a product key result rolls up to a company key result.
A product node is an instance of a canonical entity defined once in the portfolio registry (the shared-vocabulary tier). Same type on both ends; the target is addressed as registry/{id}. Created via register_instance.
Each product's local Developer persona is an instance of the one canonical Developer in the registry, so renaming an instance off-canon is detectable as drift.
A product area serves a canonical persona from the registry, optionally carrying primary/secondary relevance and an audience role (buyer/user/champion/...). Source is a product_area; target is registry/{id}. Created via link_area_to_audience.
The Experience area primarily serves the Developer persona as a user; the Governance area serves the Enterprise Buyer.
A product area targets a canonical market segment from the registry, optionally carrying primary/secondary relevance. Source is a product_area; target is registry/{id}. Created via link_area_to_audience.
The Enterprise area primarily targets the Mid-Market segment.
A product metric feeds a higher-level company or portfolio metric: the measurement cascade (KPI to north-star). Same type (metric to metric), directed feeder to feed. Distinct from the symmetric shares_metric.
A product's weekly-active-developers KPI rolls up to the company AI-active-teams north-star.
idrequiredstringUnique identifier for the portfolio.titlerequiredstringHuman-readable name of the portfolio.descriptionstringLonger description of the portfolio's strategic focus.parent_portfolio_idstring | nullParent portfolio ID for nesting (sub-portfolios).hierarchy_model'flat' | 'nested' | 'matrix'How products are structured within this portfolio.productsstring[]Product IDs that belong to this portfolio.idrequiredstringUnique identifier for the product area.titlerequiredstringHuman-readable name of the product area.descriptionstringLonger description of the area's scope and ownership.parent_area_idstring | nullParent area ID for nesting (sub-areas).strategic_priority'critical' | 'high' | 'medium' | 'low'Strategic priority of this product area.productsstring[]Product IDs that belong to this area.Browse the full property schemas, edge definitions, and graph position for each portfolio entity type.
Graph Structure
When one organization runs multiple products, a single UPGDocument is not enough. The portfolio model extends UPG with an organizational root, a dual ownership axis, and typed cross-product edges that make relationships between products explicit and queryable. A UPGPortfolioDocument is backward-compatible with single-product files; they coexist in the same ecosystem.
The portfolio hierarchy runs on two independent axes. A product may appear on one, both, or neither. The axes are fully optional.
Cross-product edges are typed relationships between entities in different products. They live in the cross_edges array of a UPGPortfolioDocument, not inside individual product graphs. Source and target use qualified IDs: {product_id}/{node_id}.
Two products share the same target persona.
A mobile app and a desktop product both serve the same Product Manager archetype.
Two products face the same competitive threat.
Two products in a portfolio both compete with Notion.
Two products track the same success metric.
A freemium product and its paid tier both track 'time to first value'.
Product A depends on Product B to function or deliver value.
A CLI tool depends on a cloud API service.
Product A takes market share from Product B in the same portfolio.
A new self-serve tier cannibalises the high-touch enterprise offering.
Product A is the successor to Product B.
v2 of a product succeeds v1, replacing it rather than competing.
Product A runs Product B inside itself (composition or hosting), as distinct from a runtime dependency.
A dashboard shell hosts a studio app that runs inside it.
A product's strategy entity rolls up to a higher-level one: the OKR cascade across products (subordinate to superior).
A product's objective contributes to a company objective; a product key result rolls up to a company key result.
A product node is an instance of a canonical entity defined once in the portfolio registry (the shared-vocabulary tier). Same type on both ends; the target is addressed as registry/{id}. Created via register_instance.
Each product's local Developer persona is an instance of the one canonical Developer in the registry, so renaming an instance off-canon is detectable as drift.
A product area serves a canonical persona from the registry, optionally carrying primary/secondary relevance and an audience role (buyer/user/champion/...). Source is a product_area; target is registry/{id}. Created via link_area_to_audience.
The Experience area primarily serves the Developer persona as a user; the Governance area serves the Enterprise Buyer.
A product area targets a canonical market segment from the registry, optionally carrying primary/secondary relevance. Source is a product_area; target is registry/{id}. Created via link_area_to_audience.
The Enterprise area primarily targets the Mid-Market segment.
A product metric feeds a higher-level company or portfolio metric: the measurement cascade (KPI to north-star). Same type (metric to metric), directed feeder to feed. Distinct from the symmetric shares_metric.
A product's weekly-active-developers KPI rolls up to the company AI-active-teams north-star.
idrequiredstringUnique identifier for the portfolio.titlerequiredstringHuman-readable name of the portfolio.descriptionstringLonger description of the portfolio's strategic focus.parent_portfolio_idstring | nullParent portfolio ID for nesting (sub-portfolios).hierarchy_model'flat' | 'nested' | 'matrix'How products are structured within this portfolio.productsstring[]Product IDs that belong to this portfolio.idrequiredstringUnique identifier for the product area.titlerequiredstringHuman-readable name of the product area.descriptionstringLonger description of the area's scope and ownership.parent_area_idstring | nullParent area ID for nesting (sub-areas).strategic_priority'critical' | 'high' | 'medium' | 'low'Strategic priority of this product area.productsstring[]Product IDs that belong to this area.Browse the full property schemas, edge definitions, and graph position for each portfolio entity type.