In my last post, I detailed four of the biggest reasons why software developers suck at estimation, but I didn’t talk about how to solve any of the problems I presented.
While estimation will always be inherently difficult for software developers, all hope is not lost.
In this post, I am going to give you five real tips you can utilize to become better at estimation–even for complex software development tasks.
Tip 1: Break Things Down Smaller
In my last post, I talked about how lengthy time periods, that are so common with software development projects, tend to make estimation very difficult and inaccurate.
If you are asked to estimate something that will take you five minutes, you are much more likely to be accurate than if you are asked to estimate something that will take you five months.
So, how can we solve this problem?
There is actually a relatively simple fix: Break things down into smaller chunks and estimate those smaller chunks.
Yes, I know this seems simple and obvious–and I know that this approach is often met with skepticism. There are plenty of excuses you can make about why you can’t break things down into smaller pieces, but the truth is, most things can be broken down–if you are willing to put forth the effort.
The key point to realize is that you are never likely to get good at estimating large things. Well, let me rephrase that: The only way you are going to get good at estimating large things is to be learning how to break them down into many smaller things.
If you really need to accurately estimate something, it is well worth the effort to spend the time breaking down what you are estimating into much smaller pieces.
For example, suppose I was going to estimate how long it will take me to write a blog post. It’s not a very large task, but it’s big enough that estimates can be a bit inaccurate.
If I want to be more accurate, I can break down the task into smaller pieces.
Consider the difference between trying to estimate:
- Write and publish a blog post
- Research blog post and brainstorm
- Outline blog post
- Write first draft of blog post
- Add images, links and call-outs
- Schedule post for publishing
By breaking things down into smaller pieces, I can more accurately estimate each piece. In fact–here is a little trick–when things are broken down this small, I can actually time-box certain parts of the process–which is effectively ensuring my estimate is accurate (but, we are jumping ahead, we’ll talk more about time-boxing in a little bit.)
The next time you are asked to implement some feature, instead of estimating how long you think it will take you to do it as a whole, try breaking down the task into very small pieces and estimating each piece individually. You can always add up the smaller estimates to give a more accurate estimate of the whole.
But wait! I know exactly what you are going to say is wrong with this kind of estimation. Sure, each individual piece’s estimation may be more accurate, but when you add them back together, in aggregate, you’ll still get the same level of error as you would from estimating one large thing.
All I can say to that argument is “try it.” To some degree you are right, the smaller errors in the smaller pieces will add up and cause the whole to be off by more in aggregate, but the smaller pieces also tend to average out. So, some take less time and some take more, which means that overall, you end up a lot more accurate than estimating one large thing with a large margin of error.
Tip 2: Taking time to research
Why do you suck at estimation?
Because you don’t know enough about what you are estimating.
In the previous post, I talked about how the unknown unknowns, that plague many software development projects, make estimation extremely difficult, but I didn’t really talk about how to deal with these things that we don’t know that we don’t know.
Again, the answer is really quite simple: research.
The best way to get rid of an unknown unknown is to know about it.
Whenever you are tasked with estimating something, your first instinct should be to want to do some research–to try and discover what it is that you don’t know that you don’t know yet.
Unfortunately, most software developers don’t immediately think about doing research when trying to estimate something. Instead, they rely on past experience. If they’ve done something in the past that they deem similar enough, they will confidently estimate it–ignoring the possible pitfalls of the unknown unknowns. If they’ve never done something similar to what they are being asked to estimate, they’ll assume there are unknown unknowns everywhere and come up with estimates full of padding.
Neither approach is good. Instead, you should first try and estimate how long it will take you to research a task before giving an estimate of how long the actual task will take. I’ve found that most software developers are pretty good at estimating how long it will take to research a task, even though they may be very bad at estimating how long it will take to complete the task itself.
Once you are armed with research, you should have fewer unknown unknowns to deal with. You may still have some unknowns, but at least you’ll know about them.
But, how does this look in reality?
How do you actually research tasks that you are supposed to be estimating?
Well, sometimes it involves pushing back and planning things out a bit ahead of time. I’ll give you an example of how this might work on a Scrum or Agile team.
Suppose you want to start improving your estimates by doing research before estimating tasks. The problem is that when you are working on an Agile project, you usually need to estimate the tasks in an iteration and don’t really have the time to research each and every task before you estimate it–especially the big ones.
I’ve found the best thing to do in this scenario is instead of estimating the big tasks right up front, to push the tasks back one iteration and instead estimate how long it will take to research each big tasks.
So, you might have in your iteration any number of small research tasks which only have the purpose of getting you enough information to have a more accurate estimate for the big task in the next iteration. During these research tasks, you can also break down large tasks into smaller ones as you know more about them.
Wait… wait.. wait… I know what you are thinking. I can’t just push a task into the next iteration. My boss and the business people will not like that. They want it done this iteration.
Right you are, so how do you deal with this problem?
Simple. You just start planning the bigger tasks one iteration in advance of when they need to be done. If you are working on an Agile team, you should adopt the habit of looking ahead and picking up research tasks for large tasks that will be coming up in future iterations.
By always looking forward and doing research before estimating anything substantial, you’ll get into the habit of producing much more accurate estimates.
This technique can also be applied to smaller tasks, by taking, sometimes, just five or ten minutes to do a minor amount of research on a task, before giving an estimation.
The next time you are trying to estimate a task, devote some time upfront to doing some research. You’ll be amazed at how much more accurate your estimates become.
Tip 3: Track your time
One of the big problems we have with estimating things is that we don’t have an accurate sense of time. My memory of how long past projects took tends to be skewed based on factors like how much I was enjoying the work and how hungry I was.
This skewed time in our heads can result in some pretty faulty estimations.
For this reason it is important to track that actual time things take you.
It is a very good idea to get into the habit of always tracking your time on whatever task you are doing. Right now, as I am writing this blog post, my Pomodoro timer is ticking down, tracking my time, so that I’ll have a better idea of how long blog posts take me to write. I’ll also have an idea if I am spending too much time on part of the process.
Once you get into the habit of tracking your time, you’ll have a better idea of how long things actually take you and where you are spending your time.
It’s crazy to think that you’ll be good at estimating things that haven’t happened yet, if you can’t even accurately say how long things that have happened took.
Seriously, think about that for a minute. No, really. I want you to think about how absurd it is to believe that you can be good at estimating anything when you don’t have an accurate idea of how long past things you have done have taken.
Many people argue that software development is unlike other work and it can’t be accurately estimated. While, I agree that software development is more difficult to estimate than installing carpets or re-roofing houses, I think that many software developer’s suck at estimation because they have no idea how long things actually take.
Do yourself a favor and start tracking your time. There are a ton of good tools for doing this, like:
If you are curious about how I track my time and plan my week, check out this video I did explaining the process I developed:
By the way, following this process has caused me to become extremely good at estimating. I can usually estimate an entire week worth of work within one-to-two hours of accuracy. And I know this for a fact, because I track it.
Tip 4: Time-box things
I said I’d get back to this one, and here it is.
One big secret to becoming a software developer who is better at estimating tasks is to time-box those tasks. It’s almost like cheating.
When you time-box a task, you ensure it will take exactly as long as you have planned for it to take.
You might think that most software development tasks can’t be time-boxed, but you are wrong. I use the technique very frequently, and I have found that many tasks we do tend to be quite variable in the time it takes us to do them.
I’ve found that if you give a certain amount of time to a task–and only that amount of time–you can work in a way to make sure the work gets done in that amount of time.
Consider the example of writing unit tests:
For most software developers, writing unit tests is a very subjective thing. Unless you are going for 100% code coverage, you usually just write unit tests until you feel that you have adequately tested the code you are trying to test. (If you do test driven development, TDD, that might not be true either.)
If you set a time-box for how long you are going to spend on writing unit tests, you can force yourself to work on the most important unit tests first and operate on the 80 / 20 principle to ensure you are getting the biggest bang for your buck.
For many tasks, you can end up spending hours of extra time working on minor details that don’t really make that much of a difference. Time-boxing forces you to work on what is important first and to avoid doing things like premature optimization or obsessively worrying about variable names.
Sure, sometimes, you’ll have to run over the time-box you set for a task, but many times, you’ll find that you actually got done what needed to be done and you can always come back and gold-plate things later if there is time for it.
Again, just like tracking your time, time-boxing is a habit you have to develop, but once you get used to it, you’ll be able to use it as a cheat to become more accurate at estimates than you ever imagined possible.
Tip 5: Revise your estimates
Here is a little secret: You don’t have to get it right on the first go. Instead, you can actually revise your estimates as you progress through a task.
Yes, I know that your boss wants you to give an accurate estimate right now, not as you get closer to being done, but you can always give you best estimate right now and revise it as you progress through the task.
I can’t image any situation where giving more up-to-date information is not appreciated.
Use the other four tips to make sure your original estimate is as accurate as possible, but every so often, you should take a moment to reevaluate what the actual current estimate is.
Think about it this way: You know when you download a file and it tells you how long it will take? Would you prefer that it calculated that duration just at the beginning of the download process and never updated? Of course not. Instead, most download managers show a constantly updated estimate of how much time is left.
Just going through this process can make you better at estimations in general. When you constantly are updating and revising your estimates, you are forced to face the reasons why your original estimates were off.
What about you?
These are just a few of the most useful tips that I use to improve the accuracy of my estimates, but what about you? Is there something I am leaving out here? Let me know in the comments below.
Also, if you liked this post, join over 6,000 other software developers that are part of the Simple Programmer community. Just sign up here and start your journey to becoming a better, more fit, and productive software developer.
Want to know how I plan my week to get as much done as possible? Here it is.
I use a tool called Kanbanflow to plan out my week based on Pomodoros.
Using this technique I am able to be extremely productive, avoid distractions and know exactly what I’ll be able to get done each week.
For a long time I’ve wondered about the benefits or detriments of caffeine. I’ve always been one of those coffee drinkers who didn’t have to have coffee, but drank it when it was available.
I’ve never really noticed how caffeine affected me, because I never really paid that much attention.
But, I’ve always been curious, especially as a software developer, whether or not caffeine had an overall positive or negative effect.
For the purposes of this post, I’ll equate drinking caffeine with drinking coffee, since most of the studies are done on coffee and not caffeine specifically, and most of my caffeine intake comes from coffee.
Anyway, about 4 months ago or so, I stopped drinking coffee completely. I tried to cut out pretty much all caffeine. About a month or so again, I started drinking coffee again. In fact, I am sitting in a coffee shop here in Maui drinking some coffee as I type this post.
When I first stopped drinking coffee I didn’t really notice any withdrawal effects. Some people report massive headaches and nausea, but I didn’t notice anything really. Perhaps just a bit more sleeping. Now, that might have been because I never was a big coffee drinker. I would usually have 1 or 2 cups a day and a few diet cokes.
You might be wondering why I decided to quit caffeine in the first place. Mostly it came from the idea that I didn’t want to be dependent on any substance and I thought that the extra energy or boost I was getting from caffeine must have been coming at some cost. I wanted to see if I could achieve more even energy levels by avoiding caffeine completely. And really I was just curious to see if I would even notice the difference.
One of the first differences I did notice, after about a week, was that I did feel more level. In general, I felt like my energy levels were the same throughout the day, except for at night when I was a bit more tired than usual.
Being more level was what I was going for, so in a way that was good, but I also started to feel more depressed. At first I thought I was imagining it, but having been back on caffeine now for over a month, I am sure that being off caffeine was causing some amount of depression. I figured this mood change would lessen over time, but after about 3 months, it didn’t seem to change. I only started to see improvements in mood after I started drinking coffee again.
I also noticed that I started to feel less motivated. Now, this could have been somewhat of a coincidence, since I had just gone through a period of working very hard, but I suspect it was somewhat related to not having the caffeine.
Part of the reason for the lack of motivation might have been related to my difficulty in focusing. I did notice that without the caffeine, I was having a more difficult time sitting down and working for extended periods of time. I was much more likely to be distracted and start checking Facebook or doing something else, rather than staying on task.
Overall though, quitting caffeine didn’t really seem to have any positive benefits. I was expecting to feel better and have steady energy levels throughout the day. I was also expecting better sleep, but I really didn’t notice anything but negative effects.
Adding caffeine back
I finally decided to start drinking caffeine again. I’m not sure exactly why, but I think I got to the point where I realized that I wasn’t getting any notable positive benefits from quitting caffeine, so I was curious to see if I would now gain some positive benefits from adding it back.
I have to say that as soon as I started drinking coffee again, I began to notice an increase in overall happiness. My mood, in general, seemed to improve. I did not expect this at all, but after a few weeks, it was pretty apparent that adding caffeine back into my diet was the cause.
I also immediately noticed that my ability to focus increased. I found it much easier to sit down and write a blog post or work on something for several hours at a time without becoming distracted. Even now, as I am writing this post, I am finding it extremely easy to write without being tempted to do something else. The whole time I was not taking caffeine, I was struggling with sitting down for more than 30 minutes to work on something.
About the time I started taking caffeine again, I had decided to start doing some all-day fasts in order to drop some weight and to keep from gaining weight while I was on semi-vacation here in Maui. I had seen several studies that showed that caffeine, especially combined with Yohimbine, (which I am also taking,) had some positive effects on fat loss. I can’t completely confirm that this is the case, but I have lost significant fat during this time period and do feel like my appetite is suppressed to some degree.
Now, I don’t want to pretend that adding caffeine back was all good. There was at least one detrimental effect I noticed. Once I started drinking coffee again, I noticed that it was much more difficult to get good sleep. I noticed that even drinking decaf coffee in the evening seemed to cause me to have sleeping difficulties. Fortunately, those effects did seem to subside, especially when I started making sure to cut my caffeine consumption after noon each day. But, really that was the only detrimental effect I noticed.
What about the studies? What do they say about caffeine?
Obviously, everything I’ve talked about so far has been from my own observations, experimenting on myself, but there have been plenty of studies done on drinking coffee and consuming caffeine. So what do they say?
Well, most studies say that drinking coffee is good for you. I really couldn’t find anything that showed any conclusive evidence that caffeine was bad for you. There were a few studies that showed some possible negative effects–especially if you drank way too much–but, overall almost all the research points to positive effects for coffee and caffeine.
One of the most documented effects of caffeine is on energy levels–no surprise there. Caffeine has been shown to increase energy levels by basically suppressing adenosine in the brain. This has the effect of letting more of the brain’s stimulants do their work. So caffeine doesn’t actually give you energy, it just stops your brain from regulating it so much.
Studies have also shown a positive increase in brain function. Focus levels and memory seem to be improved by caffeine consumption and some studies have shown that it may help stave off diseases like Alzheimer’s and even Parkinson’s.
I talked about this a little before, but caffeine is in just about every fat burning pill out there. The reason is because studies have shown that it has appetite suppressing effects and can help increase metabolism. These effects have generally been shown to be pretty small though, so I wouldn’t give them that much weight.
Finally, and not so surprisingly, caffeine has been shown to ward off depression. I wouldn’t have believed this one if I hadn’t experienced it myself, but I’ve seen a couple of studies mentioning this effect.
There was some early research that pointed to coffee and caffeine causing heart disease and higher rates of cancer, but most of those studies were flawed because they failed to take into account that the more frequent coffee drinkers were also more likely to be smokers. In fact, many of the recent studies show that drinking coffee is likely to help you live longer.
If you want to read a good book on caffeine, check out: Buzz: The Science and Lore of Alcohol and Caffeine.
So should coders drink caffeine?
I’m sure you can guess what my opinion on this is. Overall, I think it is beneficial–but, in moderation.
Plenty of data suggests that drinking too much caffeine starts to decrease the effectiveness of it. If you drink 10 cups of coffee every day, your body will adapt to it and pretty soon you will stop getting the benefits of being more alert and focused.
It seems that you get the best benefit if you don’t let your body get too adapted to it and you time the caffeine intake with the times when you need extra focus and energy.
I would say that you can actually get extra work done with no real additional cost if you can consume caffeine at the right times. I always suspected that you paid for that extra energy somehow, but now I don’t think that is the case. So, yes, caffeine can actually help you be a better coder.
With that said, I would avoid drinking caffeine later in the day, because it definitely can disrupt your sleep. Caffeine usually has a half-life of about 6 hours, so it is probably best to steer clear of it in the afternoon, not just the evening.
In summary, after experimenting on myself and reading all the research I could find, I don’t see any benefit from abstaining from caffeine. It seems that if you do it right, you can get a net positive effect with almost no drawbacks. So, drink up.
If you liked this blog post and you’d like to read more about how you can be a better programmer, join over 5,000 other software developers who have become part of the Simple Programmer community.
It seems that I am always in a rush.
I find it very difficult to just do what I am doing without thinking about what is coming next or when I’ll be finished with whatever I am working on.
Even as I am sitting and writing this blog post, I’m not really as immersed in the process as I should be. Instead, I am thinking about the fact that I need to get this post done and ready to be published today.
For some reason, I always feel like the clock is ticking down on me. I always feel rushed and that I need to rush things along.
I don’t think I’ve ever sat down and written something that had more than a single rough draft and a final draft. I can’t imagine having multiple drafts of a thing.
Why am I saying this? Because, lately I’ve been meditating on the phrase “anything worth doing is worth doing right.”
Am I really giving it my all?
I’ve been thinking about that phrase a lot and how much I tend to ignore it. I get a lot done, but what I get done isn’t always as satisfying as it should be, because I often find I’m not applying myself as much as I should be.
This “weakness” seems to permeate every area of my life. As I’m running or lifting weights at the gym, I often realize that I’m not giving it my all. As I am writing a blog post, or writing code, I get the same feeling of not giving 100%. When I’m playing with my daughter, or spending time with my family, I’m often not 100% there—but, it’s not like I’m somewhere else either. I’m often just sort of wandering through life a little bit “checked out.”
The best word I can use to describe this is slothfulness. I’ve been feeling this pressing need to eliminate as much slothfulness from my life as possible.
I’m beginning to realize how much time and effort is wasted on doing things in a half-ass manner. If I sit down to do some work and I don’t know exactly what I am doing, if I’m not focused on a specific task I need to get done, I end up wasting a lot of time.
But, it’s actually more than that. I’ve found ways to make sure I am focused on the task at hand in order to make sure that I don’t waste time by taking too long to accomplish a particular task, but what is more difficult is giving 100% to the task at hand. It’s quite possible to be 100% focused, but not to be giving it all you’ve got.
There is a huge penalty in not giving it all you’ve got. This is the real struggle—at least for me—at least right now.
I know the work I am producing could be better. I know the time I’m spending could be more fulfilling, if, I could just fully subscribe to the belief that anything worth doing is worth doing right.
Fixing the problem
The good news is that I have been thinking about some ways to combat this problem. Here are some of my ideas:
First of all, I am going to try and not do anything unless I know what I am going to do and I am going to devote 100% of my focus to that activity.
That doesn’t mean that I have to plan out every aspect of my day ahead of time, but it means that I have to at least plan out what I am going to do before I do it.
For example, today I decided that I was going to go to a coffee shop and get the intro letter for early readers of my book done, write an email that talked about the revisions to the chapters in my book and write this blog post.
I didn’t plan for reading through my email, checking Facebook or doing anything else during that time. I’m sitting here working on exactly what I had planned to work on and I am putting my full focus into that work.
I’ll also plan out when I’ll do certain things so that they aren’t hanging over my head and distracting me from other things I am doing. I find that I can’t focus on the task at hand when I have some uncertainty about another task that I need to get done. Whenever I feel that uncertainty about something that needs to get done, my plan is to schedule it so that I can take it off my mind.
Next up, I’m going to try to have a bit more rigorous standards for what I am doing before I start doing it. I’ve found that it’s often difficult for me to decide what “doing something right” means. It’s pretty subjective and when I feel like I am done with a task, my judgment tends to be skewed. I’m likely to call something done that is “good enough” rather than “right.”
Sometimes the effort to take something from “good enough” to “right” is very small, so it is worth taking the extra time and putting forth the extra effort to go the last mile. I can spend a large amount of time and effort on a task or project and have this gnawing feeling of discontent if I am willing to accept “good enough.” This acceptance of “good enough” often negates the entire reward of the effort, so I want to strive towards doing things right instead of just “good enough,” even if it takes more time.
That brings me to the next point: stop rushing.
I’m always rushing. Always trying to get things done as fast as possible so that I can be as prolific as possible. While being more prolific might have a higher monetary reward, I’ve found it often comes at the cost of feeling discontent with the work being done.
This one is going to be one of the most difficult ones for me. Even now, thinking about this very subject, my fingers are still frantically striking the keyboard as I glance at the clock, worried about how long it is taking me to write this post.
I think a solution to this problem may be to block out ample blocks of time to work on a thing. To purposely give myself breathing room. For example, I might feel less rushed if I came here to write a blog post, that I figured would take me about an hour, but I gave myself two hours to work on it instead. And, if I forced myself to spend the entire allotted time working on it, I would probably not feel rushed and I’d would produce an overall better product.
The next task I do, I am going to try and block off time and force myself to use the entire allotted time.
Living in the moment
Let’s see what else is left. How about living in the moment—another extremely difficult one for me now. I have a difficult time stopping to smell the roses. I imagine that if I stop rushing, I’ll probably solve this problem as well, but for now, I am going to try to start purposely giving 100% to what I am doing at any given time.
With every activity I am doing, work or otherwise, I am going to try and focus 100% on what I am doing and also give 100% to that activity. This one will be difficult—I am sure of it. But, this might be the most important thing to focus on. Sometimes I feel like my life is passing me by because I’m always looking forward or backward—I’m never taking time to stop and smell the roses.
One aspect of this that I have been thinking about is to actively think about what I am doing at any given moment and to clearly define it. For example, if I am sitting on the couch, I should ask myself what am I doing. Am I having a conversation with someone? Am I relaxing? Am I doing something else? At any given time I should be able to define what it is I am doing. It doesn’t necessarily have to be something productive. It is better to actively decide that I am spending time browsing Facebook than it is to just be sitting at a computer “doing nothing.”
In fact, I just purchased The Power of Now: A Guide to Spiritual Enlightenment. Not sure if this book is good or not, but several people have recommended it to me and it came to mind today.
Drop more stuff
Finally, I think I need to drop anything that I am not going to do right. This is the full interpretation of “anything worth doing is worth doing right.” I simply need to make a rule that if I am not willing to do something right, if I am not willing to devote my full energy to it, if I am not willing to slow down and not rush through it, then I simply should not do it at all.
I often have thought that if I stopped splitting my focus so much that I’d be able to be much more successful at the things I do choose to do. This is another difficult one for me, because I tend to see one of my greatest assets as my ability to do so many different things. It’s scary and dangerous to either drop things that I am used to doing or to recommit to them, giving 100% effort.
At a surface level, I know that it would be better to focus on a smaller number of things and to dive deeper into those things, but at a deeper level, I’m scared to do it. I’m the kind of person that likes to leave as many doors open as possible. The thought of closing some doors scares me, but I know I need to do it.
Well, that is about it. I’m trying to use this time in Hawaii, away from my normal schedule to be as introspective as possible. Expect some big changes in the next few months as I start to get everything figured out and set the course for the future.
As software developers we spend a large amount of time learning. There is always a new framework or technology to learn. It can seem impossible to keep up with everything when there is something new every day. So, it should be no surprise to you that learning quickly and gaining a deeper understanding of what you learn is very important.
And that is exactly why–if you are not doing so already–you need to incorporate teaching into your learning.
Why teaching is such an effective learning tool
When we learn something, most of us learn it in bits and pieces. Typically, if you read a book, you’ll find the material in that book organized in a sensible way. The same goes for others mediums like video or online courses. But, unfortunately, the material doesn’t go into your head in the same way.
What happens instead is that you absorb information in jumbled bits and pieces. You learn something, but don’t completely “get it” until you learn something else later on. The earlier topic becomes more clear, but the way that data is structured in your mind is not very well organized–regardless of how organized the source of that information was.
Even now, as I write this blog post, I am struggling with taking the jumbled mess of information I have in my head about how teaching helps you learn and figuring out how to present it in an organized way. I know what I want to say, but I don’t yet know how to say it. Only the process of putting my thoughts on paper will force me to reorganize them; to sort them out and make sense of them.
When you try to teach something to someone else, you have to go through this process in your own mind. You have to take that mess of data, sort it out, repackage it and organize it in a way that someone else can understand. This process forces you to reorganize the way that data is stored in your own head.
Also, as part of this process, you’ll inevitably find gaps in your own understanding of whatever subject you are trying to teach. When we learn something we have a tendency to gloss over many things we think we understand. You might be able to solve a math problem in a mechanical way, and the steps you use to solve the math problem might be sufficient for what you are trying to do, but just knowing how to solve a problem doesn’t mean you understand how to solve a problem. Knowledge is temporary. It is easily lost. Understanding is much more permanent. It is rare that we forget something we understand thoroughly.
When we are trying to explain something to someone else, we are forced to ask ourselves the most important question in leaning… in gaining true understanding… “why.” When we have to answer the question “why,” superficial understanding won’t do. We have to know something deeply in order to not just say how, but why.
That means we have to explore a subject deeply ourselves. Sometimes this involves just sitting and thinking about it clearly before you try to explain it to someone else. Sometimes just the act of writing, speaking or drawing something causes you to make connections you didn’t make before, instantly deepening your knowledge. (Ever had one of those moments when you explained something to someone else and you suddenly realized that before you tried to explain it you didn’t really understand it yourself, but now you magically do?) And, sometimes, you have to go back to the drawing board and do more research to fill in those gaps in your own knowledge you just uncovered when you tried to explain it to someone else.
Becoming a teacher
So, you perhaps you agree with me so far, but you’ve got one problem–you’re not a teacher. Well, I have good news for you. We are all teachers. Teaching doesn’t have to be some formal thing where you have books and a classroom. Teaching is simply repackaging information in a way that someone else can understand. The most effective teaching takes place when you can explain something to someone in terms of something else they already understand.
(Want a great book on the subject that might make your brain hurt? Surfaces and Essences: Analogy as the Fuel and Fire of Thinking. An excellent book by Douglas Hofstadter, author of Godel, Escher, Bach: An Eternal Golden Braid. Both books are extremely difficult reads, but very rewarding.)
As human beings, we do this all the time. Whenever we communicate with someone else and tell them about something we learned or explain how to do something, we are teaching. Of course, the more you do it, the better you get at it, and adding a little more formalization to your practice doesn’t hurt, but at heart, you–yes, you–are a teacher.
One of the best ways to start teaching–that may even benefit your career–is to start a blog. Many developers I talk to assume that they have to already be experts at something in order to blog about it. The truth is, you only have to be one step ahead of someone for them to learn from you. So, don’t be afraid to blog about what you are learning as you are learning it. There will always be someone out there who could benefit from your knowledge–even if you consider yourself a beginner.
And don’t worry about blogging for someone else–at least not at first. Just blog for yourself. The act of taking your thoughts and putting them into words will gain you the benefits of increasing your own understanding and reorganizing thoughts in your mind.
I won’t pretend the process isn’t painful. When you first start writing, it doesn’t usually come easily. But, don’t worry too much about quality. Worry about communicating your ideas. With time, you’ll eventually get better and you’ll find the process of converting the ideas in your head to words becomes easier and easier.
Of course, creating a blog isn’t the only way to start teaching. You can simply have a conversation with a friend, a coworker, or even your spouse about what you are learning. Just make sure you express what you are learning externally in one form or another if you really want to gain a deep understanding of the subject.
You can also record videos or screencasts, speak on a subject or even give a presentation at work. Whatever you do, make sure that teaching is part of your learning process.
I spend a lot of time doing two things: blogging and telling other developers the benefits of doing things like starting their own blog. (Occasionally I squeeze in a little bit of time to code as well. And my wife says I spend too much time answering emails and checking my phone—she wanted me to add that to this post.)
So, I can tell you that one of the major pains I am well acquainted with is that of writing when you don’t feel like writing or you just don’t have anything to say.
I experience this frustration myself—heck I am experiencing it right now. I decided to write this blog post because I couldn’t come up with anything else to write about. And, to top it off, I don’t feel like writing either.
But, let me jump ahead and give you a little secret: by the time I’m halfway through this post, not only will I know what to write about, but I will feel like writing.
I know this from experience, and it is part of what keeps me going on days like these.
Writing is difficult
Writing isn’t an easy thing to do.
It is hard to spill your brains onto a blank piece of paper and not make it look like spaghetti.
It’s difficult to constantly come up with new ideas, week after week.
But, by far, the hardest part of writing is just sitting down in front of the keyboard and typing. Even now, as I am typing these very words, a million other things are vying for my attention, calling me away from the task at hand.
Most software developers who start a blog, end up abandoning that blog, because they never learned how to grit their teeth, glue their ass to a seat and write.
Sure, it starts out fun. When you first throw up your blog on the internet, you are full of ideas. You could write a blog post each and every day—not because you are more creative when you first start, but because you are more motivated. The whole process is still very new and enjoyable.
But, fast forward a couple of months—or a couple of weeks for those of us with ADHD—and that shiny-newness of blogging wears off. That little fairy that was sitting on you shoulder telling you what to write is gone—it’s just you and the keyboard.
This is exactly when you have to search deep down inside of yourself and find the grit beneath your soft cushy exterior. You have to decide—that’s right, make a decision—that every week you are going to write a blog post and nothing is going to stop you from doing it.
You’ll want to start over and give up
Even as I write this very sentence, I want to go back to the beginning of my post and delete everything. It’s no good. My thoughts are scattered; my analogies are crap; no one cares about what I have to say on this subject.
I’ve been writing blog posts just about every single week for over 4 years, and I am still smacked in the face with the stick of doubt just about every time I sit down to write. So, I can tell you from experience, that part doesn’t get any easier.
But, you can’t let that stop you. Your face might be swollen, some of your teeth might be missing, you might have to squint to see out of one of your eyes, but as soon as you care that what you are writing is no good, you’ll stop writing—permanently. You’ll fall right off the wagon.
By the time you’ve gotten this far into my own essay, it doesn’t matter if it is good. I’ve got your attention already. I can’t embarrass myself any further, because if you didn’t at least sort-of like what I have said so far, you wouldn’t be reading this sentence to begin with.
I’ve come to the realization that you can’t always hit homeruns. Sometimes, you write crap. Sometimes, what you think is your best blog post turns out to be so terrible that no one makes it past the first paragraph.
But, sometimes what you think is terrible, turns out to be the most popular thing you’ve ever written.
The point is, you can’t know until you hit that publish button and even if you could, it doesn’t matter, because you can’t write for other people, you’ve got to write for you.
Not because you are writing something that you’ll someday read later and say “oh, yes, that is how I solved that problem in the past”—although, that does happen from time to time. Instead, you have to write because you made a commitment to yourself and the commitment wasn’t to string marvelous words into sentence on paper, but instead just to write—it doesn’t have to be any good.
The secret is to keep going
I’m sure you’ve noticed by now that I haven’t really told you what to do when you don’t feel like writing and you have nothing to say, so, here it is: write.
Yep, that’s it. It’s that simple.
Take some duct tape, put it over your mouth, shut up, stop whining, pull up a chair, sit down at the keyboard and start moving your fingers.
You can’t sit there and type and have nothing to say. Now, what you have to say, you might think isn’t any good—and it may be utter crap—but there is no reason that has to stop you from writing. Just do it.
There are a million ideas bouncing in your head, but some of those ideas will only come to the surface when you have decided you are going to sit down and do the work.
Don’t believe me?
Try this exercise on. Right now I want you to close your eyes, and think about nothing. That’s right, think about absolutely nothing—I’ll wait.
How’d that go for you? Were you able to think about nothing?
So, don’t tell me you don’t have something to write about. Of course you do. Your problem—and my problem—isn’t writing, it’s typing it out.
P.S. – By the time this post goes live, I’ll be in the middle of launching my How To Market Yourself as a Software Developer program. If you liked this post, go check out the program. It has a whole video course on creating your own developer blog and making it successful.
In the last year, I:
- Created and produced 30 full length video courses for Pluralsight
- Wrote 56 blog posts
- Produced 40 episodes of the Get Up and CODE podcast
- Created 50 YouTube videos
- Published a book
- Spoke at 4 events
- Billed over 100 hours of contract work
- Created a full product, that I am about ready to launch
- Ran 5 kilometers 3 times a week, every week
- Lifted weights 3 times a week, every week
I’m not saying this to brag–although I am certainly proud of these accomplishments. I am saying these things to prove that I know what I am talking about when it comes to productivity.
Being super productive
Right now–as I type–I have a timer ticking down. The clock shows approximately 14 minutes before I’ll take my next break. I live and die by this clock.
You may have guessed it, but the clock is a Pomodoro timer. For the last year, I’ve been religiously using the Pomodoro technique to not only stay on task, but to plan out my days and weeks.
If you aren’t familiar with the Pomodoro technique, the concept is remarkably simple. So simple, that I first dismissed it as ridiculous. But, thanks to my good friend Josh Earl’s success with it, I decided to give it another try.
You basically set a timer for 25 minutes. During that time you pick a single task to accomplish and work on that task, uninterrupted. After 25 minutes you take a break for 5 minutes and then begin again. After 4 cycles, you take a longer 15 minute break. (There are some variations on this, but that is the basic idea.)
Like I said, it seems pretty simple and unremarkable, but I can’t even begin to express how powerful this technique is for getting things done.
I’m lazy by nature. I have to constantly fight against the side of me that wants to procrastinate and slough off my work. The Pomodoro technique helps keep me focused by forcing me to work uninterrupted for a period of time. It also gives me a measure to compare myself against and realistic targets to aspire to achieve.
My week beings on Monday. On Monday morning I wake up and go to the gym to lift weights. When I get back, I have a protein shake and get to work.
The first thing I do when I get to my desk on Monday is start my Pomodoro timer and open up my “Weekly Plan” Trello board. I use this board to organize my week. It has nine columns. Seven columns for the days of the week, one column for today, and one column for done.
My first task of the day is to create the rest of the tasks that I think I can get done that week. I start off with a checklist of things that I know I need to do every week:
- Blog post
- Podcast episode
- YouTube video
- Newsletter email
- Buffer social network posts
Then, I add cards for the current projects I am working on for that week.
Once I’ve got all the cards I can think of on the board, I start tagging each card with a color that represents how many Pomodoros I think that task will take. I have three categories:
- Green: 1 Pomodoro
- Yellow: 2 Pomodoros
- Orange: 3 Pomodoros
If something is going to take up more than three Pomodoros worth of time, it needs to be split into multiple tasks.
Next up is planning the week. For each day of the week–unless there is something that will take up most of my time–I figure I can get about 10 Pomodoros done. This may not seem like a lot, but believe me, it is. I drag cards into the columns until I have filled up each weekday with 10 Pomodoros worth of cards. For weekends, I usually just drag in about three or four.
My estimates are always on the high side, but they are pretty accurate, because it is fairly easy to estimate based on half hour intervals–especially when many of your tasks are repeated each week. (For example, a blog post is estimated at three Pomodoros.)
I have a similar ritual every single day. The first thing I do, after exercising each day, is to open up my Trello board again and this time plan the day.
New things come up and other things need to get shifted around, so planning for the week alone is not sufficient. Often, I’ll have different tasks that I had vaguely identified at the beginning of the week which I’ll give more clarity to later on.
I first drag things over from the appropriate day into my “Today” column until that column is filled with about 10 Pomodoros worth of work. After that, I’ll take a look at the today columns and think about anything I might have missed that needs to get done that day. Finally, I’ll sort the “Today” column based on priority–I want to make sure I am always working on the most important things first.
Once I’ve got the day sorted out, I go back to the rest of the days in the week and move around cards until everything is balanced again. If I find that I’ve got some empty slots, I’ll create new cards and start filling those slots until I am back at full capacity again.
Once all the prep-work is done, it’s time to actually start working on tasks. I grab the first task off the list, start a timer and get to work. At about 5:00, I stop for the day and add up my Pomodoros. If I didn’t hit at least 10, I count on working a little bit that evening. If I did hit 10, it’s optional.
Why this works
So, you may be wondering why this works–why it is worth even writing about such a simple workflow. Well, even though this workflow seems really simple, there are a few key things going on here that aren’t immediately obvious.
First of all, I am using quotas to make sure that I accomplish the volume of work that I want to produce each week. I have quotas for how many blog posts, podcasts, YouTube videos, and other content that I need to produce each week. The things that are being measured by a quota get dropped onto my board first.
I’m also using a daily and weekly quota when it comes to Pomodoros. Pomodoros are little measurable units of work for me. I know that I should be able to get 10 done each day and that I should be able to get roughly 50 done in a week without killing myself. I know from experience that hitting 60-70 will cause a measurable dip in performance the next week and that if I am doing less than 50, I am slacking off.
Because I have those quotas in place, I know what is expected of me each and every week. I have the power to hold myself accountable to a real measurable standard. I can’t emphasize enough how important this point is. If you don’t have a way to hold yourself accountable to a standard that you want to achieve, human nature will cause you to fall way below the bar.
Another major component that makes this technique successful is the awareness of my capacity within a given amount of time. It is really easy to over or under estimate what you can get done in week, because you don’t normally have a ruler that you can use to measure task duration versus your actual capacity. When I start the week, I know that my capacity is about 50–I’ve got that much gas in my car. I get to choose where I want to drive that car that week–I can only go so far. I have to make a realistic prediction of what I can actually get done. From that prediction I have to prioritize my tasks so that the most important things get done first.
Without this understanding of my capacity, it is easy to fall into the trap of overestimating my ability to get work done and underestimating the take it will take to get the work done. With this system, I have a real metric to compare to. I know that I am not going to get 80 Pomodoros done in a week. I know that in an 8 hour day, I will not get 8 hours of work done. I am eliminating my biases by replacing them with real statistics.
Finally, the dedicated focus of the Pomodoro technique makes me more efficient at the work I am doing. When I am solely focused on one task at a time–without checking Facebook or Twitter–I work much more efficiently. Several studies have shown that multitasking causes a drop in efficiency. When I stay focused on a single task, I get much more done. I’ve written about this before, when I talked about quitting your job, but you can easily lose hours of time in a day to small distractions. Over the period of a year’s worth of time, all those wasted minutes can end up equaling weeks of lost productivity.
One huge benefit of this technique is that I am able to do most of this work without stress or guilt. Normally, when I am working, I always feel guilty about how much time I am wasting during the day. I also feel stressed about not getting as much done as I should be getting done. This situation of stress and guilt actually ends up being the perfect breeding ground for procrastination and burnout.
When I am using the Pomodoro technique, I don’t feel the guilt of wasting time, because I know that as long as I get done 10 Pomodoros in a day I have reached my productivity goal for the day. If I get more done, great.
I also don’t feel stressed about getting as much done as I should have, because how much I get done is no longer what is being measured–I’ve taken the burden off of my shoulders. My focus has shifted from results to process. I can’t control the results. Work takes as long as work takes. But, I can control the process. If I put in my 10 Pomodoros for the day and I have sufficiently prioritized my work, then I have done the best that I can do–no need for guilt, shame or stress.
Time for a break
If you are interested in getting started with the Pomodoro technique, I’d recommend checking out Pomodoro Technique Illustrated. And if you have any questions about my process and how it works, feel free to ask and I am happy to answer them in the comments below.
Also, if you liked this post and are interested in more of what I have to say about being productive and boosting your career, sign up for my weekly newsletter here. You also might want to check out the course I am putting together called “How To Market Yourself as a Software Developer.”
I write quite often on this blog about starting a side business or becoming self-employed, but one of the biggest struggles in getting something new started is finding time.
The same goes for getting fit and getting in shape.
So, if you want to be successful in your career, or in life in general, it is really beneficial to find out where you are wasting your time—so you can stop wasting your time.
I’ve found there is one major time-waster out there that many of us indulge in. One that can easily be cut out, or at least reduced significantly, to give you back much of that time you are wasting each day.
I’m not going to give away the answer here, but you can probably guess what it is already.
Check out my video for this week below and let me know what you think.
In this video I talk about how important it is to build a routine for yourself.
I’ve found that having a routine, while boring at times, is really important for long term success. I used this technique to get 30 Pluralsight courses created this year alone and 54 overall.
Watch the video to find out why I think having a routine is so important.
There are many things we do that require a large amount of setup before we can actually produce something. For example, these YouTube videos require quite a bit of setup to record. Often, we can increase our productivity in these cases, by learning to produce things in batches.
In this video, I’ll tell you why you might want to consider using batching to help you be more productive and I’ll tell you how I use batching to even make these videos.