#1: Do I have a plan?
Since the new year has just started, it's most likely that you have some sort of New Year's resolutions. Whether it is to pick up a new skill, start a side project, or push through the last part of that tutorial, let's work hard together to make 2021 a better year than 2020!
Having New Year's resolutions is great, it means you are ambitious and want to improve yourself. That's already a great first step, congratulations! But they are also infamous for being dropped really early. You might recognise this from previous years: you come up with ambitious goals in January, by March your motivation starts declining, and by May you have completely forgotten about your resolutions. To prevent you from falling in this trap again, I want to you to ask yourself one question regarding your New Year's resolutions:
Do I have a plan?
And in general this question doesn't only apply for New Year's resolutions. It's something you can ask yourself for basically everything you want do or achieve. The general idea behind it is that having a plan and working with structure makes it easier to accomplish things. This applies to both larger goals, like New Year's resolutions, as well as smaller goals, like your daily development tasks.
The hardest part about a goal, whether large or small, is that it can feel very distant. You know your destination (the end-goal), but the road to it is not always clear (the process). But the chance that you will reach the destination by just rushing head first towards the first direction that you feel like is very low. This is where having a plan comes in. A proper plan helps you with the process by find direction through setting intermediate checkpoints, creating smaller steps, and being your guiding light whenever you are lost.
Around two years ago when I just started out with my first engineering job, I never took time to come up with a proper plan for my development tasks. Whenever I received a task, I would immediately start coding. It felt good: I would make very quick progress with the parts that were straightforward and finish most of the task in no time. But then came the most difficult part, finishing it up. More often than not this was the moment where I realized a flaw in the approach I initially took.
Best case scenario was that I only had to revisit or redo a large portion of my previous work and thus have to spend double the time on that part of the task. In the worse case scenario, which happened more often than I would have liked, the flaw would not be trivial to address. This would result in either spending an additional significant amount of time trying to come up with a forced solution to not let my previous efforts go to waste, or I had to throw away (part of) my previous efforts and redo it. Either way, I would have wasted a significant amount of time.
Instead, if I took some time at the beginning to do some research, identify potential pitfalls or roadblocks, addressed them earlier, and came up with a plan, most of these occurrences could have been prevented. After working with this approach quite a bit, I can definitely say that having a plan provides me more structure and reduces the number of times that I had a critical-flaw moments.
Some people would argue that the time spent on coming up with a plan is more than it would save, which could definitely be the case if you try to come up with the perfect plan. I have also been at the receiving end of that and the main thing to keep in mind is that your plan is not final and doesn't have to be perfect. It is present to provide you structure to start with and should be revisited along the way. This is something you learn by trial and error, but is definitely a skill that separates developers from better developers.
So this time around, instead of diving head first into your resolutions, future goals, or tasks, try to Take a Moment and ask yourself whether you have a plan. If not, spend some time to come up with one in order to create more structure for yourself and better stick to your goals.