There are tons of products on the market that claim to improve developer efficiency, from different languages to IDEs, automated build tools to automated build environments. Justin James tries to bust some myths, bring to light a few truths, and show some partial truths regarding developer efficiency.
If you read the ads in development-related magazines or on Web sites, you would think that solving development inefficiency is a great path to making big bucks -- and I believe that it is. There are tons of products on the market that claim to improve developer efficiency, from different languages to IDEs, automated build tools to automated build environments. I will try to bust some myths, bring to light a few truths, and show some partial truths regarding developer efficiency.
Myths about what leads to developer efficiency#1: Drag 'n Drop IDEs are the be-all and end-all.
Drag 'n Drop IDEs are great... for building UIs. Outside of using a Drag 'n Drop IDE as a graphical code generator for UI-specific tasks, they universally stink. Unless you are writing an application so basic that the IDE's assumptions about how code should be written won't hurt things, chances are you will rip out at least half of the code that the Drag 'n Drop IDE put there for you. Go ahead, use Visual Studio or Eclipse -- they are great IDEs. But be wary of trying to drag ‘n drop your way to a complete application.#2: Slumber parties at the office equal more quality work completed.
I call a workaholic programmer who regularly pulls all-nighters The Martyr. It is tempting to think that putting in more hours equals more work, but most developers are spun out by 5:00 PM. Development is brain-taxing work, and you cannot do it when you're tired or improperly nourished. A late night here and there may pay off, but chances are, the quality of the work done past 6:00 PM or 7:00 PM is low, and the next day your efficiency will be in the toilet. Avoid the late night work whenever possible -- you are not nearly as efficient as you'd like to think.#3: Caffeine, nicotine, and sugar are your friends.
Caffeine, cigarettes, and sugary beverages contain chemicals that might provide a temporary boost in awareness, alertness, and concentration. But the 30-minute jolt that a can of Mountain Dew might give you is followed by a much longer crash that dulls your senses and fatigues your body. This is why you see people with trash cans full of soda bottles, cigarette packs, and coffee cups; they need to continually ingest the chemical(s) of their choice to find a balance. Trust me, I have been there myself (regrettably, I started drinking coffee again a month ago, but I am still cigarette and sugar free). Try to replace the coffee with water, the sugar with fruit, and find a way to quit smoking. Not only will you stop feeling the nasty side effects of coming down, but you will also have much fewer interruptions when you do not need to leave your desk constantly.
Truths about what leads to developer efficiency#1: Environment matters
No, I am not talking about Al Gore or Greenpeace. If you are in an office, I bet good money that there is a standard fluorescent light bulb over your head. It probably cost the builder $45 or less to install; meanwhile, full-spectrum task lights can easily cost over $100.
Ever notice how many IT pros turn the lights out in the office? It is because fluorescent lights are horrible on your eyes when you're using a PC; turning the lights off reduces the immediate stress on your eyes that causes the 2:00 PM headache. The problem is that your eyes dilate even more when you turn the lights off, letting even more of the eyeball killing monitor light damage them. In other words, the short term "fix" does long term damage. Go ahead, buy the $100 task lamp; it is cheaper than a new pair of glasses or contacts, and it will improve your efficiency significantly since you won't be in pain by mid-afternoon.#2: Practice makes perfect
A lot of developers think that warming a chair for 10 years makes them a better programmer. The fact is that someone who spends time reading about new ideas and trying them out on their own time is going to learn valuable lessons that they can apply in their day-to-day work. If you want to become more efficient, I suggest spending time working on a project (at home or set aside an hour or two a week at the office) that is related to work but that uses techniques that are new to you. You will discover that learning new techniques always pays a huge dividend.#3: Limit interruptions
Your manager is making you less efficient. Every time he or she stops at your desk for a quick status update or e-mails you a memo reminding the team of the dress code policy, your concentration is broken. Even a slight distraction of a minute or two can take many more minutes to recover from and get back in "the zone." Add that up over the course of a day, and you could be losing up to an hour's worth of time where you are fully "in the problem" due to your manager or a coworker interrupting your thought process.
Close the door (if you have one), put blinders on so people near you don't bother you, and close your e-mail and IM clients. Limit opening your communications software to a few times a day (after a meal, a restroom break, or other similar time is perfect, since you have already lost your train of thought anyway). If it is really important, they can pick up the phone and call you.
Partial truths about what leads to developer efficiency#1: Code generators may lead to more work on your end.
If you are doing a ton of rote tasks, like creating the accessors for a class that represents a 200 element XML schema, code generators are great. Drag 'n Drop IDEs make short work of generating UI code, but unless your task is extremely generic, you will probably spend more time tweaking the generated code than it would have taken you to just write it yourself. For specialized tasks, sometimes a text editor that supports regex find/replace or a spreadsheet program like Excel can do a task in a few moments where pricey code generators fall flat.#2: Language matters some of the time.
Sometimes language matters, and sometimes it doesn't -- it is completely situational. For example, many of the languages that can be written extremely quickly thanks to type inference or syntactic tricks are often difficult to follow when they are maintained. The two minutes worth of typing saved can cause an hour of wasted time down the road. The current mainstream languages (Java, VB.NET, and C#) are all so similar (VB.NET is slightly more verbose) that none of them are particularly more efficient to work with. Some languages do have unique properties and advantages that can significantly impact development time. For instance, try writing something that is as pure logic (or math) as a weather forecasting system in C#, and you'll be sorry. On the flip side, a typical Windows desktop application written in Fortran will probably take forever. Library support matters too; some languages, despite being weaker, in and of themselves, have library support that makes up for it.#3: Personal life
Developers who get phone calls from friends and family for a total of two hours a day are probably not going to get much done. However, locking people down is not going to fix the issue of personal calls either. For many people (particularly those with children), a five minute phone call might save a trip home. In an ideal world, developers would not let their personal life and issues affect their work. In the real world, an argument with a spouse, money worries, the kids' grades, and so on can and will spillover into someone's work time.
So, for all you managers out there, while personal telephone calls represent an obvious inefficiency, it's fairly useless to have a programmer in the office who has something heavy on his or her mind. They won't be able to concentrate anyway, so go ahead and let them do what they need to do within reason.
What would you add to this list?
I would love to hear some developer efficiency myths, truths, and partial truths from you. What do you think is making you less efficient? What do you think would make you more efficient? Share your thoughts in the discussion.