Contract metrics guide

How to Calculate Contract Cycle Time

Define contract cycle time with auditable start and end events, stage, queue, touch, pause, reopen, calendar, business-day, cohort, percentile, and data-quality rules.

Direct answer

Calculate contract cycle time as the elapsed time between a defined start event and a defined completion event for each request, then report the median and selected percentiles for a comparable cohort. Store every state transition with an ISO 8601 timestamp and time zone, subtract only pauses that meet a documented rule, and keep total, stage, queue, and touch time separate. Use calendar or business-time calculations consistently; never mix them in one metric. Reconcile reopened work and invalid event sequences before publishing results.

Definitions

Contract cycle time

The duration from the request start event to the defined completion event for one contract request, measured in elapsed calendar time or business time according to a declared calculation policy.

Start event

The first timestamp at which a request is accepted into the measured workflow. A team should choose one event, such as a complete intake submission or triage acceptance, and exclude drafts or rejected submissions.

Completion event

The terminal timestamp that means the measured outcome is complete, such as execution, approved self-service delivery, or a documented cancellation. The event must match the workflow being measured.

Stage time

The sum of time intervals during which a request is assigned to a named workflow stage. Stage intervals are bounded by state-transition events and should not overlap.

Queue time

Time inside the measured cycle when work is waiting for an owner, reviewer, approver, requester, counterparty, system, or other declared dependency rather than being actively handled.

Touch time

The sum of explicitly recorded work intervals in which a person or automation is performing an action on the request. A status duration is not touch time unless the system records action start and end events or an approved proxy.

Paused clock

A declared interval excluded from a metric after a pause-start event and before a matching pause-end event, usually because an approved external dependency or requester action temporarily stops service time.

Business time

Duration calculated from the intersection of a request interval with the applicable working periods, time zone, weekends, holidays, and exception schedule for the responsible entity.

Reopened request

A request that receives a reopen event after a completion event. It can be measured as one continuing lifecycle or as a new request, but the selected rule must preserve the original completion and disclose the reopen count.

Cohort

A defined set of requests sharing the same measurement scope and segmentation rules, such as workflow, contract type, risk tier, entity, region, intake channel, and completion period.

