Programming Is Not Like Sports
Cliff Berg
Co-Founder and Managing Partner, Agile 2 Academy; Executive level Agile and DevOps advisor and consultant; Lead author of Agile 2: The Next Iteration of Agile
The standup process has always bothered me. Not only does it tend to be first thing in the morning—before I have had a chance to collect my thoughts and remember what I was doing the day before—but it feels like an interrogation: going around the room, all on our feet, being asked in front of everyone what I plan to do today—as if I know yet!
I would prefer a calm session around mid-day, not standing, but still time-boxed. I don’t think well on my feet. Perhaps it reminds me of those times in high school as I stood in the principal's office and was asked sternly, “Why did you do that?!” My natural response is to want to run away. Or perhaps that’s just the introvert in me.
We have all these Agile coaches, who tend to be extroverts, telling programmers how to work—programmers who tend to be introverts to some degree. It’s time that programmers take Agile back from the extrovert coaches and start defining our own practices.
If programming were a physical sport like, say, football (US soccer), then I could easily see the team gathering around, with some discussion of playing strategy followed by chants and then everyone running out to the field to play, all pumped up.
But programming is not like that—not at all. Programming requires calm, and studies have shown that stress—which is what people feel when they are “amped up”—impacts working memory and cognition, and in particular the ability to think deeply. This is intuitive: most of us have experienced the phenomenon that when someone is watching us, we cannot think as clearly as when we are alone.
Football is a team sport, and programmers are on a team, and so one might assume that there is some analogy there. But the analogy is a false one. Programming is not like football, where the ball is passed in quick succession from one player to another, as it heads toward the net or goal, with all action performed from muscle memory. Programmers work alone, and from time to time ask each other questions. Most coding is done in solitary; and most Agile stories are taken by an individual. And occasionally one needs to go deeper than muscle memory.
Pair programming is a process in which two people work on a story, but in most companies it is a rare case that people pair full time on coding. It is far more common that pairing is interspersed with long periods of independent work. Also, the ability to pair well is strongly affected by the personalities involved.
(It should be noted that there are numerous studies on this, and many show different results, indicating that the specifics of what is being measured or considered a “personality trait” are an important factor in the outcome.)
In any case, programming is not like a team sport, where people collaborate continuously. In fact, it has been found that when people are put into an open “team room”, they actually collaborate less, indicating an innate need to work independently. Continuous collaboration also tends to be less creative, and less effective.
But wait, you might say: Don’t groups that brainstorm come up with better ideas? Well, it turns out that brainstorming reveals ideas to more people, which is very important for synthesizing ideas. Brainstorming is valuable, but not as a continuous ongoing process: people need time apart to think on their own. Deep insights tend to happen independently.
Consider the case of Rafael González-Acu?a, who recently solved the “spherical aberration problem” that had gone unsolved for centuries. He recalls, “I remember one morning I was making myself a slice of bread with Nutella, when suddenly, I said out loud: Mothers! It is there!”
Consider also the famous case of Paul Dirac, who was staring into the fireplace at Cambridge, when he hit upon the idea that resulted in the famous Dirac equation for relativistic quantum mechanics.
You might say, But those are physics problems. That’s not programming. But it is not that different: when you are trying to design a complex algorithm, you need the kind of deep thought that isolation makes possible. Deep thinking is where epiphanies come from, and deep thinking is not a team sport.
Most programming is not deep thinking: most programming is a kind of muscle memory that people can do with a very low level of distraction in the background. It is only the occasional algorithm that one must dive deep on, during which any distraction kills the depth and one then starts “spinning one’s wheels”. But even “muscle memory” programming is somewhat affected by distraction such as people talking nearby. That’s why so many programmers wear headphones: to block out distractions.
Programming is not a team sport, so let’s stop the sports analogies!
My "Scrum Master Certification Guide" is now on Amazon! || 250K+ Followers on Twitter || Mojo Maven || PSM || PSD || CSPO
1 年You need to add a sentence on Archimedes shouting Eureka! in there.
Strategist, Technologist, Creator, Entrepreneur
5 年Ok first question Cliff Berg: If programming (or software engineering based on another one of your posts) is should not be likened to a team sport, what about the larger software development process?
Strategist, Technologist, Creator, Entrepreneur
5 年As an extroverted agile coach, I definitely paid attention. A thought-provoking perspective.
Transformational thought leader who successfully helps organizations solve business problems thru lean-agile mindset.
5 年Cliff, we've talked about daily huddles before.? To me the damage done is not the "15 minutes" that is spent in the huddle... it's the 30 minutes before when you are reluctant to get into deep thought because the daily huddle is about to happen, or the 30 minutes after re-orienting yourself to what you just said you're going to be working on.