software-engineering complexity
All software systems are inherently complex. Essential complexity is attributed to the business requirement and incidental complexity is attributed to everything else. I wrote a blog Complexity in Software Engineering explaining types of complexity and how they arise (I would highly recommend reading this article to familiarise with the fundamentals). Once you've grasped the basics, the real fun begins - managing complexity. In the race to deliver features, how do we ensure we are adding necessary complexity which allows the system to sustainably evolve and not come to a screeching halt. Let's dive into principles to manage complexity in software systems both within your code.
Venn diagram for complexity
software-engineering complexity
The word “complex”, when used as an adjective, implies “consisting of many different and connected parts” and when used as a noun implies “a group or system of different things that are linked in a close or complicated way; a network”. Ant colonies, nervous system, public transportation systems of a country and software systems are examples of complex systems. The common denominator in all these examples is the interconnected nature of their parts. The reason for the interconnected nature of these systems is to deliver value. Complex systems allow distribution of tasks and responsibilities among its parts. Ant colonies leverage the complex nature for survival, achieved through the division of labour among the ants - such as finding food, maintaining the colony, and protecting the queen. The nervous system is a complex network of nerves and cells that allow your body to conduct various functions by carrying signals and messages to and from the brain to organs. Public transportation systems are complex networks of buses, trains, and trams that allow people and goods to move from point A to point B. Software systems are complex networks of code, data and infrastructure that allows a business or an organisation to deliver value to the user of their products.