Flutter or native: how we decide for a new app
Most apps should be built once in Flutter. Some should not. Here is the short checklist we run through with every client before writing a line of code.

Clients spend a lot of time choosing between Flutter and native, and almost none asking a question that changes the architecture far more: what should the app do when there is no signal?
For a consumer app used on sofas, the answer is “show a spinner”. For a field sales app, a badge scanner at a trade show, a workshop tracker or a delivery app, the answer decides whether the product works at all.
It does not mean “cache the last screen”. It means the app is designed so that the device is the primary place where work happens, and the server is where that work is synchronised to when a connection exists. Concretely:
An online-only app is a thin skin over an API. An offline-first app has a local database, a sync engine, and a server that can accept changes out of order and resolve them. Adding that to an existing app means rewriting most of the data layer — in our experience, it costs more than building it that way from the start would have.
The reverse is cheap. An offline-first app works beautifully online; it is simply faster.
The backend needs to think in terms of changes rather than snapshots: accept a batch of operations with timestamps, apply them in order, detect conflicts, and tell the client what the resolved state is. Identifiers are generated on the device, not by the database, so records can be created without asking the server for an ID. None of this is exotic, but it is different, and it is far easier when the API is designed for it than bolted on.
If you are in the first list, say so in the first conversation. It is the single most useful sentence a client can put in a brief, and it changes the plan we come back with.
More from the studio.
Most apps should be built once in Flutter. Some should not. Here is the short checklist we run through with every client before writing a line of code.
Most first-submission rejections are avoidable and have nothing to do with code quality. Here is the checklist we run before every release, for both stores.
The exciting choices are the expensive ones. For most products, the right backend is a managed Postgres, a mainstream cloud and as few moving parts as possible. Here is our reasoning, and the exceptions.
A free 30-minute call with a senior engineer. You leave with a plan and a price range, whether or not you hire us.