There are two ways to build software design:
One is very simple, so that there is no defect;
One is to make it complicated as possible, so that there is no obvious defect