Later On

A blog written for those whose interests more or less match mine.

Examination of procrastination

leave a comment »

One of the best books on software engineering that I’ve read is Principles of Software Engineering Management, by Tom Gilb. (Secondhand copies at the link from $3 up.) His most important principle: “Early!” For example, when you get a six-month assignment, sit down at once and start—do as much as you can that very day.

Of course the same idea has been told to me since… well, all my life, I suspect. But somehow Gilb’s single-word injunction really made a mark. Ever since, I have always started any assignment/project the day I received/conceived it. Generally I start with a free-associative list in an outliner, moving the entries around as I made them so that they are in an order and hierarchy that makes sense. This structure not only creates an implicit plan, it also breaks the task down into smaller chunks, and I keep at it until I get something that I can complete that very day. That breaking of the ice provides enough momentum so that I can usually do something each day, always making at least a small amount of progress.

The result is that normally I complete the task or project well before the deadline. I do not, of course, submit it at that point—for one thing, I would immediately be assigned another task/project and the speed expectations would be higher. I prefer to sleep on the completed effort for a day or two, and then look at it again. I generally find that it does indeed require more work—sometimes just polish, sometimes (as I look at it with a rested and critical eye) a substantial reworking. But I have time for that, and I have a better understanding of the whole thing, having done it once. This second (and third) look is vital.

If you’re a programmer, you may have occasionally had to improve the speed/size of your own or another’s code. As you look at it, you normally can find substantial improvements—the largest improvements generally not from small incremental improvements but by reconceiving the whole task and finding another approach that makes a quantum leap in efficiency.

Reflect that the improvement you found was available all the time, even at the time the original code was written. The original programmer—perhaps you—just stopped short. S/he was prematurely satisfied with the mere completion of the task and did not take the time to sleep on it and re-examine the premises and the implementation with a critical and imaginative eye. Indeed, unless they obeyed the Supreme Directive (“Early!“), they may not have had time to rethink their approach—they may have been in a race to completion by the deadline.

“Early!” Remember that.

Another principle, one that I discovered for myself when I first started programming in Forth: “Hindsight is your most powerful tool. Use it early and often.” By that I mean that after you finish a module or (in Forth) a word, look at with the benefit of the hindsight you have after writing it and sleeping on it. (You need a little distance to exercise hindsight—if you look at it immediately after finishing it, you’re still mired in your initial mindset.) After a day or two, look at it and think about it critically. Is it really as good as it should be? As clear, as tight, as easy to verify? Use your hindsight.

And as you compile those submodules/words into bigger entities, use hindsight again—repeatedly, at a higher level. By second-guessing yourself, by doing your own Monday-morning quarterbacking on your own work, what you produce will be stronger and better overall. Being able to achieve this benefit, of course, depends on “Early!”

And, BTW, I just went through this very post again—after a brief wait to provide a hindsight distance—and made several fixes.

Written by Leisureguy

28 June 2008 at 11:46 am

Posted in Books, Daily life

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: