API design matters

Bad application programming interfaces plague software engineering. How do we get things right?