Temporal vs Trigger.dev

Temporal suits teams that need a deterministic, replayable workflow engine across several languages. Trigger.dev suits TypeScript teams that want tasks, queues and waits inside their application codebase. This page compares fit, architecture, licensing, ownership cost and switching effort.

On this page

Temporal vs Trigger.dev: which should a TypeScript team choose?

Choose Temporal when your long-running jobs need deterministic workflows, SDKs in several languages, and a dedicated cluster your team is ready to operate. Choose Trigger.dev when you want tasks to live in the application repository with queues, waits and realtime runs, and a lighter operating footprint. For a TypeScript team, the decision turns on four questions: how many languages the platform must serve, whether engineers will accept the code rules that keep workflow replay safe, who will run the self-hosted stack after launch, and which features you need from Trigger.dev Cloud and which you can run yourself.

Temporal is the heavier commitment. Workflows are ordinary TypeScript functions, but Temporal replays their recorded event history after a failure, so code that reads time or randomness must use the SDK's deterministic equivalents, and changes to running workflows need versioning. Self-hosting means operating the Frontend, History, Matching and Worker services plus a persistence store, and Temporal's persistence testing covers PostgreSQL 13 to 16. Security is also the team's job. If no Authorizer is configured, the default noopAuthorizer allows every API request, so authorization, mTLS and OIDC for the Web UI should be in place before anything is reachable. Read the Temporal self-hosted security docs before scheduling the build.

Trigger.dev keeps task code inside the application codebase through its JavaScript and TypeScript SDK, and the repository is Apache-2.0 licensed. A self-hosted deployment splits into a webapp (dashboard, Redis and Postgres) and a worker (supervisor and runners). Confirm early which features you need from Cloud, because the self-hosting overview places warm starts, auto-scaling, checkpoints and dedicated support on Trigger.dev Cloud, while community support and ARM deployments are available on both. Also check your version pin: 4.5.0 is the last release that officially runs v3 tasks, and 4.5.1 and later reject v3 triggers and deploys, so v3 codebases must migrate first.

Which platform fits which scenario?

This table maps common team situations to the platform that usually fits better, along with the condition that makes each recommendation hold. Read each row against your language mix, your hosting constraints and whether you plan to depend on Trigger.dev Cloud-only features.

ScenarioBetter fitWhy and under what condition
Polyglot backend with Go or Java services sharing workflowsTemporalTemporal workflows are written in Go, Java, TypeScript or Python and share one event history, so services in different languages can run in one durable model. This holds if several services must coordinate on the same workflow definitions.
TypeScript-only product team shipping background jobsTrigger.devTasks live in the application codebase with the TypeScript SDK and ship with the app, so the team adds little new infrastructure. This holds if the team does not need Go or Java workers in the same system.
Long-running AI agent steps with human approval waitsTrigger.devWaits and waitpoints for human-in-the-loop steps are part of the task model, and checkpointing is listed in its README. Confirm that the self-hosted build covers the checkpoint and warm start behavior you need, since the self-hosting overview limits checkpoints to Trigger.dev Cloud.
Multi-day business processes needing a replayable historyTemporalTemporal keeps a complete ordered event history and replays it to resume workflows after failures, which suits processes that run for days. This holds if auditors or operators need to inspect the exact sequence of past decisions.
Teams that want to self-host without running a separate clusterTrigger.devTrigger.dev self-hosting uses a webapp with Redis and Postgres plus a worker, while Temporal needs Frontend, History, Matching and Worker services with a persistence store. Confirm the sizing for your workload, since both need production planning.
Teams that expect to rely on Trigger.dev Cloud featuresTrigger.devWarm starts, auto-scaling, checkpoints and dedicated support are documented as Cloud-only, so self-hosted parity is limited. This holds only if you accept a Cloud dependency or can live without those features on your own infrastructure.

How each platform is built and what that means for operations

Temporal and Trigger.dev both support self-hosting, but they split their components differently and ask different things of the team that runs them. The cards below set out what each deployment contains, what must be monitored and backed up, and which choices change the operating load before the first workflow ships.

The Temporal Service components

