Related resources for principles of software engineering open closed extensibility