There are developers who are smarter than me. Ones who can architect better than me. Ones who can code better than me. Ones who can create a better UX than me. (Actually there are kindergarteners who can design a better UX than me – I suck at art, color choice, etc.) And you know what – there are developers who are better than you too.
So what to do? Simple, to be a better developer you need to cheat. There are practices that will enable (I hate that word) you to work at your absolute best. And the final measure is what you produce, not what you could produce if you were more focused.
The 4 keys to super-charging your productivity:
- Eliminate all distractions. All!
- Focus. Total complete focus.
- Be lazy. Look for the easiest solution.
- Think first. Find the elegant approach.
To get specific on the above points, in priority order:
- Don’t listen to music. There is a study that shows developers given the same task – every one listening to music missed a basic optimization while everyone that worked without music found it. I’ve consistently found that turning off music when trying to do something hard often makes it easy.
When you’re doing easy or mindless work, by all means listen to music. But when you have to do something even moderately hard – turn it off. (I listen when doing builds, clicking through the program to verify bug fixes, or most management tasks. But it goes off when architecting, designing, coding, or fixing bugs.)
- Turn off I.M. Facebook, news feeds, email, your browser, or anything else that interrupts you or invites you to do something else. Turn your cell phone to silent and place it where you won’t see the vibrations when something occurs. When your code is building it is much more productive to stare at the wall than to “take a quick look” at email, Facebook, a web page, etc. And often times while staring at the wall something will occur to you about the code you are working on. I also permanently set Outlook to provide no notifications when mail comes in so I check email when I want to.
I often leave Outlook running but set it to Work Offline. I do this both because my Inbox is my to-do list and because I can write any emails that I create based on the work I am doing.
- Shut your office door. If you’re in a cubicle go work for a company that values your time put a note up saying “Please Send Email.” (And seriously, go find a company that values your time – offices double productivity over cubicles and open pit areas are horrible.)
- One thing at a time. People are awful at multi-tasking (those that are “good” at it merely take less of a hit). So don’t work on new code, bugs, etc. in priority order, work on all items in the same part of the code together. Prioritize based on the importance of the groups you have on your plate. If you do have to shift, try to do so weekly – on Mondays you generally don’t remember 80% of what you were doing Friday.
- Whenever anything occurs to you – write it down instantly. The two things you’re going to do in 30 seconds after you exit the program and are back in the debugger – write them down. The idea you get in the middle of the night that is so incredible that of course you’ll remember it – write it down. Always anywhere have either a smartphone (I send emails to myself) or pen and paper (next to the bed so you don’t have to turn the light on in the middle of the night).
- K.I.S.S. Less code, simple code. If you figure out how to accomplish a goal with no new code, you’re “brilliant” and yet you did nothing. When you do have to code, if you cannot think of an elegant solution, do something else and leave it in the back of your mind. Often a simple solution will come to you the next morning in the shower.
For me swimming, working out, or long showers when I’m not thinking of work is when I often come up with elegant solutions. Give your subconscious time to come up with a better approach.
- Let Google, StackOverflow, MSDN, etc. do your work for you. Ask others for suggestions, for samples, for help. Doing it all yourself is not a sign of strength and independence, it’s a sign of stupidity. After all Isaac Newton himself stood on the shoulders of giants.
- Walk all code using TRAPs.
- Write unit tests when you fix a bug (before or after is fine). And don’t overdo it – some bugs aren’t worth the effort of creating a unit test. Others can best be tested as part of some larger test. The TSA tests without limit – do you think that’s the best use of resources?
- Make notes of the details you are in when you go home at night. You’ll be amazed how often all that is new to you in the morning.
And if you’re a manager, here’s what you can do for your programmers:
- Put them in individual offices (doubles productivity over cubicles or open pit areas).
- At a minimum quad core computers with dual 1920×1200 monitors (most studies show that going from 1 to 2 monitors provides a 20% increase in productivity). At Windward we’re going to soon be upgrading everyone to dual quad core (8 cores total) systems, 3 1920×1200 monitors and an SSD drive for the main drive (VMs and other large files go on the hard drive).
- Java programmers? Use IntelliJ. C# programmer? Use ReSharper (it’s an add-on to Visual Studio). True story, in one meeting we decided that we needed to do some pretty horrific refactoring. I volunteered to do it and the lead gave me 3 days to get it done. I checked it in 20 minutes later due to ReSharper. I said it was due to ReSharper but I was still the hero.
- And if you need reporting or docgen software – Windward will save you a ton of time.