Practical workflow

  1. Write the metric contract

    Use one request_id per measured request and document the exact start event, completion event, included statuses, pause reasons, clock type, time zone, reporting period, and exclusion rules. For example, a request may start when complete intake is accepted and end when the contract is executed; a draft submission and an abandoned request are not silently treated as starts or completions.

  2. Capture an append-only event log

    Record event_type, request_id, occurred_at, actor or system, stage, queue reason, pause reason, source, and time zone for every transition. Store timestamps as unambiguous ISO 8601 or RFC 3339 instants, and use a consistent half-open interval convention: [start_at, end_at), including the start boundary and excluding the end boundary.

  3. Calculate total cycle time

    For a closed request, raw total seconds = completion_at - start_at. If valid pause intervals are excluded, active total seconds = raw total seconds - union_length(valid pause intervals). Union overlapping pauses before subtraction, reject unmatched or open pauses from closed-cycle reporting, and retain raw, pause, and active values so the adjustment is auditable. For an illustrative request that starts Monday at 09:00 and completes Wednesday at 13:00, raw elapsed time is 52 hours; an approved 8-hour pause leaves 44 active hours. Do not replace missing timestamps with zero.

  4. Calculate stage, queue, and touch time

    For each stage interval i, stage_seconds = sum(end_i - start_i) after applying the same clock and pause rules. Queue_seconds is the sum of intervals whose declared state is waiting or queued; touch_seconds is the sum of explicit action intervals, with overlapping actions unioned when they represent one concurrent work period. If stages are mutually exclusive, reconcile active_total_seconds = stage_seconds + unassigned_seconds; report any residual instead of forcing it into touch time.

  5. Choose calendar or business time

    Calendar seconds use elapsed instants across the full interval, then convert to days as seconds / 86,400; they do not mean counting date labels. Business seconds use the intersection of [start_at, end_at) with the responsible entity calendar in its local time zone, including configured working windows, weekends, holidays, closures, and daylight-saving transitions. Business days = business_seconds / scheduled_seconds_per_day, not a universal seven-day or five-day assumption.

  6. Apply pause-clock rules

    Start a pause only on a pause_start event with an allowed reason code and stop it on the matching pause_end event. A pause interval is [pause_start, pause_end); it is subtracted only from the metric whose policy allows that reason. If a request changes stage while paused, keep the pause separate from stage state, close or reconcile it before completion, and flag an open, unmatched, or overlapping interval for review.

  7. Handle reopened requests explicitly

    Never overwrite the first completion_at. For a continuing lifecycle, first_pass_seconds = first_completion_at - start_at and final_lifecycle_seconds = final_completion_at - start_at, each with the declared pause policy; reopen_seconds = final_lifecycle_seconds - first_pass_seconds. Report reopen_count and first-pass results separately. If reopening creates a new scope or new request_id, exclude the follow-up from the original cycle and link the records.

  8. Summarize, segment, and quality-check

    Sort valid durations x1 <= ... <= xn and use the declared quantile rule. With linear interpolation and 1-indexed rank r = 1 + (n - 1)p, Qp = xk + (r - k)(xk+1 - xk), where k = floor(r); median = Q0.50 and p95 = Q0.95. Segment first by workflow, contract type, risk tier, business unit or entity, region, intake channel, playbook, and completion period; make each dimension and inclusion rule explicit. Publish n, median, selected percentiles, and open-request aging separately by cohort. Before release, check one start and one terminal event, start_at < completion_at, nonnegative intervals, complete state pairs, valid time zones, no impossible future or duplicate events, no overlapping exclusive stages, and total-to-component reconciliation.

Comparison

Measurement choiceDefinition and formulaWhen to use it
Calendar cycle timecompletion_at - start_at, expressed as elapsed seconds or seconds / 86,400; subtract only approved pause intervals.Use when elapsed customer or end-to-end experience matters across nights, weekends, holidays, and time zones.
Business cycle timeThe sum of intersections between the request interval and scheduled working windows for the responsible entity, less approved pauses.Use when service capacity or an internal operating agreement is defined by a named business calendar.
Stage and queue timeStage time sums intervals in a named stage; queue time sums intervals with an explicit waiting state or queue reason.Use to locate handoff, approval, requester, counterparty, or capacity delays without calling all elapsed time review effort.
Touch timeThe unioned duration of explicit person or automation action intervals; do not infer it from a request being assigned or open.Use for effort and capacity analysis when action start and end events, or a documented proxy, are available.
First-pass and reopened lifecycleFirst-pass = first_completion_at - start_at; continuing lifecycle = final_completion_at - start_at; report reopen_seconds as the difference.Use when a completed request can return to work and the team needs quality and rework visibility rather than one blended number.
Median and percentileSort valid durations and calculate Qp with the declared quantile rule; publish n and the cohort definition with each result.Use to describe a skewed distribution and tail experience; do not present an example result as a universal benchmark.

Limitations and exceptions

  • Cycle time is only comparable when the start event, completion event, pause policy, clock type, time zone, and cohort rules are the same. Two teams can report different values correctly while measuring different work.
  • Touch time is not recoverable from ordinary status history. Without explicit action intervals, an assignment, comment, or status change is evidence of activity but not a defensible duration.
  • Business-time results depend on entity calendars, holidays, working windows, time zones, daylight-saving transitions, and exception schedules. A business day is not a universal fixed number of hours.
  • Pauses can improve operational clarity or hide demand if reason codes are broad, optional, or applied inconsistently. Review pause rate, pause duration, and reason distribution alongside cycle time.
  • Open requests are right-censored: their final completion time is unknown. Report current aging separately and do not mix open durations into completed-request medians or percentiles.
  • Reopened work can represent correction, scope change, counterparty delay, or a genuinely new request. A single policy cannot explain all cases, so publish the reopen rule and counts with the metric.
  • Examples in this guide illustrate calculation mechanics only. They are not universal benchmarks, service-level commitments, or evidence that one contract workflow should match another.

