Abstraction and API Design
How do you design an API for a programmer? Too little control, and your audience is frustrated by a lack of power. Too much detail required, and your developers can no longer keep track of everything to specify. How do you strike a balance between power and specificity to write the most useful library?