A self-hosted Temporal Service runs four internal services: Frontend, History, Matching and Worker. It also depends on a persistence store for workflow state and a visibility store for search. Your team operates each of these as a separate running part, so capacity planning and health checks apply to all of them, not only to your application workers. Ask whether your staff can own a cluster of this shape before committing to self-hosting.

Temporal persistence choices

Temporal's persistence store holds the event history that replays and resumes workflows, so it is the data your backup plan must protect first. Cassandra, PostgreSQL and MySQL are the tested options, and SQLite is meant only for development and testing. Confirm the exact versions your chosen database must run against Temporal's compatibility list, and plan a separate visibility store if you need search at scale.

Temporal deployment paths

Temporal can be deployed with Docker Compose, with Go binaries, with Helm charts that place each server service in its own Kubernetes pod, or by importing the server package into a custom Go build. Compose suits evaluation, while Helm suits teams already running Kubernetes. Helm chart versions below 0.73.1 do not work with server images 1.30 and later, so pin chart and image versions together and check them at every upgrade.

Trigger.dev webapp and worker split

Trigger.dev divides a self-hosted deployment into a webapp and a worker. The webapp contains the dashboard and depends on Redis and Postgres. The worker contains the supervisor and the runners that execute tasks. Your team runs both halves, so monitor the queue and database that sit between them and back up Postgres, which stores run state. Fewer moving parts than a Temporal cluster, but the worker tier is where long-running task capacity is decided.

Trigger.dev self-hosting options

Trigger.dev documents self-hosting with Docker Compose and with an official Helm chart for Kubernetes. Warm starts, auto-scaling, checkpoints and dedicated support are available only on Trigger.dev Cloud, while community support and ARM deployments are available on both. Before choosing self-hosting, list which of those cloud features your workloads need, because each one you rely on becomes either a self-built capability or a reason to stay on the managed service.

Operations consequences and network placement

The Temporal deployment documentation says Temporal services should run on hosts not reachable from the public internet, with network access restricted to trusted internal networks. Self-hosted Temporal also ships with the default noopAuthorizer, which allows every API request unless you configure an Authorizer, so mTLS, a ClaimMapper and an Authorizer belong in the first build. Budget for upgrades one minor version at a time with schema changes applied first, and confirm the same discipline for Trigger.dev's webapp and worker.

Which features each platform documents, and what to confirm

This table sets the documented features of Temporal and Trigger.dev side by side, with the points to confirm where the supplied material is silent. Read a check mark or cross as a documented yes or no only where the cell says so, and treat every "confirm" entry as a question for the vendor before you commit. The main takeaway is that Temporal documents a stronger self-hosted security model in its own docs, while Trigger.dev's self-hosted identity and feature parity with Cloud need direct verification.

CapabilityTemporalTrigger.dev
LicenseTemporal Server is MIT licensed. Temporal Cloud is a separate managed service.Trigger.dev is Apache-2.0 licensed according to its GitHub repository.
Programming modelWorkflow code in general-purpose languages, with a complete ordered event history used to replay and resume after failures.Tasks written in the application codebase, with retries, queues, concurrency controls and checkpointing listed in its README.
Long waits and human-in-the-loopConfirm the exact wait and signal patterns in the Temporal workflow docs for your use case.Waitpoints are listed in the README for human-in-the-loop flows. Confirm how they behave on your self-hosted version.
Durable cron schedulesConfirm scheduling options for your Temporal version in the official docs.Durable cron schedules are listed in the README. Confirm they behave the same on self-hosted deployments.
Language SDKsGo, Java, TypeScript and Python.JavaScript and TypeScript SDK.
EnvironmentsConfirm how namespaces map to your own dev, staging and production separation.Development, Staging, Preview and Production environments described in the README.
Authentication and accessDefault noopAuthorizer allows every API request until an Authorizer is configured. mTLS, a ClaimMapper, an Authorizer plugin, OIDC for the Web UI and payload codecs are documented.Confirm which identity and access features are available in Trigger.dev self-hosting in its docs before you rely on them.
Features reserved for Trigger.dev CloudNot applicable, since Temporal Cloud is a separate paid service.Warm starts, auto-scaling, checkpoints and dedicated support are only on Trigger.dev Cloud, per its self-hosting overview.

What the licenses allow and what is paid for each platform

