A team's /capacity/ is how much they're capable of doing together.
Pretending they're equivalent is (foolishly) pretending that programming is mostly typing.
Capacity is the right idea, though.
What can you do to increase the ability to do work other than bumping up the number of developers.
But likely you can improve skills and focus and tooling and raise capacity, remove waits and queues and returns.
Your capacity isn't headcount.
BTW: if you're doing Angular but nobody really understands Angular, then maybe adding an Angular expert to the team will increase capacity. It's SKILL and FOCUS after all.
If you have individual assignments it won't help much, though.
The /capacity/ of a three-person team may be considerably higher or lower than the capacity of a five-person team. A set of 12-person teams may each have a very different /capacity/ depending on skills, experience, and problem domain.
Counting noses is unreliable.
• • •
Missing some Tweet in this thread? You can try to
force a refresh
"Ability To Do Work" is so ignored by many contemporaries. It's easier to assume that one person is pretty much the same as another, on average, and that work is done by individuals.
This way the math works out for linear gains from adding headcount.
"Capacity" has become a euphemism for headcount.
The "on average, a programmer is a programmer, a QA is just another QA" is not only wrong about individuals, it's dreadfully wrong about teams.
For people to be great soloists with equal capacity in solo work, each person has to have the same set of skills, habits, approaches, talents, knowledge as every other person. We know that isn't so. It will never be so.
@eikonne I also find the pair-programming he’s referring to to be suboptimal.
For me to type all day while you criticize, or for me to criticize all day while you type (worker/watcher or worker/critique) is indeed a very dull and wasteful thing.
Pair Programming, on the other hand…
@eikonne … actual pair programming by co-creating code, switching roles frequently, switching partners a few times a day, is not only an excellent pedagogical tool but a great way to do work.
It also means you don’t break tasks down to individual skills, but work more whole features.
@eikonne I think that this is a classic (AKA "normal") case of confusing the antipatterns for the thing.
"Doing dishes sucks: all that food floating in dishwater"
"Dude, that's wrong. You're supposed to scrape and rinse them first."
"Oh, you purists and your No True Scotsman fallacy!"
If you were born into tech in a modern corporation, you might think that “agile” is an estimation technique based on repetition and practice, or perhaps a workforce performance management system based on constant checkpoints.
Would they know it was about making software better?
Would they recognize the goals of healing the mgmt/dev divide, working within capacity, delivering early & often?
Would they recognize autonomous, cross-functional, self-managing teams as a bedrock concept?
If I were to transplant the original Agile Manifesto signers from 2001 into your shop on Monday, would they recognize anything of their work or intentions?
The most difficult of all simple ideas to internalize is probably this: To be done sooner, do less.
This is true in the large and in the small.
Small: If I use the "rename" refactor, it changes all the references as I type the new name. If I don't, I have to carefully walk the code base, changing the name (spelling it correctly) every place.
Large: if we make a single-feature release, we can have it out in a few days. If we slice the feature e2e, it can be several releases a day for a few days.
We assume that “Engineering == Production Engineering” and so we, as an industry, made the billion dollar mistake of attempting to improve the efficiency of software development by applying production-line techniques.
I need to apologize to everyone. I used a tool to post this and it makes it look like this is my own work. That's not the case, and I never meant it to be intellectually dishonest.
I thought it would be posted with the article link.
So: this isn't my words, but I admire them.
I will post the article link when I find it again.
Apologies to whomever's work I quoted accidentally without citation.
If that's you, please remind me of the link.
I feel awful about this.
In a crisis, people pull together and work together.
They share information, volunteer their skills and expertise, shoulder the burden for each other because of the shared stress.
When it's over, they go back to the pre-stress style: solo, disconnected, competitive even.
In the various early agile teams, there seemed to be this idea of working they way we work when we're in a stressful crisis, but without any of the stress, threat, or crisis.
We work productively and voluntarily when things go wrong, couldn't we work similarly without panic?
What keeps people from happily and joyfully working together in community when nothing bad is happening, when they're not under stress, not burdened with dire consequences, just because they like to?