# Implementation

URL: /code/builders/software/implementation · Id: `page:code/builders/software/implementation`

> Each Interface, System, or Verb runs managed, custom, or external, and the Customer's contract stays the same whichever kind runs it.

An [Implementation](/business/nouns/implementation) is how an [Interface](/business/nouns/interface), [System](/business/nouns/system), or [Verb](/business/nouns/verb) of a [Product](/business/nouns/product) runs: managed, custom, or external. The kind can change at any time, and the [Customer](/business/nouns/customer)'s contract never changes with it.

## Three kinds
| Kind | What runs | Who maintains it |
| --- | --- | --- |
| Managed | Code [SoftwareBuilder](/code/builders/software) compiles from the definition | The platform |
| Custom | The [Startup](/business/nouns/startup)'s own code, running on the platform | The Startup |
| External | A server elsewhere, with [api.sb](/code/platform/api-sb) routing each call to it | The Startup or a [Source](/business/nouns/source) |

Managed is the default. Every inherited `create`, `get`, `list`, `update`, and `delete`, every declared rule, and every generated Interface runs managed until the Startup says otherwise.

## Mixed per Verb
One Product mixes kinds freely. episodely.fm sells podcast production to independent shows, and its Product runs managed. Its `Episode.transcribe` Verb runs custom code tuned for crosstalk, and `Episode.syndicate` runs external, on a feed server the Startup keeps elsewhere.

A System can run external too. The Startup keeps the System's [Nouns](/business/nouns/noun) and Verbs and routes them through an [Integration](/business/nouns/integration). It still owns the records, and the outside product is a Source.

## The Function behind the Verb
A [Function](/business/nouns/function) carries each Verb's execution: code, a generative model, an [Agent](/business/nouns/agent), or a [Human](/business/nouns/human). The caller never sees which. Every call returns the same [Action](/business/nouns/action), with the same statuses and the same [Events](/business/nouns/event).

That makes a swap free. episodely.fm's show notes start with a human editor; an Agent then runs the same Verb in shadow, its output graded and never shipped. When an [Evaluator](/business/nouns/evaluator) agrees with the Agent on 95% of a sample, the Agent takes the Verb, and no caller changes a line.

## What stays fixed
The Product's identity never moves with its code. Its [Domains](/business/nouns/domain), [Brand](/business/nouns/brand), Customers, [Tenants](/business/nouns/tenant), [Entitlements](/business/nouns/entitlement), billing, and history stay in place whichever kind runs. Every call still becomes an Action on api.sb.

Moving a Product to external is ejecting, and it changes no address. An ejected Startup keeps its Customers, its revenue, and its books.

## Changes, Versions, and deploys
Some edits are data: copy, an [Offer](/business/nouns/offer), a price, a [Dataset](/business/nouns/dataset) fact. Others are behavior: a new Verb or new custom code. Both arrive as a [Change](/business/nouns/change), previewed on its own branch, checked, and merged as one unit.

Each merge produces a new [Version](/business/nouns/version), an immutable build at a fingerprint. [Deploy](/business/nouns/version/deploy) points the Startup's live address at that Version, and every Interface serves it at once. [Revert](/business/nouns/change/revert) undoes a merged Change with a new one.

A Change to a Live Startup's Nouns or Verbs also faces the [compatibility](/code/builders/software/compatibility) gate. A restyle or a copy edit never does.

## Deploy and publish
A deploy serves code; [publish](/business/nouns/offer/publish) makes an Offer available to accept. A Product is available only when both hold: its Version is live, and an Offer for it is published.

Publishing carries what the Customer relies on, not only code. A Dataset publishes its coverage and terms, and [Software](/business/nouns/software) publishes its Verbs and how Tenants stay apart. An Agent Product publishes the task types it accepts and its eval results.

## Next
[Compatibility](/code/builders/software/compatibility) covers how a Live Startup changes its API without breaking its Customers.