September 1, 2011

War Between Developers and Managers

The structural conflict between building and managing - different tempos, different incentives, and different definitions of progress.

7 min read

Two Modes in Conflict

The friction between software developers and their managers is not a personality conflict. It is a structural collision between two fundamentally different modes of work.

Writing code requires long, uninterrupted blocks of concentration. The research suggests that productive coding requires at minimum a 90-minute window without interruption to achieve the state where complex problems become tractable. Interruptions do not just consume the time of the interruption. They consume the time required to rebuild the mental state that existed before it.

Managing, by contrast, is fundamentally about maintaining relationships, processing information, and coordinating people. It is inherently interruptible work. A manager who disappears for 90-minute blocks to achieve deep focus is failing at their job. Their value is in being available, responsive, and connected.

These two modes are not compatible. They operate at different tempos, require different environments, and produce different outputs. Forcing them into the same schedule causes both to degrade.

The Tempo Mismatch

The temporal signature of deep technical work is long cycles with few synchronization points. A developer working on a difficult problem might spend a week without producing anything visible - building mental models, exploring approaches, eliminating dead ends - and then implement the solution in a day. Progress is invisible until it suddenly becomes visible.

The temporal signature of management is short cycles with frequent synchronization points. Daily check-ins, weekly status reports, continuous coordination across multiple workstreams. Progress is measured in increments of coordination completed, not in invisible mental work.

When a manager applies their temporal model to a developer's work, problems multiply. The developer seems unproductive because there is no visible output at the daily check-in. The manager intervenes to "help" - adding more meetings, asking for more frequent updates, breaking the problem into smaller tasks with separate check-ins. Each intervention reduces the uninterrupted time available for the actual work.

The result is predictable. Productivity declines. The manager attributes this to the developer's attitude or skill. The developer attributes it to the manager's interference. Both are partially right, but neither has correctly diagnosed the cause.

Different Definitions of Progress

Underlying the temporal mismatch is a deeper conceptual conflict. Developers and managers often operate with fundamentally different definitions of what it means to make progress.

For a developer working on a complex system, progress is measured against an internal model of the problem. The code that matters is the code that correctly implements a solution to the actual problem, not the code that was written fastest or the code that is most visible to stakeholders. Progress can mean spending a day deleting code because the simpler approach turned out to be more robust. It can mean a week of preparation that enables a month of implementation.

For a manager working within organizational incentives, progress is measured against external commitments - timelines, milestones, deliverables. Work that is invisible to stakeholders is difficult to defend. Work that takes longer than estimated creates problems, even if the additional time improved the outcome. The incentive is to produce visible, on-time outputs, not to maximize the quality of the underlying solution.

Neither definition is wrong in the abstract. Both reflect real constraints. But the conflict between them generates enormous waste when it is not recognized for what it is.

The Status Game

Complicating the temporal and conceptual conflicts is a social one. Software development communities have developed a sophisticated internal status hierarchy that is largely invisible to outsiders and often misread by managers.

Within this hierarchy, technical depth is valued. Developers who understand systems at the deepest level - who can reason about hardware, algorithms, and architecture simultaneously - occupy positions of respect that have little to do with organizational hierarchy. A senior developer who is three levels below a VP in the org chart may have much higher status within the developer community than the VP has.

This inverted status creates awkward dynamics. Managers who lack technical depth often receive implicit deference from developers on organizational matters while being subtly dismissed on technical ones. Decisions that managers believe they are making are sometimes quietly circumvented by developers who believe the decisions are technically wrong. The war that never quite becomes a war consists largely of these quiet circumventions and the management responses they trigger.

Productive Coexistence

The structural conflict is real, but organizations that have figured out how to work within it do exist. The common thread is that they have created explicit spatial and temporal separation between building and managing, rather than trying to merge them.

This means different schedules for different work modes. Developer blocks protected from interruption. Management synchronization points scheduled at natural transition times rather than arbitrarily. Meeting-free mornings for technical work, afternoons for coordination.

It also means measurement systems that track the right things for each mode. Technical work measured by outcomes rather than activity. Management work measured by the quality of coordination it produces.

Neither side needs to fully understand the other. Mutual respect for different modes of work is often sufficient. The war ends not when developers and managers become the same, but when both sides accept that they are playing different games at different tempos in the same arena.