more modularity, more tests