kinda like a maze
step 1: abstraction