How to avoid feeling overwhelmed
How to avoid being overwhelmed as a Software Developer ?
If you feel overwhelmed by having too much work on your plate, this article can inspire you to work in a different way — based on my 5+ years of experience, observations, reading and learning from others.
As a human being, you can only focus one on thing at a time. Multitasking is a myth. If you try focusing on two things at the same time, you soon feel stressed and unable to do both tasks well.
Nonetheless, in this modern age of technology, are we satisfied with our current work? Emerging trends such as automation, Internet of Things, Artificial Intelligence and Blockchain have arose with the promise of less work for us. Yet, it seems we labour even harder nowadays.
Where does this problem stems from? Do we have a problem of attitude? Or have we become more greedy — we want more stuff, immediately. Perhaps, we are inspired by the endless images of breathtaking travel locations, electrifying car models, stunning houses around lakes and moutains — modern stylish architecture, the latest state-of-the-art mobile phones, tailor made clothes or the perfect models from Instagram.
Software Development — A Creative Job
As a software developer, your job is not the same as a customer representative. He or she has a predefined series of steps to follow while the nature of your task is different — your work is not well defined to start with. You have more creative occupations. And customers and project managers usually expect you to deliver these assignments in record time.
As a professional, how can you deal with such nature of task without being overwhelmed with the daily grind?
You can refer to the following list to mitigate the feeling of being overwhelmed while progressing throughout a project.
Do, defer or delegate task
When working on a task, seek to understand it’s nature before attempting it. Write it down into small parts. Try understanding the outcome and the given inputs.
On doing this, you can better understand the work to take a decision — either do it yourself or delegate to someone else if the person can do it better than yourself.
If the task is not urgent, you can postpone it for later.
The aim is not to solve the issue but instead understand it enough to either do it now or defer for later or delegate.
How do you know if this task is urgent or not?
Your project might be in different stage:
- getting user requirements & design mockups
- In development of Minimum Viable Product (MVP)
- Deployed the MVP to alpha users and early adopters
- In production with paying customers
- Providing support and addition of new features depending on the type of market
Depending on these stages, your nature of work will vary. In the early cycle, implementing a feature is the highest priority. At this stage if the tester requests for an enhancement, you can safely ignore or postpone it to later. Your aim to add a working feature for the user. At this point you do not need to be obsessed with tiny details or any small bug that still enable the user to perform a specific task.
Once early adopters start using the MVP, you can focus on issues. They are usually forgiving and prefer being first in using the software — even with the bugs.
Adding features that users are not using at this point is the least of your concern. You can work on improving the usability of implemented features while decreasing bugs. You can ignore any enhancement requested by these users.
‘If I had asked people what they wanted, they would have said faster horses.’ Henry Ford
When customers are paying for the product, they expect a minimum of bugs. Solving bugs should be your biggest priority, and perhaps then adding new features as requested.
Nonetheless, depending on your market, you can either target a mass audience or a niche market for specific enterprises.
If they are satisfied with the product, the existing features and then request enhancements that are not difficult to add without regression or outstanding work, you can work on that as they are paying for your product.
If you work by this kind of schedule and say no to work that is not relevant to the moment while explaining to your supervisor, you will not feel overwhelmed.
Look for multiple solutions
You can write down multiple solutions rather than jumping straight away in the codes. You then decide the best one that requires minimum time and effort to accomplish. The first solution that you think of may not be the best one.
Imagine implementing the first solution that initially looks easy — yet you take plenty of time and can compromise with existing elements. You introduce complexity that can be avoided by instead searching for simpler solutions with less compromise.
Sure this method can takes more work at first but can save you plenty more in the long run. You thereby saves yourself unnecessary headaches.
Look for existing solutions
Work smart — don’t reinvent the wheel. When you start working on a task, look for existing solutions, scripts, snippets or libraries — even if you initially spend more time. Research is an important part of development. Even if you feel you can implement a better solution or you don’t need a whole library, hacking a workaround is costly in terms of your time and effort. These libraries are battle tested used by plenty of developers around the world.
Furthermore, you can also search for an existing solution in your codebase or project even if sometimes you are tempted to try writing it because you think of a better solution. If the codes is working, you can use it — modifying only parts that suits your requirements.
Divide and conquer
You can immediately apply this strategy to drastically reduce your sense of overwhelmed and be less stress particularly when working on tough deadlines or on big projects.
Break your task into smaller chunks instead of tackling one big task altogether. Use a check list to keep track of the subtasks. Focus on only one item at a time. Pause everything else. Once you complete the task, you can proceed to the next.
The once impossible tasks when broken down, now seem surmountable just like climbing a mountain initially looks. A house is not built in a single effort but by putting one block at a time.
“You don’t set out to build a wall. You don’t say ‘I’m going to build the biggest, baddest, greatest wall that’s ever been built.’ You don’t start there. You say, ‘I’m going to lay this brick as perfectly as a brick can be laid. You do that every single day. And soon you have a wall.”
— Will Smith
Planning is guessing — Task estimation is guessing
Project managers or owners are often too optimist, especially those who do not code or have no such experience. They tend to think that work can be delivered in less amount of time without compromise.
They favour underestimating — the amount of time and effort that unforeseen obstacles — that invariably crop up during a project can take. They change requirements all the time, yet keep a strict deadline.
Deadlines can help project progress but should be realistic and not be a burden on software developers. They should not mean the end of the world.
As a programmer, you have to be able to negotiate deadlines if you think you cannot meet them. Programming is no easy feat that requires plenty of effort. Accurately estimating the duration of any task is difficult. Sometimes the task might take much longer, other times you complete it much faster than you initially expected.
For me, estimating a programming task is like estimating the time I will take going to the River Thames in London. I have never been there. I don’t know where it is found and have no idea how to get there. If I want to go there, I have to proceed one step at a time, ask people for directions before arriving at my destination. Now if you were to ask me the amount of time required for me to go there, my blunt answer is — I would not know.
Programming does not merely involve sitting down and typing words on the keyboard for 8 straight hours. This activity includes communication, writing, analysing, researching and most importantly, learning.
If you struggle with overwhelming tasks and tough deadlines, try negotiating with your team lead or supervisor to allocate more time or resource.
In almost any case, no one will die if you miss your deadline.
Work in Small Batches
Instead of working on too many things in one go, you can select 3 to 5 items to work on, one at a time. On completion, you can validate them with the person in charge such as the tester or product owner.
From the feedback you get, you can then promptly make changes. These tasks are still fresh in your brain. You know the map of the solution(s) you implemented.
Now consider this versus working on a huge backlog of items that takes months to complete. And when the tester or product owner notifies you for a change found at the start of the chain — something you worked on several months ago, you have to go back, try to remember and change again.
Assuming you are already working on a different set of tasks, you get overwhelmed with this traditional method of working.