In their book
Peopleware: Productive Projects and
Teams ,
Tom DeMarco and
Tim Lister describe
flow as a highly productive state of concentration. It
takes around 15 minutes of concentration to enter
flow and during this time you're not really doing
work. Each time you're interrupted your
flow is broken and it'll take another 15 minutes to
re-enter it. A metaphor here would be having to shift down the
gears to negotiate the obstacle or interruption, and then having to
gradually change up again until you reach cruising speed and enter
flow .
Clearly what matters is the amount of time spent in
flow and not the amount of time you're present.
Flow-time is
ideal time , which was introduced as a unit of
estimation in
Extreme Programming and was defined as the time
where you can concentrate, working on a task without interruption,
and be fully productive.
When recording effort, instead of logging elapsed time (which
includes everyday overheads such as meetings, phone calls,
responding to emails, task switching, etc), developers should log
the
ideal time spent working on a task. When tracking
ideal time , developers become acutely aware of the
time they spend in
flow , the level of interruption they are subjected to
and its effect on their productivity. Based on their empirical
tracking data, they should expect a certain amount of
ideal time each day and they should protect it.
The ratio of
ideal time to elapsed time is known as the
Environmental factor or
E-factor :
Where ideal time and elapsed time are both measured in the same unit, either days or hours.
When the ideal time is a reasonably high proportion of the elapsed time, the environment can be considered conducive to developing software because it allows developers to get into the flow when they need to. Here's a graph showing our E-factor over the last 8 sprints.
E-factor
Originally uploaded by sjb140470 .
Compared to previous development environments that I've worked in, I consider our E-factor to be blissfully high. The reason for this is simple: We are a contracted development team working at the client's site to deliver a specific project. Given the importance of the project to the client, we've worked effectively with their Product Owner but otherwise they've trusted us and left us alone to get on with it.