Sandglass Programming

Rhythm is very important to make anything alive. If you want to make an activity alive, seek the rhythm in it. SandglassProgramming will help you.

I find myself really productive and "in flow" when in a constant and vivid rhythm. Nowadays I don't even notice the flow of time but everything gets done in almost the same time period. I do a lot of things, but it's not tiresome. I'm always surprised at how much and how nice I did the work after the "flow" in rhythm. I rarely use SandglassProgramming these days and my GreenBarCycle is roughly 1-3 minutes, and when things go bad it goes down to 30 seconds or so. I can control the pace. SandglassProgramming and DoItAgainToLearn helped me to internalize this rhythm.

Also good when in PairMismatch to ChangeDriverRoleFrequentlyAndRegularly

--JuneKim
I put a sandglass (next to a thesaurus) nearby the monitor when programming by myself. I use it to keep the rhythm of small test/code cycle. Well, it's more of a training, learning and discipline value than of practicality. (The ultimate goal of using sandglasses while programming is to internalize, transcend, and not use them. It's like the WittgensteinsLadder.)

TestFirstDesign and TestFirstProgramming are really wonderful, but not easy to achieve the level of the natural (or elegance). I've been doing them for a while but more often than not I find myself going astray from what I should work on, with the test/code cycle getting longer.

As someone whose mother tongue is not English I am sometimes in the natural flow moment when watching an English channel -- I don't recognize the language is not my first one, and it just gets into my comprehension without additional efforts to translate it myself. I occasionally experience that amazing time when programming as well. Everything goes so natural, follows the flow, and keeps the rhythm.

In order to attain the natural I need to go through the unnatural. My body refuses to do the practice at first, but after painstakingly doing the unnatural, the natural flow comes if I can make the practice a part of my body.

So I sometimes train myself with a sandglass. Mine is a three-minute sandglass. When I go into a test phase, I turn over and start the sandglass. If I haven't finished the test when it's close to the time, I try hard to stop there, but with a sort of small closure. And then I turn over the sandglass for the code phase. No more than three minutes coding. And a test phase with no more than three minutes... It seems like I learn much more by getting fast and frequent feedbacks, just as many psychologists have pointed out.

-- JuneKim

Do you have a separate phase for refactoring? That should be a distinct phase, right?

Yes and no. I don't really distinguish bewteen coding and refactoring phase while doing this. What's more important is, whatever I do I try to do in the time slice. I sometimes call the time slice Green Bar Cycle. It's the span of time that took between the appearances of two green bars. If I have to do a big refactoring, I divide that refactoring into small ones and see green bar in, for example, 3 mins. -- JuneKim


What do you do when you finish the test with a minute of sand left? Only code for two minutes? Or do you have two sandglasses?

I found that having short cycles wasn't a problem whereas having long cycles was a big problem. If I could finish a phase even before the one-sandglass time, I just go into the next phase and turn over the sandglass with pleasure. So I could say, using a sandglass is for not exceeding the maximal time limit of one phase. -- JuneKim


I put a 60-minute kitchen timer (you know, "tick tick tick tick DING!") next to my monitor, and when I start a new task, crank it to 20 minutes. I find that about half the time, the DING! interrupts me from an unproductive rut, and at any point, it reminds me to get up and stretch and then decide "what do I really want to be working on now?"

Others on my team have started using timers for pairing. When you sit down, set it for 15 minutes, and then when it goes off, if the same person's still driving, then switch (and restart the timer).

-- AlexChaffee


In PeopleWare, by TomDeMarco, we are told that people are productive only in alpha mode, and to enter in alpha mode takes from 5 to 15 minutes. However, just a ding takes you out from alpha mode. In this way, he suggests that we plan cycles of uninterruptable work much longer than 15 minutes, but remember that you must rest about 15 minutes after each hour and you have a upper limit there.

So, plan your cycles from 50 minutes to an hour. I can't remember PeopleWare's original recommendation and I can't keep a copy of that book long enough with me either. -- GeraldoXexeo


Most time I use real sandglasses but on some occasions I need different time-sized sandglasses. As a substitute for real physical sandglasses, I have been using these softwares recently and highly recommend them whether you do SandglassProgramming or not: -- JuneKim

That's very nice software! But, i think it's convinient if i have a wrist-watch which have those fuctions like multi-countdown alarmings. Is there any body knowing the models with those functions, in addition, vibrating alarming? -- mailto:ahj6@hotmail.com

In addition to that, i think timer.exe occupies too much system process time even when it doesn't count any. On the other hand, utils like Windows-powerpro doesn't use little CPU time even when it manages tens of alarms for me. -- mailto:ahj6@hotmail.com

For Linux User: If you have a PalmOS PDA, you may want to try the BigClock? or DiddleBug? programs for this purpose. --KrisJohnson


Nifty idea. But how about integrating the sandglass into the unit test tool? (e.g. JUnit) When it shows a red bar, the three minutes starts ticking. -- DavidPlumpton


This is a good idea which can keep one from spending to much time on fringe issues, but also allowing their consideration and investigation subject to a self-imposed time-frame. When the time-frame is exceeded, signalMe with an overtime indicator (aural or visual or both). Implementation details should be simple-minded. (click something, start the thing, finish it, or receive overtime signal) [could use this for a signal that the pizza in the other room is done, or other such detail - {like try the busy signaled event again}.

Where and how? put the timer in the menu bar at the bottom of the screen, using an hourglass icon. click it select time, carry on. while timing indicate timing by sand falling, or a spinning wheel or a completion percent bar.

EditText of this page (last edited January 5, 2013) or FindPage with title or text search