Jun
27
Daniel Jackson's 6.005 lecture on "How to Design an Abstract Type"
There is a lot of good content in these slides, summarized towards the end with very pragmatic advice.