I read a lot of articles on procrastination and motivation, but I kept finding a complete or partial misunderstanding of the problem. Or just a discrepancy with my personal realities – people are all different, after all. I will describe what I know from experience and what helps me personally. Maybe it will help someone else.
What causes procrastination? Why is it usually less of a problem in other professions? What makes programmers so special?
It’s all about the specifics of programming (system solutions to complex problems). You can’t program "half-heartedly" – such work eventually equates to nothing. A code with one small error will not work as it should, even if the rest 99.99% of errors are correct. Moreover, even if the code works but is terribly buggy, you will most often have to rewrite it from scratch – it will be much easier than trying to fix it with crutches. That is, in essence, writing insufficiently good code is a complete waste of time and effort – This won’t make it any faster to redo your code.
And writing good code requires a special condition. Regardless of a person’s skill level, they can only write good (from their point of view) code for a few hours a day (and that’s not guaranteed). If you think you can write good code all day every day, you’ve probably outgrown your current job and it’s time to take on more serious tasks (like learning to automate it).
Most other jobs don’t have that — "drawing molds, " talking on the phone, writing letters and documents — all can be done "half-assed" all day. The result, of course, will be worse than I would like, but not "zero". And the shortcomings then it is not difficult to correct.
About creative professions Programming is often equated with the creative professions in this one, which I think is wrong. Yes, the problem of procrastination is similar to that of the stereotypical free artist or composer who necessarily needs inspiration to create a masterpiece. Because anything that is not a masterpiece is mediocrity – it is not worthy of public attention and will be forgotten (unless you destroy the drafts yourself sooner). But this is a different sort of thing; programming is much more likely to require hours of focus, not a moment’s insight.
This is the part of procrastination that is present in all programmers, in the office and remotely. But there are also two parts that are unique to remote work – the free schedule and the lack of direct communication.
With a free schedule everything is clear – if a person is not restricted in the possibility of entertainment, he will have to use willpower not to spend the whole day at them. But it’s just like with homework when studying – most people develop the right skills and priorities over time.
But the lack of communication affects much more than it seems. The main thing here is the effect of presence. Why do pupils and students learn better and do their lab work harder in the presence of a live instructor? Why do teachers read out the same lectures over and over again by voice, when audio recording and broadcasting technologies have been around for decades? The answer is human psychology. It’s much easier to focus on information when everyone around you has their attention on it, too, and when it comes from a person (a real, physical person) endowed with authority.
About correspondence students Yes, of course there are correspondence departments, video lectures, and distance courses, and you already want to write about them in the comments. It’s not that they don’t work at all, it’s that they are much less effective, at least for most people. The same correspondence students at universities, in my experience, generally equate to "retarded", assigning C’s/credits for being able to answer a question after searching for information in the manual.
But back to work. A programmer may well leave the writing of complex code to go help his wife hang up the laundry. And he won’t even consider how absurd his decision is. Because the problems of a distant overseas customer are perceived much less "real" than the problems of the person next to him. It is much harder to concentrate on a problem when you have to actively imagine it for yourself in order to believe it exists.
To sum it up: in fact, to work remotely, the programmer must first make efforts and imagination to convince his brain of the existence of a "virtual problem", then again, make efforts to limit himself to entertainment, and then the remaining effort should be enough to write error-free and high-quality code. And if it’s not quite enough, it’s better not to start writing, it’s all for nothing anyway. It doesn’t seem like such a simple problem of laziness anymore, does it?
Actually, here is the "who is to blame" sorted out, now to the question of "what to do".
If you find that you have procrastinated and even now continue to miss time, ask yourself the question "what is my next task and when can I accomplish it?" Do not leave it until you can not formulate a clear answer for yourself, in words. In this case, "when" is not a time, but a condition. In a sense, a "condition." And depending on your answer, evaluate what you’re doing – how close it brings you to your goal.
With me this internal dialogue usually goes like this :
"I need to write feature X. When can you do it?"
"When I get enough sleep/when I feel normal" – so do something that brings that state closer. Eat. Get some sleep. Get sick? Get better. Right now. Not "when I finish watching the series, " not "when I finish playing the game, " not "when I finish my coffee"-all these actions don’t get you any closer to working condition.
"When I’m in the mood" – do something that boosts your mood. But only things that actually work. If you’re watching a show and you find yourself thinking "when the hell is this episode going to end?" – turn it off and don’t go back to it. Look for something that’s guaranteed to work. And remember what doesn’t work (only makes the mood worse) and what to avoid.
"When I figure out exactly what to do" means your next task is not "do" but "figure it out". Figure it out. Ask the customer/manager (ask again if you’ve already asked and haven’t gotten an answer), or try digging into the problem yourself. If you’re not trying to figure it out right now, you’re just wasting your time.
"When I’m done with other things" means your current task is among those "other things." Yes, it is now a work task. It may seem from the outside that the other things have nothing to do with work, but you can see from this answer that they do, and directly.
"Well, I could probably do it now, " you do.
Etc. The basic principle is "since you’re obviously not working right now, then at least make sure you’re doing something that’s guaranteed to bring that state closer.
Anything that affects the effectiveness of your work-essentially becomes part of the work, too, and must also be taken seriously. It’s purely a matter of perception. If you need sleep for productive work – then "sleep" means "sleep", it is henceforth a requirement of the customer (though implicitly). If work requires a good mood, then even "playing something" to improve your mood becomes part of the requirements.
There is nothing more pointless than to oppress oneself for what is in fact unavoidable and required to work. Each person will, of course, have his or her own requirements in this sense, the main thing is to be honest with oneself about them.
Few people can lift a ton of weight and move it to another room, even if they have a month to do it. But moving a hundred 10-kilogram loads is doable. Do the same with work – break it up into smaller pieces and do it as much as you can.
This is all, of course, platitudes, but here I have an additional tiphak – leave some of the pleasant and easy work at the beginning of the day. Just make it a habit to stop working only when you know exactly which lines should be added to the code next. Believe me, a little discomfort from feeling "incomplete" is more than compensated by how easy it is to "get back to work".
Actually, here you go. Additions in the comments are welcome.