more work; commiting before a big refactor