I would like to lay down some general thoughts and experiences on how to work efficiently as a developer. Most of you will take these points for granted, but you never know if there is one point which will give you a new idea on how to do your thing. This list is of course incomplete, you always should search for ways to make your work more efficient and easier.
Get into the zone, stay in the zone
One of the most important things for a programmer is to get onto the train of thought and work at his task. If you’re focused on your work you always have the next steps in your head, you see the problems and how you could avoid them. If something interrupts you, the image in your head collapses and you have to start again. You can help yourself to get back into the zone:
- Make TODO and NOTE-comments, they help you get an overview of what has to be done where and how
- Scribble down ideas and thoughts onto a block of paper or into a .txt which is opened on your second screen
- Use a Whiteboard to quickly scribble down ideas
- Creating MindMaps is another way of structuring and writing down your ideas quickly
These points all won’t disturb you a lot from your main task, but you can see what you had in your mind if you want to begin again.
Make breaks at the right time
Making breaks helps a lot. You get your head clear, you can restructure your thoughts and you have the chance to gain some energy for the next tasks. But you have to know when to pause in order to not loose focus. If you’re trying to solve a tough problem and can’t see the solution directly, it’s difficult to withstand the urge to do something else. Try to refocus, discuss your problem with a coworker, but don’t do something entirely else. The problem won’t solve itself and you’ll have a hard time to get on the train of thought again. Shift your break to the point where you’ve solved the problem, use it as a reward.
Centralize your information at one point
There is a lot of information you get from different systems. There are messages from coworkers, code changes from other developers or test results. All these are stored in different systems: Outlook, Jenkins, Subversion to name a few. The more tools come, the more difficult it gets to keep an overview. Use a system which gathers all this info at a centralized point. You can simply use Email for that, almost every tool supports it. Another way is IRC, I wrote a lot about it in the last weeks. It’s also possible to have all this information on an Intranet webpage, some companies provide such systems.
Automate your daily work
Do not do something yourself which a computer could do for you. That way you can focus on other important things. Create automatic tests to see if your software is broken or use a continuous integration platform to build your software. Another thing to automate has been discussed in the previous point: Don’t look for information yourself, try to get it delivered to you if you need it.
This point is related to automatism too: Use tools or hardware to create shortcuts and automate certain things:
- Tools like AutoHotkey could be used to put complex actions onto simple keyboard commands
- Modern keyboards provide the same functionality hardware-wise. They have extra keys for makros. Don’t get blended by most of them are declared as Gaming Keyboards, they’ll support your development tasks too.
- Launchy let’s you put searches, commands and communication just a keystroke away. It’s usable on different operating systems and enhancable via plugins
- Write scripts that support you to accomplish your daily tasks. I like to use Python for that, often a simple bash script will help too.
Communicate a lot
This is probably an obvious point, but there are a lot of developers underestimating it. It’s important to talk to your coworkers about what you’re doing, about problems you have and about what you’re planning to do next. It’s also important to identify and talk to your stakeholders: They are the ones your working for: be it a customer, your boss or other departments you’re working with. Talking to others helps you being informed, solve your problems and to do the right thing.