During the life cycle of a system there can be vast amounts of internal and external influences that can lead to over complicated processes, infrastructure, design architectures, and ugly code. Decisions are sometimes made that can make software costly and difficult to maintain. The more complicated the software is the more time it takes to build, test and deploy.
What are the key areas that make software so complicated and can we identify these before they get out of hand?