Architecting Applications 3: the Controller