Modern data services manage data by storing it on distributed servers. It is a common requirement of such systems that they ensure that the data is available to the users even though the system components can be unreliable, for instance, the servers can crash. It is also important that the data should appear to the users as if stored on a single centralized system, even though the data is stored in distributed servers. For instance, when the data is being constantly updated, a user that reads from the system should obtain the latest version. In this talk, we present a new approach for the design of storage systems satisfying these requirements. Our approach merges ideas from two distinct fields, coding theory and distributed computing theory, to create a solution that incurs a significantly smaller footprint in terms of the amount of communication and storage as compared with current state of the art.