Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Refactoring and related maintenance activities, like library/framework upgrades, are high risk and low immediate reward. In my experience, they're also one of the hardest overall software development tasks; large-scale refactors will end up touching a large percentage of existing code, and will require a ton of reading/understanding existing code to figure out what it does, as well as the domain knowledge to know what it should do. Often during refactoring I've found hairy bits of code which seem like they'll be intractable, until I stepped up a level and realized it's for a half-implemented feature that never got released, and can be completely removed.

If you try to measure it on an incremental level, refactoring is never worth it. Your code changes can and will cause unexpected bugs; customers get no perceivable value; it's engineering time not spent on revenue-generating features, and per the previous paragraph, you should be getting your best engineers doing large refactors. But if you look at it across a longer horizon, it makes a massive difference in the maintainability of your codebase. It's like cutting out 300 calories/day from your diet; you won't notice a difference if you weigh yourself on two consecutive days, but if you do it for 6 months it has a noticeable impact.



The way to make refactoring safe is to have a solid test suite.

With a good enough test suite, if all tests still pass, you can be pretty confident.

To me, making refactoring easier/safer is probably the biggest benefit of having tests!


I'd say making adding new features that deliver value safer is an even bigger benefit of having tests.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: