Skip to main content
Back to Blog
integrations data architecture philosophy

External Data Is Just Another Source

Swifty Team Mar 8, 2026 4 min read

There's a conventional division in business software between "your data" and "external data." Your data lives in the application's database. External data lives somewhere else — in another service, behind an API, in a third-party platform. The two are fundamentally different things that require different handling.

We rejected that division. In Swifty, external data is just another data source.

The Problem with the Conventional Model

When internal and external data are treated as fundamentally different, building views that combine them is hard. An internal record with supplementary data from an external service requires custom integration code — a controller that fetches from both sources, merges the results, and passes them to a template that understands the composite shape.

This is standard practice in application development, and it's a tax on every dashboard or view that needs to show data from more than one place. The tax is paid in development time every time the requirement arises.

The Abstraction We Chose

We defined a single interface for all data sources: given configuration and optional filters, return structured items. We then implemented that interface for every source type we support: the application database, external API integrations, monitoring endpoints, static lists, and computed combinations.

Every data source, regardless of its origin, returns data in the same shape. Components consume data sources through that single interface. A table component doesn't know if the data source it's connected to is a database query or an API response. Neither does a chart component, a metrics card, or a filter component.

The components aren't aware of source origin. They're aware of data shape. And because every source returns the same shape, any component works with any source.

What This Enables

The practical consequences are significant:

A dashboard can show monitoring metrics alongside your application's records in the same panel, with the same components, without custom integration code for the combination.

A list of customer records can be enriched with data from an external service — the enriched data appears in standard column format, sortable and filterable like any internal field.

A chart on a dashboard can switch between showing internal data and external data by changing the data source configuration — the chart component stays the same.

The Cost

Building the abstraction layer requires upfront investment. Every new source type needs to implement the interface correctly. The interface itself must be stable — if it changes, everything that implements it changes too. We made that investment because we believed the payoff would be worth it.

The payoff has been real. Every time we add a new external data integration, it becomes immediately usable with every existing component. No custom glue code for each new combination. The abstraction multiplies the value of each addition.

Internal data and external data are different in origin, but they're the same in the interface. That's the decision that makes composable dashboards possible.

Related posts

Composed Data Sources

Chain and relate data sources for rich dashboards — compose complex data views from simpler sources without writing code.

Computed Expressions

Transform data with template expressions and built-in functions — format, combine, and derive values from your data without code.

Cross-Source Data Joins

Combine data from multiple sources in one view — join records from your database with data from external services using a shared key.