The Best Things in Life are Free Birdseed

This weekend we had a call with a prospective client eager to pay us to help them build out a new social media feature in their (very cool) software system. We turned them down.

They had an urgent deadline, but that doesn't scare us. They'd also already done some exploratory prototyping before they realized they needed some help, so they had a pretty good idea of what they needed help with.

After listening to them describe their current status, I asked a few questions and then realized they had run into a little snag with a non-obvious feature of the API used to talk to a particular cloud service.

They didn’t really need our help building and delivering the short term solution, they just needed an email briefly describing the shortest path from where they stood, to the goal.

I sent them the email they needed, right after the call.

They're running with the ball, now, and they're gonna make the goal.

We didn’t lose business, we made a friend.

A fascinating thing about this experience is that their deadline was so tight and they were already so close to the goal, that lessons of the classic software project management book 📖 The Mythical Man-Month by Fred Brooks came into play on a really visceral level.

Here's the relevant portion fo the Wikipedia entry (the entire book is well worth reading if you haven't gotten 'round to it, yet):

"Therefore, assigning more programmers to a project running behind schedule will make it even later. This is because the time required for the new programmers to learn about the project and the increased communication overhead will consume an ever-increasing quantity of the calendar time available. When n people have to communicate among themselves, as n increases, their output decreases and when it becomes negative the project is delayed further with every person added."
• Group intercommunication formula: n(n − 1) / 2
• Example: 50 developers give 50 · (50 – 1) / 2 = 1225 channels of communication.

Adding to the team introduces new communications interfaces between people. Even if it’s slight penalty under normal circumstances, there’s a definite cost to adding a new member or two, to a team, measured in communications overhead.

In the case of this project, the relevant portions of the teams seem pretty manageable, at first, the client team was lean and nimble, with three people.

3 (3 -1) / 2 = 3 channels of communication for the original client team

Our team would bring two people onto the task at hand, to meet the urgent deadline.

5(5 -1) / 2  = 10 channels of communication for the augmented team

More than three times the communication channels!

Adding a small number of people to a small team can be a big productivity boost, but given the other constraints of a very tight deadline there's a non-trivial risk of accidentally peddling backwards.

This project also has certain technical constraints and a few possible pathways to a solution that would work, but only one that could work in time to meet the deadline.