# Zooming in

> The OPM language · https://spoletta.com/docs/zooming

OPM keeps big systems readable by zooming: a process can contain a diagram of its own sub-processes. In Spoletta that is a **flow process**, and the objects it takes and yields outside are its interface inside.

*Diagram: Outside: one flow process between a list it takes and a list it yields.*

*Diagram: Inside: the same Exceptions and Outcomes, drawn dashed as they belong to the board outside. Here Exceptions is one item.*

## Zooming in and out

-   Double-click a flow process, press its magnifier (**Zoom in**), right-click it and choose **Zoom in**, or press **Open its board** in its settings.
-   A breadcrumb at the top of the canvas, *Flow › Each exception*, takes you back out.
-   To turn processes you already drew into a flow process, select them (shift-click or drag a box) and press **Group into flow** in the toolbar.

## The interface

Nothing is declared twice. The objects linked to the flow process outside are the **same objects** inside:

-   What it takes sits above the inner Start and leads into it; what it yields sits above End.
-   They are drawn dashed. You can move them, but not delete them from inside.
-   Processes inside link to them directly. The inner Start's process is given everything the flow process was given, linked to it or not.

## Once per item

When a flow process takes a **list**, it runs once per item, and inside it the list object *is the item*. Whatever the inner processes generate of a list the flow process yields is one item of it, and the items are collected into the list outside. Each item gets its own git branch, so items running at once don't meet.

Tick **Record each time it runs as a run of its own** and each item becomes a run of its own, listed under the outer run, whose failure or duplicate only ends that item's branch. See [Lists and items](https://spoletta.com/docs/lists.md).

OPL:

```text
Each exception is a flow process, made of processes of its own.
Each exception takes Exceptions.
Each exception yields Outcomes.
Each exception zooms into:
  Fix takes Exceptions.
  Fix yields Patch.
  Open PR yields Outcomes.
  Each exception starts with Fix.
```

> **Note:** Zooming into a *procedure* process works differently: it opens the procedure's own page, because the procedure is a flow of its own. See [Procedures](https://spoletta.com/docs/procedures.md).
