# 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 engine keeps each product's family, its variation and required attributes, and measures its price band and size curve. Its jobs: Attribution, every sync; Analogs, each night at 04:30 UTC; Image matching, each night at 03:30 UTC, reading product pictures. Look-alikes are matched on text; a matching picture is shown as a reason, not as part of what decided it. Its pages: Catalogue, Families, Analogs and the 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.

Families do not change forecasts. Look-alikes match 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

Full sync is due daily at 04:00 UTC; daytime updates are incremental. Existing exceptions retain their cadence. Attribution follows that slot, or a configured independent refresh schedule. Source sync health can be Late or Stale before a job is due; Running keeps its limit. Look-alikes 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 · Look-alikes have not run for this catalogue yet.
> Stale · Look-alikes were last refreshed {as_of}.
> Partial · Look-alikes refreshed {as_of}; some lines were not proposed.
> Failed · Last night's look-alike run did not finish; showing {as_of}'s.
> Nothing yet · No new product is waiting for a look-alike.

## 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.

Local archives exclude look-alike evidence; restore reverses exclusion.
