Balancing Object-Oriented and Functional Design — Programming Keynou