The 2 important 'P's for today's software developer

Any guesses?

ยท

11 min read

Have you had difficulty in focusing on a task at hand? How about getting lost in troubleshooting one bug in your code? Preparing for meetings, making presentations, falling prey to shiny object syndrome, the list just goes on.

Yes, all these are quite common in any software developer's day. Especially when the expectation is multi-fold, it's no more an option of doing just one thing throughout the day.

I worked in enterprises, led teams, now an entrepreneur. The number of tasks I have in a day is always a lot. On top of it, I have varied interests. One day it will be learning a no-code tool, then I will want to contribute to open source, then build a side hustle, and suddenly I will jump on to visual designs as a lot of ideas keep popping into my head. I'm sure you will be able to relate to most of these. Even I have struggled with checking all items on my To Do List. I still do to an extent. But there are quite a few techniques and tactics that have helped in bringing me on track, and I wanted to share those with you, my fellow developer.

Planning and Productivity - these are the two 'P's that I'm planning to talk through, rather write ๐Ÿ˜‰

Thought it will be a good idea to take specific examples and provide a way to handle/overcome them. Not everything may apply to you, so do take it with a grain of salt.

Let's start with a few Planning related hacks

Topic 1 for the day

#1 - Create a weekly planner

This one does sheer magic and is #1 on my productivity hack list. Creating events/tasks at an hourly level for a week helps complete a lot of things. Every single task that you need to work on, big or small, should enter into this planner.