The Temporal Server is MIT licensed, which allows you to run, modify and redistribute it inside your own infrastructure without a license fee to the project. The same license applies whether you deploy with Docker Compose, Go binaries, Helm charts on Kubernetes or a custom Go build, so the deployment choice does not change what you owe for the software itself. The costs that remain are the ones the operator carries: hosts, persistence, visibility storage and the staff who patch, upgrade and monitor the cluster.

  • Software cost: The MIT license imposes no license fee on self-hosted use, but the server is only one line in the total bill.
  • Persistence and visibility: Your database, whether Cassandra, PostgreSQL or MySQL in tested versions, plus any Elasticsearch or OpenSearch visibility store, are recurring infrastructure costs that you size and pay for yourself.
  • Upgrade effort: Upgrade one minor version at a time and run schema upgrades before server upgrades when release notes call for them. The current line includes v1.32.1, published on GitHub on October 8, 2026.
  • Support: Community support is the default for the open-source project. Ask Temporal in writing whether a commercial support agreement exists and what it covers.

Before committing, confirm with your vendor or implementation partner which Temporal components any support agreement covers, and whether any bundled module or custom build carries terms that differ from the core server.

How each platform handles identity, access and payload privacy

Identity integration on a self-hosted Temporal Service starts with a default you must change. If no Authorizer is configured, the server uses the noopAuthorizer, which allows every API request with no authentication or access control. Before any regulated workload touches the cluster, configure an Authorizer plugin so that each request is checked against a role. A ClaimMapper then maps JWT or certificate claims to namespace roles, so your identity provider decides who can start, query or signal workflows in each namespace. Enable mTLS with separate settings for internode and frontend traffic, and confirm that the Web UI uses OIDC single sign-on. Test each path with a non-production identity to confirm that denial actually happens.

On Trigger.dev, the identity question moves to the application and dashboard layers. Verify how users sign in to the self-hosted webapp, who holds administrative rights, and how the Development, Staging, Preview and Production environments are separated so that a staging credential cannot trigger production runs. Review where environment variables and provider keys are stored, who can read them in the dashboard, and how they reach the runners on the worker side. Trigger.dev's self-hosting overview describes the webapp with Redis and Postgres and the worker with its supervisor and runners, so map each component to its access path and secret store. Ask the vendor to confirm the supported login methods, role model and secret handling for your version, because these details are not covered in the sources used for this page.

Payload privacy is where the two platforms differ most in design. Temporal supports payload encryption through custom codecs and a codec server, so the Temporal Service stores ciphertext while your workers hold the keys. Plan the codec, key rotation and access to the codec server as a control in its own right, and document who can decrypt history during an incident. Also keep Temporal services on hosts not reachable from the public internet, as its deployment documentation advises. For Trigger.dev, confirm whether task inputs and outputs are encrypted at rest in your Postgres and Redis instances and how payloads are handled in logs and run traces. DeployOpen prepares these controls and collects the evidence for a compliance assessment, but it does not issue audit reports or certifications. Independent auditors and certification bodies make that determination.

What drives the running cost of each platform

Running Temporal or Trigger.dev yourself costs more than the software, which is free under MIT and Apache-2.0. The cards below separate the components you operate, the people who run them, the upgrade path, the support you buy and the managed-service fees, so you can request a quote that matches your actual scope.

Infrastructure footprint

A self-hosted Temporal Service runs Frontend, History, Matching and Worker services plus a persistence store and a separate visibility store. Trigger.dev self-hosting splits into a webapp with the dashboard, Redis and Postgres, and a worker with the supervisor and runners. Ask the vendor or your platform team to list every named component, its replica count and its storage. For Temporal, confirm whether you need Elasticsearch or OpenSearch for visibility, since the docs recommend it beyond a few workflow executions.

Skilled staff to operate

Most of the recurring cost is people: engineers who operate the cluster, tune persistence, rotate certificates and respond to incidents. Temporal's security model needs you to configure mTLS, a ClaimMapper and an Authorizer, and the default noopAuthorizer allows every request until you change it. Trigger.dev's stack is smaller but still needs Redis and Postgres operations. Request the operating model in writing: who is on call, which tasks the vendor performs and which stay with your team.

Upgrade effort and schema steps

