Thinking in Promises (Designing Systems for Cooperation)