attempting to abstract out app specific implementation and leave a generic one