Skip to contact form
← BlogProcessJanuary 4, 2026 · 7 min read

One team, every surface

Why the same hands write the website and the iOS app, and what that actually costs us.

ost software gets built by two teams that never talk. One ships the website, the other ships the app, and the seam between them shows up as the thing users notice first — a feature that exists on one platform and not the other, copy that drifted apart after the first rewrite, a login flow that behaves differently depending on where you tapped it from. Nobody planned that inconsistency. It is just what happens when two separate groups own two separate halves of one product.

Weavoidthatseambynevercreatingit—thepersonwhowritesyourAPIisthesamepersonwhoconsumesitinSwift.

It is not that we are twice as productive as two specialized teams — we are not. It is that a decision made for the web side is felt immediately on the native side, by the same person, in the same day, instead of being relayed through a meeting, a ticket, and a Slack thread that loses context on the way. When we change how a resource is shaped in the backend, the TypeScript types and the Swift models get updated in the same sitting, because nothing is waiting on someone else's sprint.

typescript

// One shape, defined once, consumed twice. export type Project = { id: string; title: string; status: 'draft' | 'active' | 'shipped'; updatedAt: string; // ISO 8601 }; // The Swift side mirrors this by hand today — same fields, // same order, reviewed in the same PR as the TS change. // struct Project: Codable { // let id: String // let title: String // let status: Status // let updatedAt: String // }

That mirroring is manual right now, which is deliberate — we would rather feel the friction of keeping two type systems in sync by hand than hide it behind a code generator we don't fully trust yet. The friction is a signal. If it starts to hurt, that's the point at which generating the Swift models from the TypeScript source earns its complexity. It hasn't yet.

The honest tradeoff is capacity. A small studio that does both surfaces will always ship fewer total projects at once than two separate specialist shops running in parallel. We are not the fastest option if you need five features shipped simultaneously across a large team. What we are is the option where nothing gets lost in the handoff, because there is no handoff — the same people move from one file to the other.

The commercial advantage is not that one developer can type every language from memory. It is that decisions are made once. Authentication, permissions, naming, analytics, accessibility, release sequencing, and the definition of a finished feature are shared concerns. When separate suppliers own each surface, the client becomes the person responsible for discovering that the website calls something an account while the app calls it a profile, or that one team expected an API the other never agreed to provide.

  • One product backlog: a feature is defined for the business first, then translated to each platform.
  • One data model: customer, order, booking, and subscription rules do not drift between web and app implementations.
  • One release conversation: changes that affect several surfaces are sequenced together instead of discovered during handover.
  • One owner for cross-platform faults: the client is not asked to decide which supplier caused the problem before anybody investigates it.

That does not mean every screen should be identical. A Mac app should behave like Mac software, and an iPhone app should respect the patterns people already know on iOS. Shared ownership should produce consistent rules and platform-specific interfaces, not the same layout stretched across four devices.

A single studio is not automatically the right structure. A large programme may need specialist security, data, accessibility, or embedded-systems teams whose depth matters more than reducing handoffs. The important question is who owns the boundaries. If several suppliers are involved, the contract and delivery plan should name who owns the API, the shared design system, acceptance testing, release coordination, and faults that cross systems.

Want this kind of thinking on your project?

This is how we work through real decisions. If you're weighing a build of your own, tell us about it — we reply within one working day.