Foundations for Designing User-Centered Systems