When we ask programmers a question – how’s work? Common answer is: hectic. Why work is so hectic? Because we have million things to do at a time. No one seems to have a complete understanding of time that’ll be taken in building a feature, not even the programmers. No matter how careful it is, plans mostly fail. Let’s address that:
How to plan a task?
First thing is absorbing information. Absorption comes with question, the more you understand the requirements, better questions you’d have to ask. List down questions.
Not all things need to be done by you. Note down things that should be completed by others. This will make the dependencies clear.
Summarize your understanding in as simple words as possible. No need to use technical words or going deep into details. Just summarize it in few sentences. Be specific, make bullet points.
Put a timeline on it. You will never have complete focus on the task. There will be million things coming in-between due to always changing priorities. Make a timeline of how much time would it take if you are completely focused on this task. If the task has 10 hours, put the estimation of 15 hours. Chances are you’ll be able to focus on this 2 hour a day or so. You’ll need half an hour to start and end the task properly. Add 5 hours as a buffer.
Expect things from people. Clearly mention that you need dependencies to be addressed in right manner and on time. Dependencies will not be cleared on time. See if you can complete it with a workaround or move to other task.
There will always be multiple things from multiple projects on your plate. Projects get completed, but ghosts of completed projects always stay behind and suck our blood. There’ll always be someone who needs your help with understanding the syntax, debugging etc. Be helpful and make it happen. There’ll always be a task that requires research, keep it open. There’ll always be a thing to learn, keep it on the plan.
Let’s understand this in detail. Planning work can be done in steps as following:
Absorb and Process
Quick reaction to anything is a bad reaction. We prefer quick responses before getting into the matter takes time. Lack of time is an illusion. We are always in hurry to reach somewhere. This hurry keeps us running in circles. First thing to get rid of ‘Always-in-hurry’ mindset is to be assured that there is always enough time for us. Let me explain this other way: Humans have average lifespan of 75-80 years; Lions have lifespan of 35 years. No matter how slower you work, you’ll achieve more than the king of Jungle. Even if you are living a lazy-ass life with no exercise or diet plan, you’ll end up living 50 or so, chances are still good.
First thing to do is listen, read or observe the situation. Absorbing the situation will prepare you better for reaction. Do not put any effort in processing the information, let your mind process it on its own. Human brain, being the most amazing software so far, can recall memories, experiences and expertise to process the information. Processing power requires clarity. The quality of information processing can be measured by questions on the situation. Good understanding leads to better questions. Poor understanding leads to stupid questions (Concept of ‘There are no stupid questions’ is a scam for kids to encourage their curiosity. For adults, it’s an indication that you did not understand the situation well, dumbass).
List down questions and ask them to yourself. If you don’t have answer for it, accept our dumbness and move on. If you get the answers yourself, well, good job!
Not all questions will have direct answers, no one is going to be ready for interview and answer your questions directly. Most of the answers will be found through further discussions, answers of other questions and additional clarifications. Answers found indirectly are more important than directly answered questions. Direct answers are mostly diplomatic, not to the point. Which is why almost every answer is pregnant with another question.
Reading between the lines is the best way to get answers, because it has a space to add our own intelligence and assumption to it. It makes the solution smarter than expected. This trick has different results for everyone, and it does not have good results every time. If your partner asks ‘Do you have time for me?’ Do Not apply your brain, just say ‘Of course!’, any other answer would be dumb and may lead to trouble.
No one has done anything alone. From sipping a good tea to having sex, everything is dependent on company of good people. Every now and then you’ll be disturbed with dependencies. Dependency is almost the first thing that comes to mind when we look at work. That is why people work in teams. Make sure you have a capable team. Capable to do the required work and understand your expectations.
As kids, we are not clear about what we want; but, our target audience is very attentive, so our expectations are fulfilled with little to none effort. As a kid, if you didn’t like anything, just cry, people around you would understand that you’re upset and make an effort to make you happy. World of adults is neither that attentive nor caring. World of adults is a chaos, where everyone is distracted by something else than what’s in front of his/her eyes. No one gives a shit about your expectation unless you make it less shitty and more relevant to them.
Identify dependencies that may block your way to complete the task. Do not depend on others to get the dependencies out of the way, expect from them. Be clear about what exactly you want and when exactly you want it. Setting the expectation is in your hands. The other person may not respond to your expectation at all; that’s their Karma. Setting clear expectation to relevant people is the only way to move forward with ease. Lack of clarity on expectation leads to frustration, in work as well as personal lives.
Three steps (1. Absorb and Process, 2. Ask Questions and 3. Set Expectations) should make the situation more familiar and comfortable to work with. Summarize the situation in your own words, without any technicalities. Simplification indicates level of comfort you have and clarification indicates the confidence you have in starting the work. Simplification should be done properly. If you simplify existence of Pakistan as ‘A snobby tantrum of Jinnah to Gandhi’, you might be right, but that won’t solve the problem (As for Pakistan, Jinnah did not know the dependencies involved in running the Country, just wanted a country anyway, fucking idiot).
Doing above things will not make the work easier, it’ll make you a better professional. You’ll make better and informed decisions in your job and about your work, above all, your mind will be sharper to the point where all these things are done properly in matter of just few seconds.
Make it Real
Once you know what the job is, you have tentative idea about how much time it would take for you to get the job done. This is the most complicated part. Estimating the time to complete a specific task. Not just engineering, almost no task in the world has a 100% accuracy on estimation. Take example of one of the oldest projects in human history – Pregnancy. We all know it takes 9 months; however, in 5 years of experience in healthcare, I have not seen a single medical record where estimated delivery date by doctor is same as actual delivery date. If we can’t be born in a specific timeframe, it’s hard to believe that we’ll do anything within timeframe afterwards.
Point is to bring the estimated timeframe to maximum accuracy. If we see estimation as a goal for ourselves, we can be free of judgement or fear of not meeting the deadline. Missing deadlines does not mean we lack skills, majority of the time it’s just poor planning. Let’s understand the estimation in simple terms.
One of the main error is estimating the time with assumption that we will be completely focused on the work. This is wrong on many levels. First one is – you’ll never be completely focused on the work. World is a chaos and your life is no exception. Someone will find a way to push some kind of shit to your table while you are focused on work. People will need your help. There’ll be somebody having a heart-attack because a button did not click or simply ‘Something bad happened on the server’. If we try to include all uncertainties in the estimation, you’ll end up with timelines of years instead of hours. First thing we should do in any estimation is:
Leave Space for the Unknown
Put a timeline to complete the job in best circumstances: if the earth stops revolving till you finish your work and every one works as expected. Then, find out a timeline to complete the job in the worst circumstances: World is in lockdown, you’re living with your parents, siblings and kids. You have limited interent connectivity (It does not get worse than this).
If the timeline of completing a job in best circumstance is 10 hours and timeline of completing job in worst circumstance is 100 hours, find an average: 10 + 100 / 2 = 55 hours. This is the time you’ll need to finish job with distractions (let the buggers bug, it’s their job after all).
Rely on None
Asking someone to complete work and trusting them to do so are two different things. If you’re dependent on someone to complete their jobs before you can start yours, consider this a risk, ask them for exact time of their work completion and hold them accountable for it.
If you’re dependent on someone to finish their work so you can review it, get involved at earlier stage so you don’t have less time to rework and shout; it also gives you more time to control the damage and pass the ball forward.
Adjust the Overflow
Any project is an idea until it’s well executed. Idea evolves with time, especially when the execution unfolds. Stakeholders want to tweak the idea to better serve the end-user, middle management or themselves. This results in change requests and new requirements. This is why there’s buffer of 30% in software estimations. 30% indicates the error and uncertainties from stakeholders.
Any project is a nightmare if not well executed, it becomes more and more difficult with time. Which is why controlling it from get-go is important.
Plan for Life
Doing everything mentioned above may sound like a lot. Think about it this way. We all have goals, for life, work and families. Most of us never realize those goals, because most of us fail to plan them. Sit down for an hour and write out everything you want from life. it can be a new pair of jeans, a Ferrari, a world trip, talent to sing and play guitar or being a successful CEO like Elon Musk (Or all of it!).
Once everything is out there, start planning for these things. Planning reveals the brutal truth that you will not be able to achieve everything. No one ever has. Those who managed to achieve a lot managed to plan a lot, every day.
Here’s a tip to keep up with your wish list: write an email to yourself every day, outlining what were the key highlights of the day. This helped me to automatically prioritize things that matter and get away from things that don’t.