---
title: Foundations
description: Learn the core concepts of workflow programming to build durable, long-running applications.
type: overview
summary: Explore the core concepts you need to use workflows effectively.
related:
  - /docs/foundations/workflows-and-steps
  - /docs/getting-started
---

Workflow programming can be a slight shift from how you traditionally write real-world applications. Learning the foundations now will go a long way toward helping you use workflows effectively.

<Cards>
    <Card href="/docs/foundations/workflows-and-steps" title="Workflows and Steps">
        Learn about the building blocks of durability
    </Card>
    <Card href="/docs/foundations/starting-workflows" title="Starting Workflows">
        Trigger workflows and track their execution using the `start()` function.
    </Card>
    <Card href="/docs/foundations/errors-and-retries" title="Errors & Retrying">
        Types of errors and how retrying work in workflows.
    </Card>
    <Card href="/docs/foundations/hooks" title="Webhooks (and hooks)">
        Respond to external events in your workflow using hooks and webhooks.
    </Card>
    <Card href="/docs/foundations/streaming" title="Streaming">
        Stream data in real-time to clients without waiting for the workflow to complete.
    </Card>
    <Card href="/docs/foundations/serialization" title="Serialization">
        Understand which types can be passed between workflow and step functions.
    </Card>
    <Card href="/docs/foundations/idempotency" title="Idempotency">
        Prevent duplicate side effects when retrying operations.
    </Card>
    <Card href="/docs/foundations/versioning" title="Versioning">
        Understand how runs stay pinned to deployments and when to opt in to newer code.
    </Card>
</Cards>
