Robust
The issues of how to parallelize computations, distribute data, and handle failures collude to complicate the original simple computation with large amounts of complex code to deal with these issues.
As a solution to this complexity, we designed a new abstraction that allows us to express the simple computations we have to perform but hides the messy details of parallelization, fault-tolerance and data distribution in a library.