Designing Abstractions