desired architecture
implement architectural skeleton
reimplement previous logic with new classes