modulize and parallelize