Source code - when to use ether and when to use reflection?


I am studying cardano source code, I noticed that sometimes reflection lib is used for pass value in type level(typically some config value), and sometimes ether lib is used(MonadRead?). what is the strategy or design guide?

Thanks very much!