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