Delightful UX for Distributed Systems

In a distributed system, the complexity and challenges that accompany asynchrony, consistency and concurrency make it particularly difficult to build a UX that wows your users.

We'll look at some manifestations of these challenges, and show that, with a small change in how we think, it's easy to arrive at a great result.

Delightful UX for Distributed Systems

Abstract

Long-running processes, concurrent editing, operations requiring user intervention, and integration with unreliable external services present new challenges to building web UIs. Building a pleasurable, robust and reliable user experience is more far more challenging when critical pieces of your workflow are out of your direct control.

We’ll begin by describing what a distributed system is, and highlight the new challenges that it presents, compared to a simple traditional system (i.e., background tasks, mobile web or offline use, hard dependencies on third-party services, etc…). Then, we’ll talk about some UI and system architecture patterns, using an Ember.js/Phoenix system as a case study.

Where possible and appropriate, I'll show parts of a real-time distributed system (ember/phoenix), contrasting what the "non-distributed system" approach would have felt like to users against the "distributed system" approach.

As we go, we’ll begin to build a framework of questions that developers can ask themselves in order to address the challenges of high latency, loss of connectivity, the loss of access to a critical third-party service, and other problems often encountered when working with distributed systems.