- Task frequency mapping
- We rank every user action by how often it genuinely occurs, then structure navigation so daily tasks are immediate and rare ones are merely reachable. This single exercise resolves most navigation arguments, because it replaces opinion with a usage-shaped ordering.
- Interaction flows including the unhappy paths
- Every significant flow mapped end to end, including what happens when a request fails, a session expires, input is rejected, or the user abandons halfway and returns. Unhappy paths are the majority of real usage and the minority of most design deliverables.
- A component system with real tokens
- Type scale, spacing, colour and elevation defined as tokens, with every component specified across its states — default, hover, pressed, focused, disabled, loading, error, empty. Handed over so your engineers implement one system rather than interpreting comps.
- Platform-native conventions respected
- iOS and Android have different navigation patterns, gesture expectations and system behaviours, and users notice when an app ignores them. We design to platform conventions rather than forcing one visual system across both and calling it consistency.
- Accessibility as an interface requirement
- Touch targets sized properly, contrast verified against actual backgrounds including over imagery, dynamic type supported so the layout survives larger text sizes, and screen reader labelling specified. Mobile accessibility failures are structural and expensive to retrofit.
- Prototypes tested before engineering starts
- Interactive prototypes of the core flows put in front of real users while changes still cost hours rather than sprints. Testing five people on a prototype routinely surfaces problems that would otherwise be found by a public release.