reduces duplicate code by generalizing the idea and the project controller