What if powerful languages and idioms only work for small teams?
What indeed? What if
programming conventions and closures and meta-programming and
expressive type systems and annotations and all of the other tools that give us the power to build powerful
abstractions actually
don’t scale to larger teams?
Two ranchers, a Canadian and an American, meet at a Cattle Convention. The American boasts “My ranch is so big, I can git’ in my truck and drive for a day in any direction, and I’m still on ma’ propuh-ty.”
The Canadian nods in sympathy. “I used to have a truck just like that.”
So what?
Perhaps we have somehow confused the cart with the horse. Teams exist to deliver working software. So, shouldn’t we choose the tools and processes proven to produce working software and build the team around them, rather than choosing the team and then dumbing the tools down to the level of whomever we hired last Tuesday?
The Seasoned Schemer is devoted to the myriad uses of first class functions. This book is approachable and a delight to read, but the ideas are provocative and when you close the back cover you will be able to compose programs from functions in powerful new ways.
All of our experience in the last sixty years has suggested that productivity drops off a cliff as team size increases. So, if you want more code from a larger team, you have to invest heavily in ways of extracting value out of unproductive people in an unproductive environment.
But what about the other direction? If everything we know about teams suggests that smaller teams have the greatest productivity, isn’t it a valid choice to invest heavily in tools and processes that are specifically tuned to maximizing the productivity of small teams?
“Slick Willie” Sutton is famous for stating the obvious. When asked why he robbed banks, he is alleged to have replied, “Because that’s where the money is.” If we know that smaller teams are more productive, why do we try to scale teams out in personnel rather than up in productivity? If we know that bug per line of code remains amazingly constant, why do we try to scale code out in verbosity rather than up in abstraction?
Some people obtain results they consider acceptable from very large teams, using B&D tools and processes. But there is another option, to go “where the money is,” to find ways to enlarge the productivity sweet spot rather than live without it.
Elsewhere:
I argue the flip side of the coin:
Can expressive languages make code more accessible to the masses?And two great perspectives from other bloggers:
Why Small Software Teams Grow Large And Other Software Development Conundrums and
Create software, not code.