If I am procrastinating in software development or research it is
(1) for complexity reasons, (2) for foreseeable vast grunt work I have already done and solved in the past.
Example (1): I have to choose between at least two fundamental different ways to get ahead in writing software. I know that implications come late, wasted time can be a lot. I will often pause until it comes to me.
Example (2): Writing a new library in Julia, when I covered the topic in Python or C++ years ago, but cannot directly reuse it, the whole thing intensifies when it has already been done in several incarnations. Becomes more and more difficult ("been there, done that") with age, especially if the occasion is determined from outside. The same applies to research which requires a larger amount of knowledge from the past that needs to be reactivated.
(2) could be attributed to negative emotions (boredom, and yes, even laziness), but (1) is different, more a search for an optimal strategy prior to the start, because the cost for doing otherwise could be prohibitive. It is simply unwillingness in decision-making (too early).