How to Manage and Reduce Complexity in Software Development