Full story here :-D



This can be described as vicious circle of generalization:
  1. We want the code to be as generalized as possible.
  2. We design everything future-proof and extendible.
  3. When a feature request arrives, we’re doomed we need to change a lot of code.
  4. Why?
  5. Because everything was designed as generalized as possible.
  6. goto 1;