Skip to content
Back to Growth & Acquisition

Viral Cycle Time

Compress the time between a user joining and them inviting the next user — short cycle time is what makes k compound fast.

Why

The viral growth equation is users(t) = initial × (1 + k)^(t/ct), where ct is the cycle time — k determines the exponent, but ct determines how fast you reach it. A k of 0.5 with a 2-day cycle reaches 100x in 26 days; the same k with a 30-day cycle takes 390 days. Compressing cycle time is often higher-leverage than raising k, because it multiplies the effect of every k improvement. The cycle time is the sum of: time-to-first-shareable-moment, time-to-trigger-fire, and time-to-recipient-convert; each can be attacked independently. Products with long time-to-value (B2B enterprise) have inherently long cycle times and should not expect viral growth — they should optimize k for supplement, not exponent.

When

When k > 0.3 and you want growth to compound faster. Measure cycle time alongside k in every growth review.

How

1. Instrument the three sub-cycles: (a) signup → first shareable moment, (b) shareable moment → invite sent, (c) invite sent → recipient signup
2. Cycle time ct = (a) + (b) + (c); measure the median, not the mean (long tail distorts the mean)
3. Attack the longest sub-cycle first: if (a) is 7 days, push the shareable moment into onboarding (e.g. share a result in step 1)
4. For (b), reduce friction: pre-filled message, contact picker, one-click send — each removed step shaves hours off the median
5. For (c), use deep links and rendered previews so the recipient converts in the same session; email invites add 1-3 days vs in-app
6. Re-measure ct weekly; a 1-day reduction in ct compounds across every cohort forever
7. Model the impact: users(t) = initial × (1+k)^(t/ct); plot how a ct reduction changes the 90-day user count
8. Set a ct target and size experiments to hit it; for consumer products target ct < 2 days, for B2B < 7 days

Example

# Cycle time decomposition (current)
(a) signup → first shareable moment: 5.0 days  (user must build a dashboard first)
(b) shareable moment → invite sent:   0.5 days  (trigger fires, friction low)
(c) invite sent → recipient signup:    2.0 days  (email invite, lands in inbox)
ct = 5.0 + 0.5 + 2.0 = 7.5 days

# Attack (a) — push shareable moment into onboarding
Exp: step 1 of onboarding = "pick a template, share with team"
  → (a) drops from 5.0d to 0.2d
# Attack (c) — switch email invite → in-app deep link via Slack
Exp: invite sends Slack message with rendered preview + deep link
  → (c) drops from 2.0d to 0.3d

# After experiments
ct = 0.2 + 0.5 + 0.3 = 1.0 day  (was 7.5)
# With k = 0.4, 90-day growth:
#   old: 1 × 1.4^(90/7.5)  = 17x
#   new: 1 × 1.4^(90/1.0)  = 2.3 million x  (ct reduction >> k increase)

Common Problems

  • ⚠Optimizing k while ignoring ct — a k of 0.5 with a 30-day cycle grows slower than k of 0.3 with a 2-day cycle.
  • ⚠Measuring the mean cycle time instead of the median — a few users who invite on day 1 hide that the median is day 14.
  • ⚠Using email invites (long (c) sub-cycle) when in-app or Slack invites could convert in the same session.
  • ⚠Delaying the first shareable moment to 'after the user is fully activated' — by then the motivation peak has passed.

Best Practices

  • ✓Measure ct as the median of (a + b + c) sub-cycles, not the mean; the long tail distorts the mean and hides the typical experience.
  • ✓Attack the longest sub-cycle first; a 1-day reduction in the longest segment beats a 1-day reduction in the shortest.
  • ✓Push the first shareable moment into onboarding, not after activation; the motivation peak is highest at the first 'wow'.
  • ✓Use in-app or messaging-app invites, not email; email adds 1-3 days to sub-cycle (c) and often never gets opened.