18.3.2 Programming Model