decouple app from implementation