The anatomy of mobile friction
A mobile experience either feels like an extension of your thought or an obstacle course. There is rarely an in-between.
When an interface delays by 150 milliseconds on tap, or shifts layout unexpectedly because an image loaded late, users don’t just experience latency—they lose confidence in the system’s stability.
When designing concepts like Rail Companion, I realized that people checking train schedules are frequently underground, moving through crowded stations, or juggling luggage. They need instantaneous feedback and clear typography that is legible under direct sunlight.
Optimistic UI and tactile response
One of the highest-leverage engineering patterns is pairing optimistic state mutations with deliberate tactile feedback.
Rather than blocking the UI with a spinner while a network request completes, update the interface immediately while maintaining an error recovery queue in the background.
// Instant visual feedback with rollback guarantee
function useActionMutation<T>(initialState: T, actionFn: (data: T) => Promise<void>) {
const [state, setState] = useState(initialState);
const [isPending, startTransition] = useTransition();
const trigger = (optimisticValue: T) => {
const previous = state;
setState(optimisticValue); // Instant feedback
startTransition(async () => {
try {
await actionFn(optimisticValue);
} catch (err) {
setState(previous); // Graceful rollback
notifyUser('Action could not be synced.');
}
});
};
return { state, trigger, isPending };
}Designing for varying light and screen sizes
Modern responsive design goes beyond just media queries. It means using dynamic viewport units (`dvh`, `svh`), ensuring target touch areas never fall below 48x48 points, and maintaining contrast ratios that remain readable even with glare.
By testing directly on entry-level Android and iOS devices under constrained 3G conditions, bottlenecks reveal themselves that would never show up on a high-spec development laptop.
“If your app doesn’t work reliably on a crowded train with spotty signal, it doesn’t truly work.”
— Engineering Notes