interfaces, tests, factory