A position on a classification axis, where one option lands on that dimension of comparison.
A classification value is one discrete position on a classification axisClassification AxisMarket IntelligenceA single dimension in a competitive classification matrix that defines one axis of comparison across alternatives.View reference →: "enterprise" on the company-size axis, "self-serve" on the deploymentDeploymentEngineeringA deployment eventView reference →-model axis. It is the label you actually attach to a competitorCompetitorMarket IntelligenceA competing product or companyView reference →, a personaPersonaUserAn archetype representing a user segmentView reference →, or a segment. The value is where classification stops being abstract and starts tagging real things.
The value inherits its lineage from positioningPositioningGo-To-MarketProduct positioning statementView reference → and perceptual mapping. Once Al Ries and Jack Trout argued in *Positioning* (1981) that brands occupy coordinates in the customer's mind, the practical question became which coordinate, and a coordinate is a set of values, one per axis.
The statistical tradition formalised the placement. Perceptual maps built with multidimensional scaling, the psychometric technique developed by Torgerson, Kruskal, and others from the 1950s onward, position brands by deriving their values from customer similarity data rather than assigning them by assertion. Distance on the resulting map carries meaning: brands sharing similar values cluster, and the field reads that clustering as competitive substitutability.
Practice settled on a clean separation between the axis and the value. The axis defines the spectrum once; the values are the buckets along it that get applied many times. This matters because the buckets needNeedUserA user need, pain, desire, or constraintView reference → to be mutually exclusive and collectively exhaustive to be useful. An axis of "company size" whose values are "small", "big", and "enterprise" is broken, because "big" and "enterprise" overlap, and a competitor could honestly land in either.
A competitive team has settled a company-size axis with three values: SMB (under 50 staff), mid-market (50 to 1,000), and enterprise (over 1,000). They tag eight competitors. Six land in enterprise, two in mid-market, none in SMB.
That distribution is the finding. The SMB value sits empty across every rival, which says the lower end of the market is unserved by the current field. The team also tags their target persona as an anti-fit for the enterprise value: the buyer they want is a 20-person studio that enterprise tooling actively repels with procurement overhead. The values turn a vague sense of "we're more downmarket" into an exact, defensible claim about who sits where.
In the Unified Product Graph, a classification value lives in the market intelligence region as the discrete label node. A Classification AxisincludesClassification Valuehierarchy edge binds each value to its parent dimension; classification_axis_includes_classification_valueCompetitorclassified asClassification Valuesemantic tags rivals; and competitor_classified_as_classification_valuePersonais anti fit forClassification Valuesemantic records deliberate exclusions. Modelling the value as its own node, joined upward to its axis and outward to competitors and personas, lets one shared bucket like "enterprise" do segmentation work across the whole graph, and makes an empty value (a bucket nobody occupies) visible as a queryable market gap.persona_anti_fit_for_classification_value
Type-specific fields on BaseNode
rationalestringShort paragraph: why this value earns its own row/column. Longer narrative belongs in `summary_md` or attached `content_piece` nodes.
exemplarsstring[]Free-text examples of products occupying this value. For queryable occupancy, prefer `competitor` nodes with `classified_as` edges. @example ['Sanity', 'Contentful', 'Hygraph']
commitmentsobjectThe N (typically 2–4) load-bearing commitments that define this category. Each commitment is a structural axis; removing it changes the category. Pairs with `capabilities`: commitments are the *load-bearing definition*; capabilities are the *surface offering*. @example [ { name: 'Typed content graph', description: 'Schemas in code; references as edges; content is structured data.' }, { name: 'Real-time backend', description: 'Live queries, CRDT collaboration, sub-second propagation.' }, { name: 'Embeddable studio', description: 'Editor is a library hosted inside the team app, not an external portal.' }, ]
capabilitiesobjectStructured capability bullets across the six canonical surfaces. Each surface appears at most once per `classification_value`. Pairs with `commitments`: capabilities describe what the category *offers*; commitments describe what *defines* it. @example [ { surface: 'delivery', bullets: ['GROQ', 'GraphQL', 'REST', 'Live Content API', 'Asset CDN'] }, { surface: 'extensibility', bullets: ['Custom input components', 'Studio plugins'] }, ]
idstringrequiredUnique identifier (UUID)
typeNodeTyperequiredDiscriminator for the entity type
titlestringrequiredDisplay name
descriptionstringOptional detailed description
statusstringLifecycle status
tagsstring[]Freeform tags for filtering
16 edge types connected to this entity.
classification_axis_includes_classification_valuecompetitor_classified_as_classification_valuepersona_anti_fit_for_classification_valueclassification_value_evolves_from_classification_valueclassification_value_evolves_from_classification_valueclassification_value_opposite_of_classification_valueclassification_value_opposite_of_classification_valueclassification_value_sibling_of_classification_valueclassification_value_sibling_of_classification_valueclassification_value_derives_from_classification_valueclassification_value_derives_from_classification_valueclassification_value_compatible_with_classification_valueclassification_value_compatible_with_classification_valueclassification_value_incompatible_with_classification_valueclassification_value_incompatible_with_classification_valuepersona_pursues_classification_value