Software complexity is increasing as time goes by and is now becoming a nightmare for every developer. To begin with, let’s find out what complexity is:
A complex system is a system for which it is difficult, if not impossible to restrict its description to a limited number of parameters or characterising variables without losing its essential global functional properties.
So, it’s getting more and more difficult to restrict software’s description to a limited number of parameters without losing its global functional properties. What that means is that it’s getting harder to come up with a piece of software that does exactly what was requested, not more nor less.
Regarding this fact, José Luiz Fiadeiro came up with the notion of two kinds of software complexity:
- Physiological complexity
- Social complexity
Quoting José Luiz Fiadeiro 1:
Social complexity arises not from the size of applications but the number and intricacy of interactions. Its dynamic nature demands that we treat it differently, and to do that we must understand how it differs from physiological complexity.
What, then, is physiological complexity? According to the author it can be measured by the amount of decompositions a system must have so that every part (or module) becomes easy to implement by a single programmer.
On the other hand, social complexity is related to the amount of connections that exist between modules of an application or, on a SOA based environment, between software services within an organization.
- José Luiz Fiadeiro, “Designing for Software’s Social Complexity,” Computer , vol. 40, no. 1, pp. 34-39, January, 2007.