# Flow Control

Flow control is a critical part of building robust applications. It allows you to manage the flow of data and events through your application which can help you manage resources, prevent overloading systems, and ensure that your application is responsive and reliable.

There are several methods to manage flow control for each Inngest function. Learn about each method and how to use them in your functions:


<CardGroup cols={1}>
  <Card title=

import {
  RiGitPullRequestFill,
  RiSlowDownFill,
  RiSkipRightFill,
} from "@remixicon/react";

Concurrency" icon={<IconConcurrency className="text-basis h-4 w-4" />} href={'/docs/guides/concurrency'}>
    Limit the number of executing steps across your function runs. Ideal for limiting concurrent workloads by user, resource, or in general.
  </Card>
  <Card title="Throttling" icon={<RiSlowDownFill className="text-basis h-4 w-4" />} href={'/docs/guides/throttling'}>
    Limit the throughput of function execution over a period of time. Ideal for working around third-party API rate limits.
  </Card>
  <Card title="Rate Limiting" icon={<RiSkipRightFill className="text-basis h-4 w-4" />} href={'/docs/guides/rate-limiting'}>
    Prevent excessive function runs over a given time period by _skipping_ events beyond a specific limit. Ideal for protecting against abuse.
  </Card>
  <Card title="Debounce" icon={<IconDebounce className="text-basis h-4 w-4" />} href={'/docs/guides/debounce'}>
    Avoid unnecessary function invocations by de-duplicating events over a sliding time window. Ideal for preventing wasted work when a function might be triggered in quick succession.
  </Card>
  <Card title="Priority" icon={<RiGitPullRequestFill className="rotate-90 text-basis h-4 w-4" />} href={'/docs/guides/priority'}>
    Dynamically adjust the execution order of functions based on any data. Ideal for pushing critical work to the front of the queue.
  </Card>
</CardGroup>

{/* NOTE - Should we include 'delaying for flow control - e.g. using the ts' */}