How I Optimize, Myself

I love thinking about productivity, especially with regards to software development. It’s one of those things that gets my brain churning. It’s this interesting intersection of technology, business, and behavioral psychology that together can account for enormous differences in the quality of work and the efficiency of teams and individuals.

I’m sure you’ve noticed. On some days, you’re churning out code, in the zone, solving problems, tearing things apart and building them back up at a blinding pace. And then other days you seem to be so sluggish or distracted and unmotivated that you barely get anything done.

I’m just as susceptible as anyone else to dips in productivity, but I think that over the years, I’ve identified some things that affect me and have tried to adjust accordingly. Obviously, simple tips can’t make you smarter, or make you know something you don’t, but I’d like to offer some of my own practices that I hope can help you work at your most efficient level.

Here we go.

Find the right spot to work

For me, it’s actually my apartment. I’m more productive there than at any office or coffee shop I’ve ever worked, by a large factor. It’s really not even close. I believe in my case it has to do with the lack of distractions. Which I think merits its own point. And so…

Eliminate distractions

For a long time there’s been a fad in our industry of having open workspaces. While being right next to someone and being able to just look over and ask a question is ideal for communication, it can be the opposite for concentration. Headphones with loud music don’t solve the problem either. What I personally believe works best is quiet. Can you imagine taking a final exam in college with someone blasting music? You can’t concentrate at your best when any sort of external stimuli is demanding some of your attention. It needs to be quiet, and free of any visual distraction as well. People walking by, a television, anything like this should be avoided for you to stay in the zone. If your office doesn’t have a quiet distraction free area to work in, take it up with your manager. I’m personally lucky enough to get to choose when to work from home, and I often do so when I have a large piece of work cut out for me that I don’t need to communicate much more on.

Be Agile-ish

Among other aspects, one can generalize agile methodologies as encompassing two things: breaking work down, and prioritization. If you’re not in some way doing these things (and doing them well in my opinion takes a lot of discipline) then you’re not likely to be working as efficiently as you can. Consistently completing small manageable tasks, goes a really long way towards energizing you, and keeping a project going, let alone ensuring that you just happen to be working on what’s most important at that time.

Balance between the fun and not-so-fun

Some problems are hard and fun, some are easy and boring. That’s usually the way things go. If you find you’re taking things slow because you’re just not motivated to work on something, try switching to a “juicier” problem for a little while. Just don’t neglect to come back to the boring again once you’re more energized. Not all work is glamorous. You have to accept that.

Don’t think at your desk

This may seem like a funny suggestion, but when you’re at your keyboard, the only thing that you should be doing is manipulating code to get it to do what you want. If you have to think much about something, perhaps as part of your refactorings, or to answer a higher level question, stand up, and begin to walk away. Staring at code, and whatever else is on your desktop, doesn’t help you visualize the problem in order to figure out what the best solution is. I usually just pace back and forth. It may look funny, but I know it really helps me.

Explain it to someone else

This is one of those things that’s so incredibly powerful it’s uncanny. When you’re stuck on a problem, feeling like you’re spinning your tires, a fresh perspective is often what you need. Someone who hasn’t been stuck with you will ask some obvious questions, that sometimes you’ve missed. What’s even better, is that often all it takes is to explain the issue to someone else, and without them even responding, you’ll realize the solution.

Resist the urge to over complicate things

It’s easy to get carried away thinking about a perfect system. Modeling all the concepts. Thinking of a perfect algorithm and wanting to develop this great system so badly as a way of proving your developer “machismo”. But it’s often not important, a waste of time, and actually selfish to spend time on frivolous development. The success of your team demands that you make meaningful progress. Try to ask yourself, “Can we get away with doing less?”. If the answer is yes, you should probably do that.

Put anything complex off until later

As an addition to the previous point, if you think you have a great solution, but it’s a complex one and will take a significant bit of time to create, don’t work on it right away. Keep it in the back of your mind, and what will often happen is that your zeal to build such a big and complex thing, a week later, will not be as strong. Instead you’ll think of a quicker and better solution that often makes more sense. Bottom line, be wary of jumping into a big complex piece of work until you’ve given the idea some time to settle.

Take strategic breaks

Try to notice when you’re slowing down. It’s ok. You can’t expect yourself to be burning rubber all day, every day. When you’re slowing down, it’s probably a great time to consider a break.

Seize each moment of inspiration

As a follow up to the previous point, while you need to recognize when you’ve lost steam, you also need to recognize when your coals are burning hot. That moment that you’re going to bed, and a great solution comes to you. Don’t let that moment slip away! Write it down, or maybe stay up a little longer and work on it. You’ll be amazed at how quickly you start tossing your code around when you’re “in the moment”.

Take notes constantly

What if you’re having a moment of inspiration, and you can’t get to your computer to start working on it? Write it down. If you’re anything like me, then you’re head is constantly filled with ideas, breaking your software apart, thinking of it in abstract ways. You frequently get great ideas and clear thinking about what you’re building. If you don’t write it down, then the next time you sit down to write code, you may end up wasting time on a worse idea again, rather than executing on what was a better plan.

Do work that’s appropriate for your mood

In other words, if you can’t focus because of distraction, or are tired, you can usually still get some easier work done, like organizing your notes, writing some basic documentation, or perhaps simple tweaking of layouts and simple refactorings. You’re not going to solve the big problems when you’re tired, hungry or distracted, but you can still be productive. The trick is to recognize when the situation is not optimal, and to have a ready list of easy stuff to pick off, that can keep the project moving forward.

Reward yourself

You are not a machine. Although consistent productivity feels great, sometimes you might feel like there’s no point in all the progress. Make sure that you take the time to reflect on how much you’ve done, and on where you’re headed. It’s also important when you’ve accomplished something, to share what you’ve done with someone else. Not only will it rejuvenate your motivation to keep pushing on to the next problem, but you’re excitement will be contagious and will motivate the rest of your team.

Take time off

While these tips will keep you primed on a day to day basis, no one can expect themselves to go strong for months on end without a meaningful break. I can’t really tell you how to take time off but just make sure that you spend your time in a stress reducing way. The goal with your time off, should be to come back feeling energized and rejuvenated.

You may have noticed that many of my tips involve, somewhat counterintuitively, not working on things: putting them off for later, taking breaks, clearing your head, etc. The adjunct to putting things off, is that you need to seize the moment when inspiration does come to you, and to either write it down, or work on it immediately. This strategy overall, is the most effective that I’ve found for doing my best creative work. I’m constantly writing notes. You should see how they pile up. And I always take a break (usually by taking a walk) when I’m stuck. If you take nothing else from this article, I hope you try this out.

One final thought I want to make clear. I’m in no way condoning overworking yourself. Keeping yourself at optimal productivity, in fact, involves never overworking yourself. Learning how to adapt to your situation and remain productive can take time. I’ve burned myself out on work multiple times. I learned strong lessons from those experiences, the most important of which is to take care of yourself first. Your well being is more important than any job.

Thanks for reading and I hope this helps some of you out there.

Happy hacking.