How a good software practice thwarts collaboration: the multiple roles of APIs in software development