law of useful return Avoid premature generalization Case Studies std::max returns wrong value malloc() and free() are a bad API