refactor pool manager as interface