Architectural programming challenges