May 12, 2021

Some thoughts on system design (For complex/growing systems)

Some thoughts on system design (For complex/growing systems)

These are my takes and some conclusions I came to from the short experience I have had so far.

Goals in design process

  1. Clearly define the scope of the project
  2. Aim for higher modularity – results in better extensibility
  3. Do not sacrifice simplicity for modularity

Questions to ask during the all processes (applicable for both high level and low level)

  1. Are there two components that have similar functionality with very slight differences? E.g. two modules in code doing the same thing with one having extra argument(s).
    1. If yes – try to reduce them into one component (generalize).
      1. If the resulting system is too complex – problem on a higher level. The result is caused by incorrect approach to certain part(s) of the system. In this case review the direct higher abstraction. If everything seems fine it means there is a problem on a higher level; once you find the problematic level – fix it top down. If all higher levels seem fine then it might not be the optimal approach to the system; in this case – try redesigning.
    2. If no – the instance is well abstracted.
  2. Are the systems communicating with each other?
    1. If yes – do they depend on each other?
      1. If yes – try to remove the dependent relationship.
    2. If not – are they all needed?

I will try to post more on the topic if there is enough "audience" I guess.

P.s. Sorry, was too lazy to format the whole thing; so I just organized it.

submitted by /u/Positive-Compote-526
[link] [comments]