By Nikita M.
You know that feeling when you build something for a long time, update and rework it, and this something turns out to be a complete mess? What if several people are working there, and each of them has their own understanding and vision? For example, you spend decades writing a book. The way you see things will inevitably change, you will get new assistants. As soon as the book is ready, you will certainly have to read it once again and get rid of plot mistakes, logic inconsistencies. Then correct grammar, and you’re good to go!
Refactoring is the same rework. Not of a book though, but of a program code. Let’s find out when we need it, and when we don’t.
What is refactoring?
Changing the code structure. Refactoring helps understand the program’s internal structure and its work principle. Refactoring is also there to fix problems. Nevertheless, refactoring doesn’t fix mistakes, rework functionality, or change external program behaviour. Optimization does that, but it’s a topic for another article.
Why do we need refactoring?
- to make the code clearer
Going through the mountains of old code is difficult even for seasoned professionals, so of course, it’s very hard for new ones. Refactoring helps new programmers spend less time onboarding a new project. If you pay for their time, it’s in your best interest for them to work faster.
- to speed up development, to make code simpler and faster.
To extend the functionality of the program it is better not to “mold” additional code on top of the old one, but to refactor it first. The task here is the same as that of drilling a tooth, when you get filling put on a decayed tooth. It’s to clean up the old code so that the new code fits better.
- to improve the stability of the program.
The more concisely you express yourself, the easier and more understandable it is to listen to you. Just like people feel comfortable communicating with those who speak clearly, concisely, and to the point. In IT, programs that have the most concise code work better.
When do we need refactoring?
Signals to the customer that it is worth accepting the offer to refactor from the programmer:
- The project has been going on for a long time, and the requirements have changed frequently
- The program becomes less efficient: slow, often glitches
- Mistakes in estimating the deadlines and increased cost of implementing new functionality.
- The programmers have been changed
- You are going to use this project for a long time, support it and modify it: the time spent on refactoring now will pay up. As in, further development will go faster, there will be fewer bugs. Spend 50 hours now, to save hundreds in the future.
Signals to the customer that they are offering to refactor for the sake of refactoring, and there is no benefit:
- There are no serious or frequent problems with the program
- The project has not been going on for a long time and the requirements have not changed.
- You are not going to tune the project for a long time.
These are the characteristics programmers look for when suggesting refactoring. If you hear any of these, you can be sure that they are offering to refactor for a reason:
- Bulky classes (each class has to perform one function of its own);
- Long methods, noodle-like controllers;
- A large number of parameters in a method;
- Lack of use of framework functions;
- Bad naming of variables and functions;
- Much duplicated code;
- Lack of documentation.
But the best thing is, of course, to find programmers you trust 🙂
When do we not need refactoring?
- When the code is so bad that it takes too long to support and implement new functionality
- When the program is written on too outdated technologies which are no longer supported. Example: Flash is no longer supported by browsers. Whatever you do, how long you refactor it — nah, it won’t work.
What to do in these situations? This:
Begin writing from a scratch 🙂
Can I skip refactoring altogether?
When asking this question, first ask yourself: “is it possible to write without mistakes right away?”. The answer is no, because humans are not machines, and there will always be factors that reduce code quality. Refactoring, however, when used correctly, keeps the project code in good condition. It also minimizes the time spent on adding functionality and hiring new developers. This, in turn, opens the door to customer acquisition and marketing — much more useful than endlessly adding new team members because of missed development deadlines 🙂
Still have questions? Want to know more about refactoring? Send us a message and we will be happy to answer it for you! The feedback form is here. And we also launched Instagram, where we also answer DMs, share company news, project portfolios, and chat with you 🙂