Primary sources

Methodology

This guide treats contract cycle time as an event-measurement problem. First define the unit of work and terminal outcome; then capture timestamped state, queue, action, pause, reopen, actor, calendar, and time-zone data; next compute intervals with one declared clock and explicit half-open boundaries; finally summarize only valid completed records by stable cohorts. Keep raw elapsed time, pause duration, active time, stage time, queue time, touch time, reopen time, and data-quality flags as separate fields. Use the median and declared quantiles for distribution summaries, include sample size and extraction period, and compare periods only after confirming that workflow definitions and calendars did not change. Do not turn illustrative results into universal benchmarks.

Contact

Make contract cycle time measurable

Reach out and learn more about our offerings and how CaseDocker can help you

Built for legal operations teams

Share your use case and we will connect you with the right team for product guidance, pricing, and rollout planning.

Clear next steps

Expect a response from our team with the most relevant next step for your inquiry.

Get in Touch

Get in Touch

We usually reply quickly

FAQs

Choose the earliest event that represents accepted, measurable work, such as a complete intake submission or triage acceptance. Do not start the clock when someone creates a draft or sends an incomplete request unless those events are explicitly in scope. Store the selected start event in the metric contract and apply it consistently across the cohort.

Use the event that represents the outcome being measured. Execution is appropriate for an end-to-end contracting cycle; approved delivery may be appropriate for a self-service workflow; a documented cancellation can be a terminal outcome if cancellations are reported separately. Do not use a generic closed timestamp when it can occur after the real business outcome.

Use calendar time for elapsed customer experience and business time for capacity or service policies tied to a named working calendar. Store both only when their purposes are distinct, and label each result. Business time requires the correct entity calendar, time zone, holidays, exception periods, and daylight-saving behavior; it is not simply calendar days multiplied by a fixed conversion.

Subtract only intervals opened by an approved pause-start event and closed by a matching pause-end event. Use raw_total = completion_at - start_at, pause_total = union_length(valid pauses), and active_total = raw_total - pause_total. Keep pause reason, owner, and duration visible so teams can detect overuse, missing closures, or inconsistent classification.

Keep the first completion timestamp. Report first-pass time, final lifecycle time, reopen count, and the difference between final and first-pass time. Treat the reopen as a new request only when the operating policy assigns a new scope or request_id; link it to the prior request and avoid silently overwriting the original result.

Contract durations are often skewed by a small number of long negotiations, missing handoffs, or escalations. The median shows the middle observed duration, while a declared percentile describes a tail position. Publish n and the quantile rule, and inspect the underlying cohort. An example p95 is descriptive for that sample, not a universal target.

Check that each closed request has one valid start and terminal event, start_at is earlier than completion_at, all paired states close, timestamps have valid offsets or time zones, exclusive stages do not overlap, pauses are valid and unioned, reopen events are linked, and active time reconciles to stage time plus residual unassigned time. Keep failed records visible for remediation.

Related CaseDocker capabilities

Contract lifecycle management

Capture contract intake, routing, review, approval, execution, renewal, and status events that can support an auditable cycle-time model.

Explore

Playbook automation

Standardize state transitions, pause reasons, escalation rules, approval routing, reminders, and event-driven handoffs across repeatable workflows.

Explore

Legal operations software

Connect operational reporting, workload visibility, service definitions, and workflow governance for legal and contract teams.

Explore

Turn this guide into an operating plan

Share your current legal workflow and CaseDocker can map the right modules, integrations, controls, and rollout sequence.

Book a walkthrough