Sometimes shifting complexity around really helps though - splitting it up into manageable chunks means you don't have to keep all of a complex system in your head at once (of course packages/libraries are another angle to approach this from, rather than separate services).