Competitive Intelligence
The competitive field, in the same graph as the work it informs
Competitive intelligence goes stale faster than almost anything else a team keeps. The rival teardown is out of date the week after the offsite. Answering where a product trails its rivals means scanning a spreadsheet nobody trusts. A competitor ships something, it lands in a Slack thread, and by Friday it is gone. UPG models a competitor the same way it models the products it competes with: a watched graph, its moves recorded as dated signals, parity recorded on a typed edge, the whole field placed against one shared classification. Where a deck goes stale between reviews, the graph stays current.
Model a competitor the company does not own
A portfolio usually holds what a company owns. It also has to account for what it does not. UPG lets a competitorcompetitorA competing product or company sit inside the same portfolio as the products it competes with, tagged with a member_kind of watched.
The watched tag changes how the graph is scored. A watched graph is held to a different standard than a product the company owns: an empty discovery region in Adyen’s graph is not a gap in the company’s own discovery, and a half-mapped rival does not drag the portfolio health score down. portfolio_validate and the coverage scorers read member_kind and adjust what they expect.
not scored · no dragnot scored · no dragnot scored · no dragA competitor is a graph the company does not own. Marked member_kind: watched, it sits in the same portfolio as the products it competes with, but portfolio_validateand the coverage scorers skip it: an empty discovery region in Adyen’s graph is not a gap in the owned product.
What a watched competitor actually contains
Once a competitorcompetitorA competing product or company is in the portfolio, it is modelled like any product the company owns. It offers a competitor featurecompetitor_featureA feature offered by a competitor, competes for the same personapersonaAn archetype representing a user segment, addresses the same needneedA user need, pain, desire, or constraint, is classified as a classification valueclassification_valueA position or value on a classification axis, representing where one option lands on that dimension., and emits the competitor signalcompetitor_signalA competitor signal entity nodes the team tracks.
The comparison stays current with little manual upkeep. The same query that walks an owned product walks the rival, so a question like “how do the two compare on fraud tooling?” is one traversal across two graphs.
competitor_featureA feature offered by a competitorpersonaAn archetype representing a user segmentneedA user need, pain, desire, or constraintclassification_valueA position or value on a classification axis, representing where one option lands on that dimension.competitor_signalA competitor signal entityA watched competitor is modelled the same way as an owned product. It offers features, competes for the same persona, addresses the same need, sits at a known classification, and emits dated signals. The same query language walks the owned product and the rival, so a comparison is a traversal over both graphs.
A competitor move, recorded as a dated fact
The unit of competitive change is the competitor signalcompetitor_signalA competitor signal entity: one dated move a rival makes. A feature launch, a pricing change, an acquisition, a partnership, a market entry. It is emitted by the competitor inside the watched graph, with the date and the evidence attached.
What makes it more than a feed is that each signal connects back to the team’s own work. A move that lands on a shipped feature becomes a signal_maps_to_feature edge to a featurefeatureA product capability or feature; a move that exposes a gap worth chasing becomes signal_surfaces_opportunity to an opportunityopportunityA validated gap worth solving. Each new signal updates the picture in place, ready to query.
opportunityA validated gap worth solvingfeatureA product capability or featurefeatureA product capability or featureEach competitor move is one dated competitor_signal: a launch, a price change, an acquisition. A typed cross-edge lands it in the owned graph: onto a feature already shipped, or as an opportunity it reveals. The competitive feed is a query.
Where a product leads a rival, and where it trails
The competitive question teams ask most is also the hardest to keep current: where does a product lead a rival, and where does it trail? UPG models it as the parity edge feature_rivals_competitor_feature, connecting a featurefeatureA product capability or feature node to a competitor featurecompetitor_featureA feature offered by a competitor and carrying the assessment on the edge itself.
Parity status, relative quality, whether it counts as a gap, when it was last assessed, the supporting evidence, a confidence score: all of it rides the relationship rather than a paragraph. The question becomes a filter over the competitive lens.
The parity edge carries the assessment on the edge: status, relative quality, the gap flag, when it was assessed, the evidence, a confidence score. The areas where a product trails a rival are a single traversal over the competitive lens (two rows here).
One shared vocabulary for the whole field
Parity covers where a product leads or trails on a given feature. Classification answers a different question: what kind of competitor is this? A classification axisclassification_axisA single dimension in a competitive classification matrix that defines one axis of comparison across alternatives. is defined once in the shared registry (AI maturity, say, with the values agentic, integrated, bolt-on) and every rival is placed against the same classification valueclassification_valueA position or value on a classification axis, representing where one option lands on that dimension. set, so the map holds across the whole organisation instead of being reinvented by each analyst.
Each placement carries its own assessment: a typed confidence on a named scale, the date, the evidence, who made the call. A stale machine-polled guess is easy to tell apart from a fresh hand-verified one, and re-classifying merges new evidence onto the existing edge rather than spawning a duplicate. portfolio_digest reports the distribution across each axis, so the shape of the field is available as a single read.
confidence: high · assessed_on: 2026-06-09 · evidence: launch keynote · observed_by: analystThe axes are defined once in the shared registry, then every rival is placed against the samevocabulary. The assessment rides the edge: a typed confidence on a named scale, the date, the evidence, who observed it. A high-confidence hand-verified call and a low-confidence machine-polled guess are distinguishable on the edge. The digest reports the distribution across the field.
From analysis to a move sales can use
A market trendmarket_trendAn emerging trend in the market creates an opportunityopportunityA validated gap worth solving, and where that opportunity meets a rival weakness, there is a move. A competitive battle cardcompetitive_battle_cardA competitive battle card for sales enablement turns it into a position a rep can win with: it references the competitorcompetitorA competing product or company and addresses the objectionobjectionA common sales objection a buyer actually raises.
Because the card sits in the same graph as the parity edges and signals underneath it, it stays tied to the evidence. When the rival closes the gap, the card built on it is one traversal away, and can be updated in place.
market_trendAn emerging trend in the marketopportunityA validated gap worth solvingcompetitive_battle_cardA competitive battle card for sales enablementcompetitorA competing product or companyobjectionA common sales objectionA market trend creates an opportunity. Where that opportunity meets a rival weakness, a competitive_battle_card records the position: it references the competitor and addresses a buyer objection. The battle card stays linked to the trend, the opportunity, and the competitor it cites, so the position traces back to the evidence under it.
Competitive intelligence is an additive layer on the portfolio tier: a team that only models its own products never has to know it exists, until the first rival is worth watching. From here, the path leads back to the portfolio, or down to the reference:
The other half of the story: the multi-product portfolio a company owns, with its axes, shared registry, cross-product edges, and metric cascade.
The reference: the dual-axis hierarchy, the registry, and every cross-product edge type with full property schemas.
The full spec, including the section on watched graphs, signals, parity, and classification.