The importance of chores

It is in human nature to avoid work. Even though I consider myself hardworking, I often find it challenging to start tedious, repetitive tasks such as refactoring code, exercising, stretching, or even cleaning my apartment. It is common knowledge that we build big things based on small pieces, and important things often do not seem exciting. So we avoid those crucial tiny steps that could help us out.

The first example I can find is in coding. The more junior the programmer is, the more they want to focus on the cool aspects of programming. Something has to move, and stuff has to flow through the internet, written to the disk. It feels good when we have a real effect on the world, but it comes with great responsibility, like every great power. So often, you can see the code that works, but changing something that seems insignificant breaks it and causes it to malfunction. Global or near-global flags floating around, ensuring something runs only once or in a particular order, nested conditional statements, naming without much meaning, and comments that attempt to explain what is going on are symptoms of a lack of seniority. Code is written not only for machines but also for humans, who can change it in the future by adding functionalities or resolving corner cases. It is excellent to stay in the flow and make things work initially. Still, it is even more critical to review the material we have written later without much passion for functionality and think about what we could do to make it cleaner for future maintainers, which in fact could be us.

Some time ago, I heard that programming languages are functional not because of their abilities but because of the restrictions they put on the developer. The most powerful tool is probably the imperative language that tells the processor what to do in a particular moment. If we took this path, we would be merely pushing the assembler to a higher level that could compile on different machines, or we would even write code for one machine only to maximise its potential. Obviously, this is not the direction the industry took as an industry. Instead of offering new possibilities, we defined different paradigms, restricting ourselves to making the code more straightforward to write, so that it can be easily read, scaled, and maintained.

Another example of the importance of small repetitive tasks is in sport. To get better at something like surfing, it is not enough to jump into the water and catch the biggest wave we can find. You can reach a certain level without training, but to grow your abilities, you need to consider the small pieces that make up the whole picture, break them down, and work on them in isolation. Paddling can be boring, but without it, you might miss the best waves and maybe not even reach the lineup. Popup seems obvious, and maybe somebody with some experience should focus on turns, but without mastering this aspect, you might not even get a chance to turn. We can name multiple components, such as ocean reading, stretching, mobility, and strength, that make up the whole experience. They make a good surfer in harmony, but if you lack any of them, they can individually ruin your surfing. Therefore, it is crucial to pay special attention to every component, focusing on it individually and trying to improve it. Going one by one can enhance our abilities, but we need to be patient.

Patience and persistence are crucial in developing a skill. It is not enough to do fun and leave the tedious chores out. To build abilities, we need to practice small things repeatedly, then apply them in a real situation, and finally return to training with the lessons learned.