why need refactor