Perfect software architecture does not exists !
Low cohesion, modularity, dependency inversion, responsibility, interface segregation, overengineering, stovepipe syndrome, silver bullet or shotgun surgery… All of these techniques may lead you to the best solution but the mirror edge is quite thin....