Temporal Server should move one minor version at a time, to the latest patch of the current minor first, because backward compatibility is guaranteed only between successive minor versions. Schema upgrades must run before server upgrades when release notes call for them. Trigger.dev's move from v3 to v4 is a separate cost: 4.5.0 is the last version that officially runs v3 tasks, and 4.5.1 and later reject v3 triggers and deploys. Ask for an upgrade plan with named versions, a test environment and rollback steps in the scope.

Vendor support and tiers

Support is a purchase decision with different options per platform. Temporal Cloud offers SLA tiers, with a 99.9% SLA or 99.99% with high availability, against a self-hosted service where you own availability. Trigger.dev's self-hosting overview says warm starts, auto-scaling, checkpoints and dedicated support are available only on Trigger.dev Cloud, while community support is available on both. Ask which support hours, response channels and escalation paths each quote includes, and whether the features you need are on the self-hosted side at all.

Managed-service and edition fees

Temporal Cloud is billed on usage, with pay-as-you-go pricing that starts at 50 US dollars per million actions plus storage charges for active and retained data, according to Temporal's pricing page. Trigger.dev Cloud features that the self-hosted build lacks carry their own plan costs. Model the fees against your expected action or run volume and storage retention. Ask the vendor for a quote that names every metered unit, the retention period you assumed and which features sit in each plan.

One-time versus recurring spend

Setup work is one-time: architecture, deployment, identity integration, workflow migration and initial testing. Operations, patching, upgrades, monitoring, storage growth and support renewals recur for as long as you run the platform. Temporal's recurring load grows with execution volume and visibility retention, while Trigger.dev's grows with task volume and worker scaling. Ask each vendor to split the quote into one-time implementation and recurring operations, and state the review point where the recurring estimate changes.

How to move workflows between Temporal and Trigger.dev

This sequence moves workflows between Temporal and Trigger.dev without losing business logic or running executions. Each step closes with a check the team can verify, from inventory sign-off through decommissioning the old stack.

  1. Inventory tasks, waits, schedules and queues

    Your team lists every task, wait, durable cron schedule, queue and concurrency limit in the current system, along with the environments each one runs in. Platform owners record which Trigger.dev version each project runs, because Trigger.dev 4.5.0 is the last version that officially runs v3 tasks, and 4.5.1 and later reject v3 triggers and deploys. This date may set the migration timing. Engineers also note which human-in-the-loop waitpoints depend on external callbacks. Done when the inventory is signed off and every item has a named owner and a target platform.

  2. Sort workflows by replay requirements

    Architects decide which workflows need Temporal's deterministic replay. Strong candidates include workflows with long event histories, multi-step compensation, signals from other services, or state that must survive worker failure and be inspected afterward. Simpler jobs that mostly wait on a timer, a webhook or a human approval may fit Trigger.dev's waits and waitpoints model with less change. Record the decision for each workflow with its owner and reason. Done when every workflow has one target platform and the split is written down before any code is rebuilt.

  3. Rebuild workflow code in the target SDK

    Developers rewrite each workflow in the target SDK, because the two programming models do not convert automatically. Temporal workflow code must follow its deterministic model, and Trigger.dev tasks are written with its TypeScript SDK inside the application codebase. Business logic, schedules as documented in the current system, and team knowledge carry over. SDK code, deployment configuration, observability hooks and, for Temporal, the self-hosted service layout are rebuilt. Done when each rebuilt workflow passes its tests in a non-production environment and the team can name the business rule each code path implements.

  4. Run both systems in parallel with staged traffic

    Platform engineers deploy the new stack beside the old one and move traffic in stages, starting with low-risk workflows and keeping a tested rollback path at each stage. For self-hosted Temporal, confirm authorization before exposing any API, because the default noopAuthorizer allows every request until an Authorizer is configured, and keep services off the public internet. Compare run outcomes, retry behavior and alerts across both systems. Done when results match agreed test cases at each stage and the on-call team has exercised the rollback path.

  5. Hand over in-flight executions before cutover

    For each workflow still running on the old stack, the team decides whether to let it finish, restart it on the new platform or migrate its state. The decision depends on how much work the execution has completed and whether its side effects can safely run again. Owners confirm which external systems each running execution has already called. Developers then verify that new starts route to the new platform while old executions drain. Done when the in-flight list is empty or each remaining execution has a named owner, a completion path and a documented fallback.

  6. Retire the old stack after retention

    After the retention period the team sets has passed with no open executions and no rollback requests, operators disable old schedules, revoke old credentials and archive the run history that policy requires. They then decommission old workers and environments. Logs and audit records required by internal policy stay in storage under their existing controls. Teams on the older Trigger.dev v3 line should confirm the version timeline before setting this window. Done when old schedules are disabled, credentials are revoked, archives open and read correctly, and the decommission ticket is closed.

