Internal Developer Portals & Service Catalogs4 min readUpdated September 2026

Backstage vs Port for a Growing Automation Runner Fleet

Automation shops accumulate workflows faster than anyone documents them: a scraper here, a model-routing service there, most of it deployed by whoever built it that week. Once that sprawl crosses a few dozen client-facing jobs, choosing between Backstage and Port stops being about developer experience and becomes a question of which tool can absorb your homegrown runners without costing you engineering weeks you would otherwise bill to clients.

Vendors Covered in this Article

Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.

The Plugin Tax on Non-Standard Tooling

Backstage's catalog understands services that look like services: a Git repository, a deployable container, a defined API. A lot of automation tooling doesn't fit that shape cleanly. A workflow runner built on a queue and a handful of serverless functions, or a scraper that runs on a schedule with no persistent endpoint, needs a custom Backstage plugin or a creative reinterpretation of the entity model to show up in the catalog correctly.

Writing that plugin is real engineering time, and it's time spent on internal tooling instead of the automation work clients pay for. An agency with a handful of unusual runner types can end up needing several custom integrations before the catalog reflects what they've actually built.

Where Port's Open Schema Helps and Where It Doesn't

Port's blueprint model can describe a workflow runner as its own entity type without requiring a plugin, since you're defining fields and relationships through configuration rather than code. That gets you further, faster, for anything that doesn't map cleanly onto a traditional microservice. What it doesn't do is automatically ingest data from wherever your runners actually log their status, which for a lot of homegrown automation tooling is a custom log format or a proprietary dashboard, not a standard API Port already knows how to read.

You'll still need to build the connection between your runner fleet and Port's blueprint, just through a webhook or a scheduled sync script rather than a full plugin. That's usually less work than a Backstage plugin, but it's not zero.

A Runner Inventory Exercise Worth Doing Either Way

Before evaluating either tool, list every distinct type of automation you run for clients: browser-based scrapers, LLM-routing services, scheduled batch jobs, webhook listeners. For each type, note whether it exposes any status endpoint at all, or whether the only way to know it's healthy is checking logs by hand. Say six of your nine runner types have no status endpoint: that's the real integration work ahead of you, independent of which portal you buy, and it's worth budgeting before you sign anything.

Teams that skip this step often discover the gap only after rollout, when half their catalog shows green because nobody built the health check that would show otherwise. That false sense of coverage is worse than an empty catalog, because it tells a client their automation is healthy right up until the moment it visibly isn't. A failed deploy into a runner without a status check is exactly the kind of change failure DORA's data tracks, and its clusters show failure rates ranging from about 5% for the most disciplined, standardized teams to 40% for teams shipping without that discipline, a spread that maps closely onto whether a health check existed before the change went out1.

Work through the inventory in this order:

  1. List every distinct type of automation you run for clients, such as browser-based scrapers, LLM-routing services, scheduled batch jobs, and webhook listeners.
  2. For each type, note whether it exposes any status endpoint at all or whether checking logs by hand is the only health check.
  3. Count the types with no status endpoint, since those need custom plugins or extra blueprint fields to appear correctly in a catalog.
  4. Rank the types by how many client jobs depend on them, and evaluate each tool against the top of that list first.

When the Maintenance Question Tips Toward Port

If your team is small enough that the same three engineers build client automations and maintain internal tooling, a self-hosted Backstage instance competes directly with billable work for their attention. That's the scenario where Port's hosted model, even with less flexibility for unusual entity types, usually wins on total time spent, because the maintenance burden that would otherwise fall on your automation engineers moves to the vendor instead. It's also where standardizing on one deploy path pays off fastest in deployment frequency terms: shops that ship client workflows through a consistent, catalog-aware pipeline tend to land in the faster-shipping DORA clusters instead of the slowest one, where months can pass between releases2.

The calculation flips once you're large enough to have a dedicated platform hire whose job is exactly this kind of tooling. At that point, Backstage's flexibility for modeling non-standard runners without waiting on a vendor's roadmap becomes a real advantage, since you're not competing with billable work for that engineer's time the way a generalist team would be.

What a Silent Failure Actually Costs You

Say a scraper for a client's competitor-pricing feed quietly stops running for eleven days because nobody had a health check on it, and the client only notices when their own pricing team asks why the numbers look stale. Fixing the runner itself takes an engineer twenty minutes. Rebuilding the client's confidence takes a lot longer: an apology call, a postmortem you didn't budget time for, and quite possibly a discount on the next invoice to keep the relationship intact. None of that shows up as an engineering ticket, but all of it is real cost.

Burn multiple, which measures how efficiently your spend converts into new revenue, is sensitive to exactly this kind of unbilled firefighting, since unplanned engineering hours spent recovering from a preventable failure drag on that ratio the same way any other unbudgeted cost does3. The fix isn't a bigger monitoring budget across the board, it's closing the specific health-check gaps your runner inventory already surfaced, starting with whichever client relationship you can least afford to strain.

Executive Capability Standard

What Good Looks Like

An automation shop can list every runner it operates for every client, know which ones have working health checks, and add a new runner type to the catalog without a multi-day engineering detour.

Building The Capability (5-Stage Skill Ladder)

1. Learn:Inventory every distinct automation type you run for clients and note which ones already expose a status signal versus which ones don't.
2. Do Manually:Keep a shared runbook per client listing what runs, where, and who to page if it silently stops, independent of any catalog tool.
3. Delegate:Assign one engineer to own the health-check gap for non-standard runner types before you evaluate either portal tool.
4. Automate:Build the webhook or sync layer that reports runner status into whichever portal you pick, starting with your highest-volume client workflows.
5. Buy:Bring in a platform engineer for a short engagement to design the entity model for your non-standard runners correctly the first time.

How to Get Started

Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.

Vanta

When an enterprise client asks for evidence that your automation infrastructure meets a security baseline before they'll connect it to their data, Vanta can produce that evidence from the same services your catalog already tracks.

Visit Vanta→

Frequently Asked Questions

Can Port catalog a workflow that has no persistent endpoint, like a scheduled scraper?

Yes, through a custom blueprint that represents the runner as an entity with status fields you update via webhook or scheduled sync, rather than Port polling a live endpoint the way it would for a standard service.

Is writing a custom Backstage plugin for our runner type ever worth it?

It can be, if that runner type is central to most of your client work and you expect to add many instances of it. For a one-off or rarely used automation pattern, the plugin development cost usually outweighs the cataloging benefit.

How do we handle client automations that run on the client's own infrastructure instead of ours?

Both tools can catalog external or client-hosted resources as entities without controlling them directly, useful for documenting ownership and status even when you don't operate the underlying infrastructure yourself.

Sources

Where we quote a benchmark, we show its source. Other figures in this guide are estimates or general guidance, so check them against your own numbers.

  1. Change failure rate by DORA performance cluster. DORA Accelerate State of DevOps 2024 (Google Cloud), cluster table via Octopus Deploy analysis, 2024.
  2. Deployment frequency by DORA performance cluster (max days between deploys). DORA Accelerate State of DevOps 2024 (Google Cloud), cluster table via Octopus Deploy analysis, 2024.
  3. Burn multiple guidance bands by ARR (net burn / net new ARR). a16z Growth burn multiple framework (Kahl & George, 'A Framework for Navigating Down Markets', May 2022), table transcribed by Kruze Consulting, 2022.

Related Guides