I've read many articles on procrastination and motivation, but I've always found in them a complete or partial misunderstanding of the problem. Or just inconsistency with my realities – after all, people are different. I'm going to describe what I know from my own experience and what helps me personally. Maybe it will help someone else.
What causes procrastination? Why is this problem usually less acute in other professions? Why are programmers so special?
It's all about the specifics of programming (systemic solutions to complex problems). You cannot program half-heartedly – such work is slim to none. A code with one insignificant error will not work properly, even if the other 99.99% are correct. What's more, even if the code works, but it is quite ugly, most often it will have to be rewritten from scratch – this will be easier than trying to fix it. In fact, writing a bad code is an absolute waste of time and effort – this will not speed up fixing it.
Writing a good code requires a certain mood. Regardless of a competence level, a programmer can be writing a good (from his point of view) code only for a few hours a day (maybe even less). If you think you can be writing a good code all day long, every day, you've probably outgrown your current work and it’s time to take on more serious tasks (for example, learn how to automate it).
There is no such thing in most other jobs. "Drawing molds", talking on the phone, writing letters and documents – all this can be done half-heartedly all day long. The result, of course, will be worse than you would like, but not a zero one. And small defects can be fixed later.
This is part of procrastination that all programmers suffer from – both office and remote. But two things are unique to remote work – flexible schedule and lack of direct communication.
As for the flexible schedule, everything is clear – if a person's ability to have fun is in no way limited, he will have to use his willpower so as not to spend the whole day on entertainment. But here, as with homework when studying, most people develop the necessary skills and priorities over time.
However, the lack of communication has a much greater effect than it seems. The main thing here is the effect of presence. Why do pupils and students learn materials better and do laboratory works with greater enthusiasm in the presence of a real teacher? Why do teachers read the same lectures over and over again by voice whereas audio recording and broadcasting technologies have existed for decades? The answer is human psychology. It is much easier to focus on information when everyone around you also focuses on it, and when it comes from a person (real, physical) endowed with authority.
But let's go back to work. The programmer may give up writing a complicated code to go and help his wife hang out the laundry. He won’t even think of how absurd his decision is. Since the problems of a distant foreign customer are perceived much less real than the problems of a person nearby. It is much harder to concentrate on a problem when you need to actively imagine it in order to believe in its existence.
To summarize: to start working, a remote programmer first needs to make an effort and use his imagination to convince his brain of the existence of a "virtual problem", then make an effort again to reduce the time for entertainment, and the remaining energy should be enough to write an error-free and quality code. And if it is not enough, then it is better not to start writing, it is still in vain. Doesn’t seem like a simple problem of laziness anymore, does it?
So, we've figured out "who is to blame". Now let's move on to the question "what to do".
If you've found out that you keep procrastinating and continue to waste your time, ask yourself the question "what is my next task and when can I complete it". Do not leave it until you can clearly, in words, formulate an answer. In such a case, "when" is not time, but a state. Maybe even condition. Depending on the answer, evaluate what you are doing – how much it brings you closer to your goal.
My internal dialogue usually goes like this:
The basic principle is "since you're not working right now, then at least make sure that you are doing something that is guaranteed to bring your working state closer".
In fact, anything that affects the effectiveness of your work also becomes part of the work and should be taken seriously. This is purely a matter of perception. If you need some sleep for productive work, then "get enough sleep" from now on is the customer's requirement (albeit implicit). If you need to be in a good mood for work, then even "playing some game" to improve your mood is already part of the requirements.
There is nothing more senseless than self-recrimination for what is actually inevitable and required for work. Of course, each person will have his own needs. The main thing is to honestly admit them.
Hardly anyone can lift a load weighing a ton and move it to another room, even if it takes a month. But to move a hundred 10-kilogram loads is already doable. You should do the same with work – divide it into small parts and do it whenever possible.
That's all trivial, but I have an additional lifehack – leave some of the pleasant and easy work for the beginning of the working day. Just make it a habit to stop working only when you already know which lines you need to add to the code next. Believe me, a slight discomfort from the feeling of "incompleteness" is then fully compensated by how easy it is to get into work again.