agentsclimarketplace

Mobile architecture decisions

Skill almasumdev/awesome-mobile-agent-skills/.github/skills/planning/mobile-architecture-decisions

Stack-agnostic agent skills and workflows shared across iOS, Android, Flutter, React Native, and KMP.

Install
npx -y skills add almasumdev/awesome-mobile-agent-skills --skill mobile-architecture-decisions

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

How to write and maintain Architecture Decision Records (ADRs) for mobile teams, and the canonical set of decisions every mobile project must record. Use when starting a project or when an architectural change is being proposed.

SKILL.md

5.4 KB, as published. Nobody here has run it

Mobile Architecture Decisions

Instructions

Most mobile architecture debates repeat across projects. Capture decisions in Architecture Decision Records (ADRs) so the agent and future contributors inherit context instead of re-arguing it.

1. ADR Format

Keep ADRs short, markdown, and numbered. One decision per file under docs/adr/.

# ADR-0007: Use Coroutines + Flow for Android Domain Layer

## Status
Accepted 2026-04-19. Supersedes ADR-0003.

## Context
- We had RxJava in the legacy Android app; iOS uses Combine.
- New domain logic is being shared via KMP.

## Decision
Use Kotlin Coroutines and Flow in the shared domain and Android presentation.
Bridge to Swift via KMP suspend interop; do not introduce RxSwift on iOS.

## Consequences
+ One async primitive across Kotlin codebases.
+ Structured concurrency is a first-class feature.
- Swift side needs adapter helpers for Flow collection.
- RxJava usages in legacy modules must be migrated or frozen.

Lifecycle states: Proposed, Accepted, Superseded by ADR-NNNN, Deprecated. Never delete ADRs.

2. Canonical Mobile ADR Set

Every mobile project should have accepted ADRs covering at least:

  1. Stack choice (see mobile-tech-stack-selection).
  2. Minimum OS versions and the policy for dropping them.
  3. Architecture pattern -- MVVM, MVI, TEA, Redux, Clean, etc.
  4. Navigation approach -- coordinator, declarative router, stack-based.
  5. State management library -- Riverpod, BLoC, Redux Toolkit, Compose state, SwiftUI state.
  6. Networking layer -- URLSession, Retrofit, Ktor, Dio, fetch/axios, generated client.
  7. Persistence -- SQLite wrapper, Room, Core Data, Drift, SQLDelight, Realm.
  8. DI strategy -- constructor, Hilt, Koin, Riverpod, SwiftUI EnvironmentObject.
  9. Error model -- sealed error types, Result, exceptions, typed failures.
  10. Observability stack -- crash reporter, analytics, logging, performance.
  11. Feature flag system -- config service, build-time flags, remote config.
  12. Release strategy -- staged rollout percentages, kill switches, flavors.
  13. CI system and signing -- GitHub Actions, Bitrise, Codemagic, Xcode Cloud.
  14. Privacy boundaries -- what leaves the device and through which SDK.

3. How to Propose a New ADR

An ADR becomes mandatory when a decision:

  • Affects more than one module or platform.
  • Is expensive to reverse (migrations, data model, public API surface).
  • Introduces a new runtime dependency.
  • Changes the deployment or compliance surface.

Otherwise, a code comment or CODEOWNERS note is enough.

4. Decision Anti-Patterns

  • Whiteboard-only decisions. Write them down, even a week late.
  • Implicit decisions. "We are using X because it is already there" must still become an ADR if any of the triggers in Section 3 apply.
  • Mega-ADRs. Split decisions so each can be superseded independently.
  • Vague consequences. Name specific costs (binary size, startup time, team learning curve).

5. Example Matrix of Architectural Decisions per Stack

Use this to seed ADRs on day one. Adjust to the chosen stack.

ConcernNative iOSNative AndroidFlutterReact NativeKMP
UI patternSwiftUI + MVCompose + MVVMWidgets + Riverpod/BLoCRN + hooks + Redux/ZustandCompose MP or native UI
NavNavigationStackNavigation-Composego_routerReact Navigationexpect/actual + platform nav
Asyncasync/awaitCoroutines + FlowFuture / Streamasync/await + RxJS optionalCoroutines + Flow
PersistenceCore Data / SwiftDataRoomDrift / sqfliteWatermelonDB / SQLiteSQLDelight
DIplain init + EnvironmentObjectHilt / KoinRiverpod / get_itplain context / DI libsKoin
HTTPURLSessionRetrofit / KtorDiofetch / axiosKtor
Errorstyped enums + Resultsealed class + Resultsealed unions (freezed)discriminated unionssealed class

6. Keeping ADRs Alive

  • Link the ADR index from the top of the README.
  • Require an ADR reference in the PR template for any change touching the listed surfaces.
  • Review ADRs quarterly; supersede anything that no longer matches reality.
  • When onboarding, read the ADR index before reading code.

7. Example ADR Index Snippet

# Architecture Decisions

| # | Title | Status |
| --- | --- | --- |
| 0001 | Mobile stack: KMP + native UI | Accepted |
| 0002 | Minimum iOS 15 / Android 24 | Accepted |
| 0003 | Compose MVVM with unidirectional data flow | Accepted |
| 0004 | Networking via Ktor shared client | Accepted |
| 0005 | SQLDelight for persistence | Accepted |
| 0006 | Crashlytics + Sentry for releases | Accepted |
| 0007 | Coroutines + Flow async model | Accepted |

Checklist

  • docs/adr/ exists with the canonical ADR set for the project.
  • Each ADR has Status, Context, Decision, Consequences, and a date.
  • ADRs are numbered and never deleted, only superseded.
  • PR template references ADR IDs for architectural changes.
  • ADR index is linked from the README.
  • Decisions that span platforms call out per-platform consequences.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.