Our programming languages don't really support us in making good design decisions. They fall short of allowing us to choose appropriate representations. | Continue reading
A fundamental question in program design: how is this type open? | Continue reading
The system as a whole must be able to respond to an overloaded part. | Continue reading
These are easily distinct techniques, but also deeply related. | Continue reading
The way humans do moral reasoning is a mechanism that is often misapplied to purely technical decisions. | Continue reading
There's more to testing than unit tests, and there's more to design than coding. | Continue reading
A short case study on the effects of freezing or freeing an API. | Continue reading
Context matters. Sometimes we need to get things done, sometimes we need to build things to last. | Continue reading
Thinking carefully about what our goals even are. | Continue reading
Sometimes this is evidence of over-abstracted design, but sometimes it legitimately makes sense. | Continue reading
Testing on system boundaries can aid us in making changes. Testing elsewhere can sometimes impede us. But types can go anywhere. | Continue reading
Property tests are not just more powerful, more general unit tests. They're a different way of thinking, with a different impact on design. | Continue reading
A different perspective than I'm used to. Different paradigms offer different pieces and different ways those pieces can be put together. | Continue reading
Every form of useful code re-use involves some form of composition operator. We build the whole out of parts, and the seams have properties. | Continue reading
Composing smaller pieces into a great whole is a powerful design technique. | Continue reading
Composing smaller pieces into a great whole is a powerful design technique. | Continue reading