Where implementation projects on each platform usually run long

On a self-hosted Temporal Service, projects usually slip at the design and persistence stages, before any workflow code is deployed. Teams need to agree on workflow determinism rules early, because workflow code must replay identically from the recorded event history, and changes to running workflows have to be versioned rather than edited in place. Persistence is the next decision. Temporal tests Cassandra 3.11, 4.0 and 5.0.4 or later, PostgreSQL 13 to 16, and MySQL 5.7 or 8.0.19 or later, and SQLite is for development only. Cassandra deployments also need a separate visibility store, so the team should choose visibility (Elasticsearch or OpenSearch for anything beyond a few workflow executions) before the cluster is sized. Security work follows: mTLS for internode and frontend traffic, a ClaimMapper and an Authorizer, since the default noopAuthorizer allows every API request. If you deploy on Kubernetes, confirm that your Helm chart is version 0.73.1 or later, because earlier charts do not work with server images 1.30 and later. Ask your implementation partner to confirm the Authorizer and ClaimMapper design in writing before work starts.

On Trigger.dev, the effort sits more in the application repository and the environment model than in the platform itself. Tasks are written with the TypeScript SDK inside your codebase, so the work includes deciding task boundaries, retry and queue settings, and how waits and waitpoints map to human approvals. The team also needs to define how Development, Staging, Preview and Production environments are wired to deploys and secrets, since each environment has its own run history. On the self-hosted side, the webapp needs Redis and Postgres, and the worker runs the supervisor and runners, so sizing these components is a decision to make before go-live. The most common slip is migration: Trigger.dev 4.5.0 is the last version that officially runs v3 tasks, and 4.5.1 and later reject v3 triggers and deploys. If you have v3 tasks in production, schedule the v4 migration as its own workstream with a cutover plan. Fixed scope and deliverables are agreed in writing before any work begins, so put the migration, environment model and sizing decisions into that scope.

What buyers and engineers ask before choosing or hiring help

How much effort does it take to self-host Temporal compared with Trigger.dev?

Temporal takes more operating effort because a self-hosted Temporal Service runs Frontend, History, Matching and Worker services plus a persistence store and, for advanced visibility, a separate visibility store. The Temporal deployment documentation lists Docker Compose, Go binaries, Helm charts and a custom Go build as options, and tested persistence choices are Cassandra, PostgreSQL and MySQL. Trigger.dev splits self-hosting into a webapp (dashboard, Redis and Postgres) and a worker (supervisor and runners), with Docker Compose and an official Helm chart. The Trigger.dev self-hosting overview also notes that warm starts, auto-scaling and checkpoints are only on Trigger.dev Cloud. Whoever owns the platform needs on-call capacity for the stateful stores, the server and the workers in either case, so confirm that staffing before you choose.

Can our team run Temporal or Trigger.dev without outside help?

A team with platform engineering experience and a TypeScript application team can run either platform, but the effort is in the surrounding work, not the install. For Temporal, the team must configure mTLS, the ClaimMapper, an Authorizer and OIDC for the Web UI, because the default noopAuthorizer allows every API request without authentication. The Temporal deployment documentation also says services should not be reachable from the public internet. For Trigger.dev, the team must manage Redis, Postgres and the worker tier and keep pace with version changes. Outside help is most useful for security hardening, backup design and first production rollout. Ask each vendor's documentation and your own environment to confirm the steps that apply to your network and identity setup.

How long does a typical implementation take, and what sets the timeline?

No duration is given here, because the written scope sets the timeline for each engagement. Most DeployOpen engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts. The main drivers are the number of workflows to port or design, whether the team needs a self-hosted cluster or uses a managed option, the identity and network integration, the persistence choice for Temporal, and how much security testing or compliance evidence is required. A team that already runs PostgreSQL and Kubernetes will usually move faster than one that adds new stateful services. Ask for the timeline as a milestone plan tied to these drivers.

