# Parallel investigation (/use-cases/deep-research/parallel-investigation)



Place independent specialist steps in a Workflow `Parallel` block. Each step in the block runs concurrently, and the Workflow waits for the block to finish before continuing. In this review, fundamental and technical analysis both start after market assessment and complete before risk assessment.

These are composition examples adapted from the [Investment Team application](https://github.com/agno-agi/investment-team). Follow its [clone, database, credentials, and research-loading setup](https://github.com/agno-agi/investment-team#quick-start) for a complete application. Its [`agents/`](https://github.com/agno-agi/investment-team/tree/main/agents), [`teams/`](https://github.com/agno-agi/investment-team/tree/main/teams), and [`workflows/`](https://github.com/agno-agi/investment-team/tree/main/workflows) define the components referenced here; [`agents/settings.py`](https://github.com/agno-agi/investment-team/blob/main/agents/settings.py) supplies shared knowledge and paths.

Import those components into your application module, or define your own before composing them. The application uses Gemini; the OpenAI variants on these pages require `uv pip install "agno[openai]"` and `OPENAI_API_KEY` as well. Shared knowledge/storage still needs the application's database and embedding-provider setup. Prose context, analyst-output variables, and local archives must be supplied by your application.

```python
from agno.workflow import Parallel, Step, Workflow

workflow = Workflow(
    id="review",
    name="Deep Dive Review",
    steps=[
        Step(name="Market Assessment", agent=market_analyst),
        Parallel(
            Step(name="Fundamental Analysis", agent=financial_analyst),
            Step(name="Technical Analysis", agent=technical_analyst),
            name="Deep Dive",
        ),
        Step(name="Risk Assessment", agent=risk_officer),
    ],
)

result = workflow.run("Run a full review on NVDA")
final = result.content  # the last step's output

# Gotcha: result.step_results is positional, and a Parallel block is one
# StepOutput whose .steps holds the sub-steps, not flattened:
#   [ StepOutput("Market Assessment"),
#     StepOutput("Deep Dive", steps=[StepOutput("Fundamental Analysis"),
#                                    StepOutput("Technical Analysis")]),
#     StepOutput("Risk Assessment") ]
```

Market assessment runs first. Fundamental and technical analysis both use that market context, so they run together. Risk assessment starts after both analyses finish.

## Two ways to fan out [#two-ways-to-fan-out]

| Shape                         | Use when                                                          |
| ----------------------------- | ----------------------------------------------------------------- |
| `Parallel` step in a Workflow | The investigations and their position in the step graph are fixed |
| Broadcast Team                | A lead should synthesize independent opinions on one question     |

A Broadcast team is the adaptive version: every member evaluates the same question simultaneously and the lead reconciles them. See [Orchestration patterns](/use-cases/deep-research/orchestration-patterns#broadcast-independent-evaluations-one-synthesis).

## Model the dependencies [#model-the-dependencies]

Use the step graph to express data dependencies. Group steps that share the same prerequisite in `Parallel`. Place downstream steps after the block.

| Step                 | Depends on       | Runs                         |
| -------------------- | ---------------- | ---------------------------- |
| Market assessment    | Research request | First, alone                 |
| Fundamental analysis | Market context   | In parallel with technical   |
| Technical analysis   | Market context   | In parallel with fundamental |
| Risk assessment      | Both analyses    | After the parallel block     |

## Reduce research latency [#reduce-research-latency]

Running independent analyses concurrently reduces wall-clock latency while preserving each specialist's full analysis.

## Next steps [#next-steps]

| Task                            | Guide                                                                     |
| ------------------------------- | ------------------------------------------------------------------------- |
| Choose the orchestration shape  | [Orchestration patterns](/use-cases/deep-research/orchestration-patterns) |
| Ground each parallel specialist | [Grounding research](/use-cases/deep-research/grounding-research)         |
| Synthesize into one artifact    | [Structured deliverable](/use-cases/deep-research/structured-deliverable) |

## Developer Resources [#developer-resources]

* [Parallel workflows](/workflows/workflow-patterns/parallel-workflow)
* [Parallel execution cookbook](https://github.com/agno-agi/agno/tree/main/cookbook/04_workflows/04_parallel_execution)
