When I first started working as a developer, the one thing I struggled with the most was being productive. I spent days to complete tasks that could have been done in less than a quarter of the time. I convinced myself that the tasks given to me were complicated, and required lots time to complete. I thought the experience would automatically make me more productive.
All of this was not true, I was procrastinating, knowingly and unknowingly. Becoming a more productive developer will require discipline.
I wish I knew how much time I've lost configuring text editors. I was addicted to them and loved Vim and Emacs. I probably spent more than an hour a day tinkering with there config files. Adding clever new commands and methods, changing colour schemes and checking out the latest available plugins. I even subscribed and monitored their Reddit pages daily. My case might be a little bit extreme, but I am sure you can relate to a certain degree.
Currently, I avoid using text editors or tools that require excessive configuration. And the ones I use, stay as stock standard as possible, I don't concern myself with fancy themes or plugins. No longer do I allow the tools I use to get in between me and the work that needs to be done. This change has made me more productive by eliminating unnecessary distractions from my workflow.
At work I have a dual monitor setup, one monitor is used for editing and the other, for documentation and research. But for a long time, the second monitor was used for entertainment purposes. I use have YouTube videos playing constantly. This was just one more way for me to procrastinate throughout the day. Convincing myself that I was still able to perform while listening to YouTube videos.
Only after ending this bad habit did I realize how much this was actually affecting my performance. We all know how it feels when we get interrupted by one of our loved ones, while being in the zone, coding away. It can take us at least ten or more minutes to recover from that interruption. And I was doing this to myself by using my second monitor for entertainment. Certain types of music also distracted me at times, so I now just stick to instrumental music.
In conclusion, identify the things that distract you and illuminate them from your working environment.
Let's imagine your appointed the task of creating a new image handling class for a clients application. You pull down the repository and open up the project, as you browse through the source code you discover multiple blocks of bad code. Refactoring these pieces of code before working on the original task is a mistake. This is a form of procrastination because you are using the fun tasks of refactoring and improving the bad code to avoid working on the more complex task of creating the new image handler.
This is actually something I use to do at the beginning of my career and I can assure you, it's a good way to miss deadlines. When you come across a bad piece of code, just add your todo messages and move on to the more important stuff. You can return at a later time to refactor each piece of bad code you discovered.
Simplicity is king, as developers we often over complicate things. I can think of many time where I used complex design patterns for a piece of code that really didn't need to be that modular. Or when I created NPM and Composer packages for functionality I needed, when could have just added a class. All of this because I was thinking too far into the future. Before you start coding, think about the requirements and come up with the simplest solution possible. This will save development time now and in the future.
Roughly planning your day the night before will improve your productivity instantly. Arriving at work, you'll know exactly what needs to be done and where you left off the day before. Weirdly, sometimes this actually helps me with solve problems. Thinking about the problems I could not solve at work, right before going to bed, seems to actually help me solve them. It's like my mind is busy processing them while I'm sleeping. I wake up going aha, knowing exactly what to do.
I personally use Todoist to organize and plan my day. You can use whatever you like, but just keep it simple and don't over complicate things. Remember your daily plan is just a reference so don't follow it religiously, but look at it often.