It helps me :

  • visualize the number of things I need to work on

  • whether I'm being practical with the time estimation of each of the tasks

  • how many may spill over to next week

  • prioritize high-priority or complex tasks to my best working hours (it's the first half of the day ๐Ÿ˜€)

  • break down tasks into smaller ones so that the quality of work improves

A screenshot from one of my work weeks

Few tips:

  • Use a simple tool (Google Calendar is what I use), there's no need for anything jazzy

  • If you miss completing a task as planned (which will happen many a time, we are all humans lol), do immediately move it to an hour where you'll be able to complete it. Preferably the same day, or the next day. Not more than that.

  • I generally change colors for the tasks in the Calendar depending on whether I started to work on it, or I missed it big time so that by just looking at the color code I will immediately know whether I'm on the green side or the red side

#2 - Use Github/Gitlab project

This one helps me a lot when it comes to planning an entire project, from a complete development perspective. It can even be a module or a few modules.

If you are starting with a new project, I suggest you create issues as a first step. In fact, it's better to keep issues at a granular level, so that you don't miss doing even a small activity. Let me give a few examples of the issues that I created in one of my projects.

  • streamlit front end for page 1

  • streamlit front end for page 2

  • fastapi backend methods corresponding to page 1

  • refactor methods related to authentication module

  • and the list goes on ๐Ÿ˜

Once issues are created, I create a Github/Gitlab project and assign them with the right set of labels, iterations, milestones, and views. Below is a screenshot from one of my Github projects.

I wrote an article in hashnode recently on using Github Project. Do check it out if you are interested to know more with the nitty gritties. If you use Gitlab, the same steps still hold good. It's just a matter of side menu vs top menu. A quick view from one of my projects where I use gitlab.

It may take an hour or two, or even more depending on the size of your project. But then, I'd vouch for it 100%.

Performing this activity helps me with:

  • Having a big picture

  • Make sure I don't miss out on any feature, even a simple hyperlink

  • Ensuring I write test cases for every single feature I develop. Since I plan for it upfront, there is no chance of me missing it. It thus helps me deliver good quality code with fewer or no bugs

  • Helping me do reading or researching concerning the packages/APIs I intend to use. For example, one of the tasks above was to use Google Sign In for authentication in a django project. This one was new to me. Since I listed it as an issue, I made sure to do some quick reading upfront so that I stick to my planned development time

  • With the multiple views available, I get a broader picture of things, a view based on timelines, a view based on milestones, and more. This helps me re-prioritize at times, and it has proven to be a lot useful.

#3 - Review your planned work

This one is equally important when compared to #1 and #2 explained above. I'm a strong believer in reflecting on my day, my work, and my life. Now and then I pause and ask myself a few questions, am I able to stick to my plans, if not, where am I missing, what went good, what went bad, am I doing meaningful work and so on? These are more from a personal perspective.

I'd advise finding the time to either have someone else review your work, or worst case scenario, you allocate some time and review your plan. It can be either twice a week in case you are the reviewer, or once a week if someone else reviews.

Trust me, they are super beneficial and help me

  • come back on track if in case I try to deviate

  • help me revisit my plan so that it's much more practical

  • guide me if I spend more time on a task than I'm supposed to

These are my top 3 suggestions when it comes to planning.

Now, let's look at a couple of Productivity hacks.

Topic 2 for the day

#1 - Deep focus time

If you are someone who wears multiple hats or not, set aside a few hours of deep-focus work time every day. Some may be early birds, some may be night owls. Keep aside the most complex/important pieces of development work during this time. Typically, anywhere between 3-4 hours with breaks in between.

During this time, there should be no distractions though. No checking emails, no chatting in Slack, no Twitter scrolling, just focusing on the work at hand. In fact, I'd keep my mobile in airplane mode, and close all browser tabs other than the work-related ones. I switch back to normal mode in my phone once an hour, to check for any emergency calls/messages.

#2 - Pomodoro technique

I use this one, more from a health and posture perspective. Here's a brief definition of what this technique is:

I get up from my desk every 25 minutes and stretch for 5 minutes. It makes me complete my job much faster. It also helps me to not ending up with back pains and shoulder freeze ๐Ÿ‘ฉโ€โš•๏ธ. I use pomofocus, super simple. You can add tasks too, and keep track. I generally don't do that, but it's a useful feature that you may want to check out.

#3 - Walk for 30 minutes

If you can, just go for a walk during work hours once you complete a logical chunk of work. Or, if you have been working on a particular issue for quite some time, just stop it and step out. Irrespective of whether you live in a city, or in the countryside, fresh air and just looking at new faces do wonders.

You will be amazed at your energy levels when you sit back at your desk. It's truly refreshing. If you cannot do this every single day, try and do it as much as you can. You will thank me for this one ๐Ÿ˜‰

#4 - Spend not more than 30 minutes on a bug/issue

This one is a classic rabbit hole that any developer gets caught into.

Let's say you are assigned a couple of bugs to fix, or try implementing a feature using option B instead of option A, or deploy your application in a new cloud provider for the first time. Or, it can be as simple as tinkering with the workspace that you are so used to.

Mostly you may complete your tasks within the stipulated time. There are a few days when you would not be able to. There may be many reasons, you may be working on it for the first time, or home blindness, or just about anything.

At such times, what has worked for me is to pause after 30 minutes. If I'm unable to solve an issue after 30 minutes, I generally wouldn't have in the next 30 or even 90 minutes. Instead, I pause that particular issue and work on something else. Come back to this one after a while, or preferably the next day.

If coming back the next day is not an option, make sure to give your brain ample time to work on it in the background. You will be able to figure out the solution with this approach rather than continuing to work on it for a long.

#5 - Use GitHub CoPilot, if there is an option

Recently I started to use Copilot in one of my projects. It saves quite a bit of time, especially if you'd want to code repetitive tasks like writing test cases.

Infact, I was quite taken aback by the tool's ability to auto-suggest comments, variable names, function names, and even the logic in a few cases.

A word of caution though, if you are new to programming, or new to a project, I wouldn't recommend this one a lot. One more point, not all organizations approve of the use of Copilot. Don't forget to check with your team lead/manager regarding its usage.

Whereas for your personal projects, do use Copilot. You will be stunned by how much it can help you and teach you sometimes ๐Ÿ˜€

#6 - Integrate git in your IDE

I use VSCode for all development work. Previously I used to keep my git separately from VSCode. I used to keep switching browser tabs, git bash command prompts, come back to my IDE.

After I integrated git on my IDE, I could see massive time savings, and it's clean as well. I only need my IDE, nothing else.

To be honest, I used to underestimate the power of this one. But it does noticeably improve my productivity. Do give this one a try if you don't do already.

This one is not a direct productivity hack. But it helps when we have goals outside of work, but they contribute to our career growth.

A classic example is to contribute to open source. This helps any developer in a lot of ways. Be it understanding a new code base, collaborating with members whom you don't even now, learning the best methodologies, giving back to the tech community and more.

If your manager allocates time for this explicitly I'd call you lucky. If not, I sincerely advise you to mark an hour or two in your calendar on the same day of the week. Fridays 3-4 is open source contribution time. Make a repeating entry in your calendar.

You will automatically start being consistent in contributing to open source. Likewise, for any such tasks add an entry for the same hour and the same day, that's the crucial part.

#8 - Wind off time

This is the last one, but one of the most important ones. Make sure to wind off irrespective of whether you feel burned out. Taking off your body and mind outside of work is just necessary. There are a handful of companies that have a 4-day work week. If you happen to work in one of those, you are lucky and do make the best use of it.

Even otherwise, make sure to spend ample time with your loved ones, spend time on your hobbies, and develop new ones. Just be diverse with your interests, you never know where it'll take you. My coach once told me that "You can live to work or work to live, it's your choice". Whatever your choice is, do sit back mindfully and re-energize.

Final words

As I mentioned already, not every single point may apply to you. It all primarily depends on your team size and your team's work culture. Probably twist it a bit so that you can make it work for you. If you do, please do share your ideas here so that we all benefit ๐Ÿš€

ย