A similar approach is used in TDD. Before implementing a library, you first write a test case which uses the library and invent the necessary function names & parameters. Then you implement the functions to make the test work. This way the test drives the development of the library.
This pattern produces a simple interface and a complex implementation, e.g., the "MIT approach" (http://www.jwz.org/doc/worse-is-better.html)