At a client I was confronted with a development environment “in the cloud”
that consists of a virtual workstation that you can work on through a
client from a local setup. This is really nice from a maintenance point of
view if you regularly have to replace installations or roll out new
machines for users. It sucks for development purposes, because the
performance is awful. Testing this and arguing for its improvement I ran
into an argument that is interestingly wrong about poorly performing
workstations.
The argument goes something like this:
Say the time it takes to get a job done is 5 minutes, 4 are spent by you
pounding keys and thinking, 1 is spent by the computer running the sludge
you produce through its CPU. If the computer takes 5 times as long, you
only loose about half your productivity, but you can win most of that back
by doing two things at the same time. Because, obviously, if you can make
sure the computer is running sludge A while you already pound the keys for
B, the computer doesn’t have to wait for you to finish your pounding.
In this blog I aim to counter this particular argument.
Model of the our creative mind
Creating something elegant requires focus, skill and motivation. If any of
these three elements isn’t present creation doesn’t happen. During our
daily work, skill doesn’t change much, motivation is high when we start on
something. Focus is something we have to work for and if we cannot get it
motivation suffers. I don’t want to focus on the effects of skill in this
blog, let’s assume it is a constant. Motivation and focus are the
interesting variables here, so see how they relate to the performance of
the development environment.
During development work, focus is about asking “What if ..” questions and
answering them by your actions. “What if I set this switch to true, would
that cause the light to blink?” –> set the switch to true, rebuild, run,
look, see –> “No it doesn’t, what if I try it on an older version of the
code?”. Some questions are quick to answer, some are slow. If the question
is slow to answer we use the remaining time to come up with other
questions. This increases the number of unanswered questions in our mind.
Once our backlog of questions is too big our focus is gone.
Let’s make a start at using a simple model. Let’s say G is the rate at
which your brain generates “What if”’s when idling and A is the rate at
which your actions can answer them. It is clear that if A is smaller than G
the number of questions runs up.
When A/G is high….
We’re constantly low on questions to answer. If there is one it is
immediately answered or discarded as irrelevant, no need to prioritize. In
fact we can walk away from our desk and keep on generating questions in our
head when we’re back the backlog is quickly processed. This results in
better focus. It gives us more control over what we will do next.
Why multitasking doesn’t work
If our tools increase the cycle time, A goes down. We have less answers to
our questions per minute. At the same time as we have more wait time, G
goes up. This increases the number of unanswered questions in the back of
our mind.
This wouldn’t be so bad if we magically had a prioritized backlog of those
questions and we would only work on the most valuable ones, but
unfortunately, like in real life backlogs don’t magically prioritize
themselves. This takes time and focus. It even gets so bad that if you’re
working on something and the number of unanswered questions grows out of
control it becomes ridiculously hard to focus on answering the question at
hand. In essence it becomes more likely to get side tracked. The result is
an even more skewed A/P. When this happens people say they’re swamped or
overloaded or something along those lines. Productivity is down, that’s for
sure.
The other nasty effect of multitasking is that it delays the reward you can
give yourself for doing something right. You’re constantly coaching
yourself by positive feedback if you do something right and negative
feedback if you do something wrong. There is a negative effect of delaying
feedback on learning. In
particular unlearning bad behavior works very poorly when feedback is
delayed.
I’m intrigued to see that in organizations where slow environments are
common or even the standard, I also see the highest resistance to change.
It’s a leap, but it could very well be that the resistance to change is in
fact partly caused by the slow environments delaying feedback and not the
other way around.