Skip to main content
Get The App
All articles
ArchitectureFebruary 13, 2024· 6 min read

Five Mobile Architecture Myths That Keep Slowing Teams Down

Pattern names get used as proxies for quality. Here are five misconceptions about iOS architecture that appear in interviews, design docs, and production codebases.

Mobile architecture discussions tend to generate more heat than clarity. Pattern names get used as proxies for quality. Decisions that should be contextual get treated as universal rules. Developers who can name every layer in Clean Architecture sometimes struggle to explain why each layer exists.

This article examines five misconceptions that appear repeatedly in iOS codebases, technical interviews, and team design discussions — and what a more grounded understanding looks like.

What architecture actually is

A useful working definition: architecture is the set of rules a team follows when writing code, beyond the product requirements. This includes patterns, naming conventions, module boundaries, team agreements — anything that shapes how the codebase is structured.

Two conditions make these rules useful. First: they're written down, not stored only in the most experienced developer's head. Second: the reason for each rule is documented alongside the rule itself. Rules without rationale become cargo cult — the reason that justified them expires, but the rule stays.

The best architecture is the one that minimizes total development cost over the product's lifetime — not the one with the most layers, the most recognized name, or the one the team learned at their last job.

Myth 1: MVC, MVVM, or VIPER is "the architecture"

MVC and MVVM are UI patterns — they describe the relationship between data, presentation logic, and view rendering. They say nothing about module boundaries, data flow between features, shared state management, or caching strategy. An app can implement MVVM flawlessly and still have no coherent answer to "how do two unrelated screens share data?"

Referring to a UI pattern as the app's architecture is like describing a building's architecture by naming the type of windows. It describes one component accurately while leaving everything else undefined.

Myth 2: Architecture is independent of the team

Architecture should match the people implementing it. A set of patterns that works excellently for a team of senior iOS engineers becomes a liability for a team of mid-level developers who haven't encountered those patterns before. The most technically correct architecture that the team can't maintain consistently is worse than a simpler one they can.

This cuts both ways. Underestimating the team leads to over-documentation and restrictive rules that slow experienced engineers down. Overestimating it leads to inconsistent implementation and technical debt.

Myth 3: Business logic belongs in UseCase objects

Use cases (or interactors) are a useful abstraction in many contexts. The misconception is treating them as the mandatory and exclusive home for all business logic. In practice, what belongs in a use case depends on what's being coordinated.

Simple derivations — computing a formatted price, filtering a list — often belong directly in the model or a simple function. Creating a use case for every operation adds structural overhead that doesn't improve testability or reduce coupling; it just adds files.

Myth 4: The UI layer is "on top"

In architectural diagrams, the UI is often drawn at the top or outermost edge, which implies it's the least important — the skin over the real application. This framing leads to underinvestment in UI layer architecture.

In mobile apps, the UI layer is where users spend 100% of their time. Its state management, animation logic, and responsiveness are what users evaluate when deciding whether the app is good. The UI being "external" doesn't make it less critical — it makes it the most visible expression of everything underneath.

Myth 5: More layers means better architecture

Clean Architecture, as described, has many layers. Applied thoughtfully, it creates meaningful separation between concerns with different rates of change. Applied literally, it produces a codebase where adding a new string field requires touching seven files.

Layer count is not a quality metric. What matters is whether each boundary provides a meaningful seam — a place where implementation can change without affecting other parts of the system. If two layers always change together, they aren't actually separated.

  • Add layers when they provide testability or changeability that justifies the overhead
  • Flatten layers when they travel in lockstep and provide no independent value
  • Prefer fewer well-maintained layers over many layers with inconsistent implementation

What all five myths have in common

Each mistake involves applying a principle without understanding why it was introduced. Use cases exist to isolate business logic for testability and reuse — not to organize files by type. Layers exist to absorb change in one area without rippling through others — not to demonstrate architectural rigor.

Architecture decisions should answer specific questions: How do we create a module? How do screens share data? Where does state live? When do we cache? If a pattern answers these questions well for the team's context, it's the right pattern. If it doesn't, the name of the pattern doesn't matter.

The clearest test of any architectural decision: can every developer on the team explain why it exists and what it prevents? If not, it's a rule without a rationale — and those are the rules that get inconsistently applied and eventually abandoned.

Ready to build?

Tell us about your project

Free estimate within 48 hours. No commitment required.

Get a free estimate