Build an app you can keep running.
The backend, integrations and release process matter as much as the screens. Plan them around the app’s actual job and the data it handles.
Choose architecture from the constraints
Expected usage, offline needs, device features, data sensitivity and existing systems guide the stack. Record the tradeoffs and recurring-cost assumptions before choosing services.
Connect only what the release needs
Specify each integration’s inputs, permissions, failure behavior and owner. Test against realistic examples. Legacy systems, migrations and uncertain APIs receive their own discovery scope.
Make AI behavior reviewable
Where an app uses AI, define the task, representative examples and unacceptable failures. Keep latency, cost limits, provider settings and human review visible. An attractive demo is not a measured quality result.
Prepare for failures
Use the agreed logging, recovery, backups and rollback approach. Avoid putting secrets in documents or repositories. Give the client a named recovery owner and a tested handoff checklist.
Check the complete journey
Validate the app, API and stored data together for the agreed use cases. Record device and OS coverage, known limitations and release evidence. Independent security assessment or certification is a separate engagement.