What does the implementation need from our own staff?

Plan for named owners, access and time from your own staff. You will need a named platform owner, a security reviewer for identity and network design, and an application lead who can define workflows and their failure behavior. Access to the target cloud accounts, data center or air-gapped network is required, along with a decision on data classification, since Temporal payloads and Trigger.dev run data may contain sensitive content and Temporal supports payload encryption through custom codecs. Workflow design also takes time from engineers who know the business process. Put these commitments into the written scope so both sides can see what the timeline depends on.

Does Temporal Cloud or Trigger.dev Cloud remove the need for a self-hosted cluster?

Yes, both managed options remove the cluster you would otherwise run, but you trade operating control and data location for that. Temporal Cloud pay-as-you-go pricing starts at 50 US dollars per million actions, with active storage at 0.042 dollars per GB-hour and retained storage at 0.00105 dollars per GB-hour, according to the Temporal pricing page. It also lists a 99.9% SLA or 99.99% with high availability and SAML SSO. Trigger.dev Cloud adds warm starts, auto-scaling, checkpoints and dedicated support, which the self-hosting overview says are not available on self-hosted deployments. Confirm current prices, regions and data residency terms with each vendor, since cost depends on your action volume and storage.

Can we upgrade Temporal and Trigger.dev ourselves, and which versions matter?

Yes, you can upgrade both, but each has version rules you must follow. Temporal guarantees backward compatibility only between two successive minor versions, so upgrade one minor version at a time, moving to the latest patch of the current minor first. Run schema upgrades before server upgrades when the release notes call for them. Helm chart versions below 0.73.1 do not work with server images 1.30 and later. For Trigger.dev, version 4.5.0 is the last that officially runs v3 tasks, and 4.5.1 and later reject v3 triggers and deploys, so any v3 task must be migrated first. Check the Temporal upgrade documentation and the Trigger.dev releases page before scheduling each step.

How do we request a quote for a Temporal or Trigger.dev engagement?

Send a written scope that names the platform, the number of workflows or tasks, the hosting target, the identity and network requirements, the data classification and the security or compliance evidence you need. DeployOpen does not publish a price list, and a quote follows from that written scope. Ask for deliverables, milestones, responsibilities on each side, support or retainer options after go-live, and what is excluded. Also ask how the quote treats your upgrade plan, since Temporal and Trigger.dev release changes affect later work. Use the Temporal and Trigger.dev documentation linked on this page to check the technical assumptions in your scope before you ask for a quote.

How DeployOpen helps teams choose, implement or migrate

DeployOpen plans, implements and supports self-hosted open-source platforms inside your own cloud accounts, data centers or air-gapped networks. For the Temporal vs Trigger.dev decision, we start by agreeing on the workloads, the team that will write and operate the code, and the infrastructure the platform must run on before any build work begins.

How we scope

  • Engagements are fixed-scope, with deliverables and timelines agreed in writing before work starts.
  • We map which long jobs, AI agent tasks and scheduled workflows need durable execution and which need simple background tasks.
  • The written scope names the target deployment, whether Docker Compose, Kubernetes or a Go build, and the persistence store.

How we build

  • We plan the Temporal Service or Trigger.dev webapp and worker topology, including Redis and Postgres for Trigger.dev and Frontend, History, Matching and Worker services for Temporal.
  • We configure identity, including mTLS, a ClaimMapper, an Authorizer and OIDC single sign-on for the Temporal Web UI, or the equivalent controls for Trigger.dev.
  • We test workflow versioning, retries and failure recovery against the task code your TypeScript team actually ships.

How we hand over

  • Handover includes architecture documentation, runbooks for upgrades and the operational checks your team will repeat.
  • We document the Temporal upgrade path, one minor version at a time with schema upgrades first where release notes require them.
  • We deliver configuration, network placement and access controls so your team can operate the platform without us.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers after handover.
  • Retainers can cover tracking of Temporal and Trigger.dev release lines so patch and minor upgrades are planned, not reactive.
  • Confirm with us in the quote which support tier, response expectations and upgrade cadence the retainer includes.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.