# The families and attributes engine

Source: https://docs.tightly.io/help/engines/families-and-attributes
Reviewed: 2026-09-26

## What the families and attributes engine is

The families and attributes engine keeps each product's own facts: its family, how that family varies, the attributes the family asks for, and two measured figures, a price band and a size curve. It is one of Tightly's four named engines. On a face it is three jobs: Attribution, every sync; Analogs, each night at 04:30 UTC; Image matching, each night at 03:30 UTC, reading the product pictures. Analogs are matched on text; a matching picture is shown as a reason, not as part of what decided it. Its pages are Catalogue, Families and Analogs, and a product's Attributes drawer.

## What a family is and what a join changes

A family is a group of products that vary the same way. On Families a family declares its shape, one of Colours only, Sizes only, Colours × sizes, One of a kind, or another way you name, such as lengths or packs, with its steps in order. A family also carries a template: the attributes every product in it must have. Placing a product, a store listing or an account's order line is a join.

What a join changes downstream:

- Catalogue can say what a product is missing. A product in no family reads No family set, and nothing can be called missing.
- On Tightly Pro, a family's shape is the columns of the buy grid on a Commitment, in the family's order, and a broken size run is judged against the family's declared steps only.
- The baseline engine's third rung reads the account's sell-out of the other styles in the same family.
- An order line placed on a product joins the money on it to that product.

A family does not change the forecasting engine's figures, and analogs are matched within a category, not a family.

## How attribution measures a price band and a size curve

Attribution runs inside every sync, and never fails it.

- **Price band.** Good, better or best: the thirds of price within the product's category. A category with fewer than five priced products or no spread in price cannot band, nor can the catch-all category. The band is written as auto, only where nobody declared one, and cleared when its reason goes.
- **Size curve.** The share of a style's units each size took over the last year, counted only on days when the whole size run was in stock, and on full-price sales where there are enough. It needs at least two such days and thirty units; short of that no curve is published, and where the style sold enough to be worth a curve the refusal is recorded with its reason. It is kept beside, and never over, a size curve you declared.
- **Missing attributes.** Each product's count of required attributes its family asks for and it does not have yet, refreshed every sync.

## The words on the face

| Word | What it means |
|---|---|
| declared | you set it; it stands over anything measured |
| measured · {n} days | attribution read this curve from that many clean days |
| auto | attribution filled this band |
| Not yet measured | attribution has never run for your catalogue |
| Refused | attribution looked and would not curve it; the reason is on hover |
| Too few sales · Category too small · No size option | why a curve or a band is absent |
| No band | no price band stands |
| Not on your plan | the plan does not include the engine |
| You · Connector's · Not in this family | who owns an attribute, in the Attributes drawer |

## Who owns an attribute, and what you can edit

Typing over a value the connector filled claims it: the attribute reads You and the connector leaves it alone. Hand back to the connector gives it back, and the next sync refills it. You can set a product's family, declare its price band and size curve, and type any attribute its family asks for. A viewer reads; a member or an admin edits.

## The engine's state sentences

Attribution is Late four hours after a sync it should have followed and Stale after twenty-six; analogs are Late six hours past their window and Stale after thirty. Character for character:

> Never ran · Attribution has not run for this catalogue yet.
> Stale · Last measured {as_of}; no sync has completed since.
> Partial · Measured {as_of}; some styles could not be measured.
> Failed · Attribution did not finish today; showing {as_of}'s values.
> Nothing yet · Nothing to measure yet: no sized variants, no priced lines.
> Not on your plan · Not on your plan.

> Never ran · Analogs have not run for this catalogue yet.
> Stale · Analogs were last refreshed {as_of}.
> Partial · Analogs were refreshed {as_of}; some lines were not proposed.
> Failed · Last night's analog run did not finish; showing {as_of}'s.
> Nothing yet · No new product is waiting for an analog.

## What each plan sees

Catalogue and Families are included with Tightly Essentials+ and Tightly Pro; on Essentials the rail marks both for sale with Essentials+. Analogs is on the Pro rail, and on Essentials and Essentials+ the rail marks it for sale with Pro. Lite carries none of them. A refused read of Catalogue or Families says:

> This organisation's plan does not include Product data. It is sold with Essentials+.

See also [Forecasts for products that have never sold](../engines/new-product-forecasts.md), [Families](../product/families.md) and [Analogs](../product/analogs.md).

## Glossary line

The families and attributes engine keeps each product's family, shape and attributes, and measures its price band and size curve, saying which it measured.
