Skip to content

Document the Design Patterns section and fix technical inaccuracies - #5246

Draft
Duncanma wants to merge 2 commits into
docs-design-patterns-tier-afrom
docs-design-patterns-tier-b
Draft

Document the Design Patterns section and fix technical inaccuracies#5246
Duncanma wants to merge 2 commits into
docs-design-patterns-tier-afrom
docs-design-patterns-tier-b

Conversation

@Duncanma

@Duncanma Duncanma commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Summary

Stacked on #5245 (Tier A). Tier B (judgment-call) findings from a full review of docs/design-patterns/, split into two commits:

Structural / IA placement

  • Adds a "Design patterns" entry to INFORMATION-ARCHITECTURE.md describing its audience, template, and how it differs from Guides and Best Practices. The section (added in Add Design Patterns section to documentation #4746) had no IA entry.
  • Adds frontmatter tags to all 46 pages in docs/design-patterns/, which had none (unlike ~90% of docs/ pages). Every page gets a shared Design Patterns tag; leaf pages also get one topic tag reused from the site's existing vocabulary.
  • Cross-links use-cases-design-patterns.mdx (which predates this catalog) to the canonical Saga, Approval, and Long-Running Activity pattern pages it was duplicating without linking to.

Technical inaccuracies — each verified against actual SDK/server source on GitHub (temporalio/temporal, sdk-go, sdk-python, sdk-typescript), not just against other doc pages:

  • eager-workflow-start.mdx claimed TypeScript doesn't support Eager Workflow Start. It does (WorkflowOptions.requestEagerStart, wired through NativeConnection in sdk-typescript) — added a TypeScript tab and corrected every claim that excluded it. Also added .NET (RequestEagerStart), and fixed the self-hosted guidance: system.enableEagerWorkflowStart defaults to true (confirmed in temporal's dynamicconfig/constants.go) rather than needing to be turned on.
  • local-activities.mdx's timeout pitfall omitted Workflow Task heartbeating, the SDK's actual mitigation (sdk-go's ratioToForceCompleteWorkflowTaskComplete = 0.8, matching the ~80% figure the encyclopedia page already cites).
  • non-retryable-errors.mdx didn't mention that wrapping a non-retryable ApplicationFailure in a plain language error loses the flag — confirmed in sdk-go's ErrorToFailure, which type-switches on the outermost error only.
  • downstream-rate-limiting.mdx didn't mention Eager Activity execution bypassing the rate-limited Task Queue, and the exact per-SDK difference (Python needs disable_eager_activity_execution=True explicitly; Go auto-disables it when TaskQueueActivitiesPerSecond is set).
  • delayed-retry.mdx was missing the Python and Go tabs every sibling page has — added using the real ApplicationError/next_retry_delay (Python) and NewApplicationErrorWithOptions/NextRetryDelay (Go) APIs.
  • docs/develop/worker-tuning-reference.mdx used MaxConcurrentActivityTaskExecutionSize / MaxConcurrentLocalActivityTaskExecutionSize. Neither field has "Task" in it in sdk-go, sdk-java, or sdk-typescript — fixed.
  • Reconciled the Child Workflow fan-out guidance: the encyclopedia's recommended cap of 1,000 Child Workflow Executions per parent wasn't surfaced in 4 pattern pages, and batch-processing-patterns.mdx's "~4M records" Fan-Out capacity figure didn't account for it. Also fixed a "50,000 event history limit" mention to the documented 51,200.

Test plan

  • vale --config .vale-ci.ini docs/ clean on every touched file
  • yarn build succeeds
  • Reviewer spot-checks the new TypeScript eager-start sample and the Python/Go delayed-retry tabs
  • Reviewer confirms the tag scheme for the new Design Patterns tag before merge

- Add a "Design patterns" entry to readme/INFORMATION-ARCHITECTURE.md
  describing its audience, template, and how it differs from Guides
  and Best Practices. The section (added in #4746) had no IA entry.
- Add frontmatter tags to all 46 pages in docs/design-patterns/, which
  had none (unlike ~90% of docs/ pages). Every page gets a shared
  "Design Patterns" tag; leaf pages also get one topic tag reused from
  the site's existing vocabulary (Activities, Workflows, Signals,
  Updates, Errors, Child Workflows, Task Queues, Workers, Timers,
  Metrics, Failures).
- Cross-link docs/evaluate/use-cases-design-patterns.mdx (which
  predates this catalog) to the canonical Saga, Approval, and
  Long-Running Activity pattern pages it was duplicating without
  linking to.
All claims below verified against the temporalio/temporal,
sdk-go, sdk-python, and sdk-typescript source on GitHub, not just
against other doc pages.

- eager-workflow-start.mdx claimed TypeScript doesn't support Eager
  Workflow Start. It does (WorkflowOptions.requestEagerStart, wired
  through NativeConnection and the gRPC start request in sdk-typescript)
  — added a TypeScript tab and corrected every claim that excluded it.
  Also added the missing .NET SDK (RequestEagerStart), and fixed the
  self-hosted guidance: system.enableEagerWorkflowStart defaults to
  true (confirmed in temporal's dynamicconfig/constants.go) rather
  than needing to be turned on, so the pitfall is an operator having
  disabled it, not one having forgotten to enable it. Cross-linked to
  the canonical /develop/worker-performance#eager-workflow-start page.
- local-activities.mdx's timeout pitfall omitted Workflow Task
  heartbeating, the SDK's actual mitigation (sdk-go's
  ratioToForceCompleteWorkflowTaskComplete = 0.8, i.e. the ~80% figure
  the encyclopedia page already cites). Added it, plus the missing
  cross-link to /local-activity.
- non-retryable-errors.mdx didn't mention that wrapping a non-retryable
  ApplicationFailure in a plain language error loses the flag.
  Confirmed in sdk-go: ErrorToFailure does a concrete type switch on
  the outermost error only, so a fmt.Errorf-wrapped ApplicationError
  falls through to a default retryable failure.
- downstream-rate-limiting.mdx didn't mention that Eager Activity
  execution can bypass the rate-limited Task Queue. Added it, and
  confirmed the exact per-SDK difference: sdk-python requires
  disable_eager_activity_execution=True explicitly, while sdk-go's
  worker.go auto-disables eager activities whenever
  TaskQueueActivitiesPerSecond is set.
- delayed-retry.mdx was missing the Python and Go tabs every sibling
  page has. Added them using the real ApplicationError/next_retry_delay
  (Python) and NewApplicationErrorWithOptions/NextRetryDelay (Go) APIs,
  matching this repo's own SDK reference pages.
- docs/develop/worker-tuning-reference.mdx used
  MaxConcurrentActivityTaskExecutionSize /
  MaxConcurrentLocalActivityTaskExecutionSize. Neither field has "Task"
  in it in sdk-go, sdk-java, or sdk-typescript — fixed to
  MaxConcurrentActivityExecutionSize / MaxConcurrentLocalActivityExecutionSize.
  (The design-patterns page using these names was already correct.)
- Reconciled the Child Workflow fan-out guidance: the encyclopedia's
  recommended cap of 1,000 Child Workflow Executions per parent wasn't
  surfaced in child-workflows.mdx, fanout-child-workflows.mdx,
  sliding-window.mdx, or mapreduce-tree.mdx, and
  batch-processing-patterns.mdx's "~4M records" Fan-Out capacity figure
  didn't account for it (it multiplied the hard 2,000-child limit by
  2,000 activities/child instead). Added the 1,000 figure to all four
  pitfalls sections and revised the capacity estimate to ~500K,
  consistent with this page's own "aim for 500 Activities per child"
  guidance. Also fixed a "50,000 event history limit" mention in
  fanout-child-workflows.mdx to the documented 51,200.
@vercel

vercel Bot commented Sep 4, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
temporal-documentation Ready Ready Preview Sep 4, 2026 5:46pm UTC

Request Review

This page provides an overview of how leading organizations leverage Temporal to solve real-world problems, general use cases, and architectural design patterns.
This page provides an overview of how leading organizations leverage Temporal to solve real-world problems, general use cases, and architectural design patterns. For a full catalog of reusable, code-level Workflow and Activity patterns, see [Temporal Design Patterns](/design-patterns).

## Use Cases of Temporal in Production

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 [vale] <Temporal.Headings> reported by reviewdog 🐶
'Use Cases of Temporal in Production' should use sentence-style capitalization.


For a reusable implementation of this pattern, see [Approval](/design-patterns/approval).

### Polyglot Systems

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 [vale] <Temporal.Headings> reported by reviewdog 🐶
'Polyglot Systems' should use sentence-style capitalization.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant