If I feel like I'm being inefficient because I'm not meeting my estimates, it's not because of efficiency, it's because I'm really bad at estimating the time a project should take. Just like any other developer out there.

There are a lot of articles out there for doing proper time estimation, and they are about as good or bad as all the articles for increasing productivity. That is, there isn't really a good answer for that except for seeing the same thing over and over again and knowing from that experience how long the individual parts should take. Anything I haven't seen before is just going to be a WAG (wild ass guess.)

Otherwise, I just have to be honest with myself on how I'm spending my time. Am I getting distracted a lot while working? Am I working solid days? If I need to be working six hour days but I'm routinely getting only 2 hour days of work and 4 hour days of watching cat vids, then I have a different problem.

I make sure that I'm getting real work done during my most productive hours. My most productive time is right after I get up, ridiculously early in the morning. If I'm reading hacker news during this time I can literally feel my life force draining from me. If I don't make the most of this time, then I'm losing out for the day.

Every developer has an optimum amount of productive hours per day. For me, it's four hours and I begin going downhill after that. Sure, I can spend 12 hours working, but the first four are productive and by the last two I'm a stumbling, bumbling mess, lucky that I can type out my own name. Like sleep, this is different for everyone.

Hours worked for me is like the inverse of sleep. If I use up my pool and go into reserves, then I'm that much less productive the next day. I always have to pay back my debt. So, if I'm wrong on my estimates, then working extra hours doesn't help. I just have to be honest with everyone concerned and let them know that the timeline is in trouble and needs to be extended. That's fine, communication and honesty will almost always make up for missed deadlines. Lack of honesty and communication is poison.

As a remote worker, I have the luxury of picking my hours. So, I have been slowly doing away with the idea of a weekend. If I feel super productive on a Sunday, then I need to be working. Then, if I feel unmotivated on Tuesday, I can take that day off knowing that I'm still on target for my hours worked and I didn't have to force myself and in doing so, being less productive.

A bit issue for me, especially when working on my own, is getting bogged down in an issue. Sometimes it's something that I'm having a hard time figuring out, other times it's me geeking out and trying to over-engineer something. I have trained myself to recognize the symptoms and immediately hit the alarm to have another developer come in and suggest an alternative route.

I can blame myself for letting in distractions for news and cat vids, but I have limited control over communication distractions with my team. What I try to do is get an expectation going that I have certain times during which I'm open for communication and which times I'm trying to be a productive developer. It's death for me to be spending a couple of hours in meetings during my most productive hours, much better to make myself available during times when I have already used up my productive time. That way mind numbing meetings help me get ready for naptime. ;)

I'm sure I could come up with a lot more, but this is the "off the top of my head" stream.