Hacker News new | ask | show | jobs
by tmorton 2487 days ago
Software development is more like basketball than baseball.

In basketball, players do "take off" certain plays. But the most valuable players are still contributing during that time. A good shooter can just stand at the 3-point line. Even if they don't do anything, they occupy a defender and make the whole offense better.

A developer won't be cranking out code 8 hours a day. But if they are available to answer questions, perform code reviews, and generally help the team, that's a valuable contribution.

1 comments

Yeah, honestly, I think soccer/basketball are better analogies. The team remains in formation. Doing too much is far worse than doing too little, because it pushes everything else out of sync.

A big part of the work is sometimes just fixing/improving workflow. There are tests to write, documentation, refactoring, warnings to look at, plugins to update, that wonky button padding to fix, all these little things that are not vital but stack negative impact.

There is a much bigger point here, though, about idle time.

Idle time is not just about healing the psyche. It also does that. But you run into problems from not having idle time much sooner than burnout, typically.

What is at stake is that the greedy algorithm for optimization does NOT work for complex systems. “I will make every individual person efficient, everyone is always working on something, look how good of a boss I am”—and you WILL fail to meet deadlines. And you will blame that failure on other people, or on the business constraints, because “well I did everything that I could to make the system efficient, the expectations that were put on me were unrealistic!”

The greedy algorithm is really obvious. Why would every part of the system doing less allow the system as a whole to do more? But it is also really wrong for any system that is large and complex enough to have the right sort of nonlinearities. If you’re managing a call center and everything is very linear—everyone has the same task day-in, day-out, the output of the team is directly changed by the output of every individual on that team—great, you can use the greedy algorithm. But if different people are working on different interrelated tasks then forget about it.

Because if you manage an interdependent system without creating idle time, soon you have every task falling into the proverbial “three priorities: Hot, Red Hot, and DO IT NOW.” You have that because you have chosen to create a system where there are large latencies in response to incoming tasks, so that those tasks are piling up.

I discoursed more on the abstract theory behind this in an answer on the Project Management Stack Exchange:

https://pm.stackexchange.com/questions/26651/why-do-all-the-...

(also if you want a longer overview a bunch of related concepts are talked about in Dominica DeGrandis’s book Making Work Visible, and the advice on managing by the critical path method comes from a makes-my-eyes-roll-a-little-but-still-pretty-solid business novel by Eli Goldratt called Critical Chain, which applies the reasoning from another less-eye-rolls business novel by the same author to the “project context” that we find ourselves in when writing software.)
This is great. Thanks