Process variants

Concept · Process paths · Measures

Updated

Browse documentation
On this page

Engine 19.0.0rc597 · Reader 9.0.0rc656 · Development snapshot

A process variant is one complete activity sequence followed by one or more objects. Ghost Observatory groups objects with the same sequence, counts how common each sequence is and publishes duration summaries for its completed objects.

Count the sequence and its completed subset

Sequence order matters. Review → Approve → Close and Review → Approve → Review → Close are different variants. Repeated steps remain in the sequence.

Nv = Σi ∈ P 1(sequencei = v)

Cv = Σi ∈ P 1(sequencei = v and outcomei = completed)

P is the set of objects admitted to path counts; v is an exact activity sequence. Nv counts all admitted objects with that sequence. Cv counts its completed objects. The indicator contributes one for a matching object.

The Engine stores these values as variants.object_count and variants.completed_count. The first includes completed, cancelled and merged objects. median_lead_time_sec and p95_lead_time_sec use the known objects.lead_time_sec values of the completed subset.

Six objects, five completed durations

Suppose six eligible objects follow A → B. Five complete in 10, 20, 30, 40 and 50 seconds. The sixth is cancelled after 100 seconds. The table applies the variant population and publication rules described here.

Published values for the A → B variant
FieldValueBasis
object_count6Every eligible closed object with this path
completed_count5The five completed objects
median_lead_time_sec30 secondsThe middle of the five completed durations
p95_lead_time_secNULLFewer than 40 known completed durations

The cancelled object's 100 seconds do not enter the duration quantiles. A median needs at least five known completed durations; a P95 needs at least 40. A missing duration summary can therefore coexist with a valid path count.

Which objects qualify?

objects.counted_in_paths identifies the eligible population: top-level objects that are closed, have a declared complete history and a decided activity order, and lie wholly inside the analysis window. An open object's observed sequence is still a prefix of an unfinished history, so it does not become a completed variant.

Incomplete histories, unresolved order and objects crossing a bounded window can reduce coverage. An empty variants result means no path qualified; it does not establish that the source contained no objects. Durations use elapsed seconds between the admitted first event and closure. Window boundaries come from the Engine's scope, rather than the browser's current date or time zone.

For comparisons between runs, use activity_sequence. variant_id is a ranking within one analysis scope in a result file: highest object count first, then earliest first event and sequence text. The stored key is (scope_id, variant_id); the same number can identify a different path in another scope. A changed count can change the number.

sample_object_id selects the earliest-first-event example, with the object ID breaking a tie; it is not a random or representative sample.

Reading the variant view

Open Processes → Variants, route #processes/variants. Reader shows up to 30 of the most common published variants and states when more exist. Bars show object counts; the duration markers show the completed subset's median and P95.

An activity chip's processing-time tooltip describes that activity across the selected scope. It does not estimate the activity's time specifically within the variant. The row's throughput-time markers do describe the variant's completed objects.

A common path can contain necessary repeats, while a rare path can be legitimate. To investigate a sequence, inspect an example object's evidence and the configured rules. If reading the file directly, preserve the sequence representation: names containing reserved characters can make activity_sequence a JSON array instead of arrow-separated text.

Published results

Read these results in variants and check objects.counted_in_paths to identify which objects entered the path calculation.