Laziness Makes A Great Developer

One of the guiding principles I have lived by the came from my middle school swimming coach. He told us:

Don't do more work than you have to.

On first glance, it doesn't seem to be very good advice. However when you realize that what he was getting at was we shouldn't waste energy on a poor stroke, the quote takes on a much deeper and more profound meaning. It is this principle that takes a good developer and makes him great.

Profile of a Good Developer

Good developers are almost a dime a dozen. Walk in to any computer science course or web development shop and you'll find that the majority, if not all, are good developers.

These "good" developers can sit down and work through an object oriented architecture, they can construct their SQL queries, and can write an application that just works.

A "good" developer checks in his source code at the proper times, he comments his code as well as could be expected, and you can usually be guaranteed his code will compile and execute with very little fuss.

Profile of a GREAT Developer

What separates the great developers from the good developers is LAZINESS! You will find that the good developers, while producing clean, working code, operate much slower than great developers, and for the reason that separates the good from the great.

Good developers are set in their ways of just manually working with everything. A good developer handles deployment with FTP, and updates database structure by hand. In the end, the good developer ends up wasting time doing menial tasks. FTP alone can kill up to 30 minutes of your day. Good developers are very set in their ways and do not like new things introduced.

Meanwhile GREAT developers HATE menial tasks. They abhor having to drop into the console every time they wish to test or deploy, and loath dropping into the database to manually update structure. So these GREAT developers begin to write scripts and integrate all their tools to reduce their menial overhead as much as possible.

The GREAT developer is lazy because they do not want to do things themselves, so they spend 20 minutes automating their tasks so they'll never deal with it again. And when you think about it, when you could spend 20 minutes once writing automated deploy scripts but instead spend 20 minutes every deploy in FTP, you are doing more work than you have to.

What Does This Mean For Me?

All of us developers should strive to be as lazy as possible. Do you have a task you have to do more than 3 times total? Write a script or a build task for it. Do you spend a lot of time testing features? Automate your testing. And if possible, integrate the systems so you never even have to run those scripts manually, reducing user intervention to one step.

I know I try to be as lazy as possible, do you?

Edit 6/10/2008:

I feel I should make sure everyone knows that I am to an extent being facetious with the word "laziness" but I'm being completely serious on the "don't do more work than you have to." While a good developer can handle long, arduous tasks that are prone to human error, a great developer avoids them in the first place.

4 Comments

  1. Jeff Carouth:

    I think that the terminology of the title is a bit off. Yes these are great characteristics of an addition to a team, but the terminology of “laziness” paints a picture. Automation isn’t necessarily to appease the lazy nature of “great” programmers as much as it is meant to improve the efficiency of the development workflow and to promote and facilitate a more sustainable product down the road.

    I’ve found that automation, especially in the context you framed above, really helps to ensure that “commits” are stable, working code and ensure that products are rock solid. Functionality is easy to make, the quick and dirty way. And in our particular arena–the php world–the abundance of quick-and-dirty code is overwhelming. This is where a build process helps drive “good” coders to become “great” coders. They are forced into creating the automated testing, they are forced to ensuring their code passes and does not break the build, and they love it.

    - Jeff

  2. Daniel Cousineau:

    While laziness is a strong word, I still think it holds true. Manually testing and deploying requires a lot of work and attention where as automation does not. Laziness :)

    Of course I’m using “Laziness” a bit facetiously.

  3. Mike:

    Larry Wall wrote about the “virtues of programming” in _Programming Perl_ long ago, and that may not have been the first place. Nevertheless, they are: Laziness, Impatience, and Hubris.

    Laziness because it leads to putting in effort to make things easier over time.

    Impatience because the computer shouldn’t seem lazy and slow.

    Hubris because it means producing code out that others might admire and not ridicule.

  4. Keeping PHP Gangsta » Blog Archive » Logging to Firebug is Definitely Gangsta:

    [...] the script. I will admit this is generally not that difficult a task, but as a friend of mine pointed out, programmers–the good ones anyway–are necessarily lazy (not lazy in terms of sitting [...]

Leave a comment