Designing abstractions with properties in mind
tedinski.com