About complexity

It seems to me that the complexity of any system (solution) that doesn't contain unnecessary redundancy is constant given the set of requirements is has to fulfill. It is only possible to redefine that complexity - to move it from one level to other but one cannot reduce it. So what are the possibilities to tackle with complexity? Basically we can either abstract or partition.

Above description applies to all knowledge domains for example in encyclopedias it is rarely possible to present the whole information in a linear way. Instead people create chapters or articles and in order to keep information coherent invent special terms for referring to related domain concepts. Now the problem with this approach is that for retrieving some new piece of information first we need to be able to find appropriate article and secondly we need to be able to understand the abstractions (domain language) used in that article. Otherwise the mechanisms used to manage complexity will start working against us cause we still need to browse through large amount of data and it will be hard to re-create consistent understanding of whatever we were looking for.

If we take this back to software world it means that we need to have set of subsystems or modules and we need to use consistent and commonly known language for describing concepts in both problem and solution space. If we are not aware of the names of patterns or design approaches widely used we make the use of abstractions much less effective. Also if we are not able to pay enough attention to splitting the responsibilities of the system we will put other developers into situation where they have no "table of contents" of the system and hence need to browse through large volumes of code every time they need to find something.

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.
  1. Jan 21, 2008

    Oliver Wihler says:

    Great analogy and well written. We need to have a common understanding for commo...

    Great analogy and well written. We need to have a common understanding for common models/patterns and best practices of components for business applications. I dare to say the domains for Cidercone, HB, and AMS are a bit similar. Not sure about EGET (especially games). Anyone has more information on such "common" domains?

    1. Jan 22, 2008

      Ürgo Ringo says:

      Thanks. I think yes these three projects are all more or less typical web appli...

      Thanks.

      I think yes these three projects are all more or less typical web applications.

      Web games are on the other hand quite different. While other web applications can be easily split using vertical functionality (use cases) then simple web games are more like statemachines which makes splitting them more challenging.

      Because of the reason mentioned above using typical controller-service-dao architecture fails miserably for web games. That's why we tried to use DDD for rewriting some old games in Eget games team. AFAIK it's the first time that DDD is used in production code here in Aqris so I'm planning to write another blog post about that some day

  2. Jan 21, 2008

    Timur Strekalov says:

    Nice post. Although IMHO, it's far easier to read (and comprehend) things when ...

    Nice post.

    Although IMHO, it's far easier to read (and comprehend) things when they are written in a light-hearted, humorous manner . I mean, I know we're dealing with complex matters here, but hey, being overly serious about complicated stuff can make it even more complicated .

    You can take Bruce Eckel's "Thinking in Java" and SCJP guide a (in my opinion) perfect example of a serious, overly and unnecessarily complex book versus a very fun-written and easy to read one. That's why I actually threw away the former (a long time ago) in favour of the latter

    Absolutely no offence here, job well done