How much productive work does a developer do?
Measuring develop productivity is a nightmare issue that I do my best to avoid.
Study after study has found that workers organise their work to suit themselves. Why should software developers be any different?
Studies of worker performance invariably find that the rate of work is higher when workers are being watched by researchers/managers; this behavior is known as the Hawthorne effect. These studies invariably involve some form of production line work involving repetitive activities. Time is a performance metric that is easy to measure for repetitive activities, and directly relatable to management interests.
A study by Bernstein found that production line workers slowed down when observed by management. On the production line studied, it was not possible to get the work done in the allotted time using the management prescribed techniques, so workers found more efficient techniques that were used when management were not watching.
I have worked on projects where senior management decreed that development was to be done according to some latest project management technique. Developers quickly found that the decreed technique was preventing work being completed on time, so ignored it while keeping up a facade to keep management happy (who appeared to be well aware of what was going on). Other developers have told me of similar experiences.
Studies of software developer performance often implicitly assume that whatever the workers (i.e., developers) say must be so; there is no thought given to the possibility that the workers are promoting work processes that suits their interests and not managements.
Just like workers in other industries, software developers can be lazy, lack interest in doing a good job, unprofessional, a slacker, etc.
Hard-working, diligent developers can be just as likely as the slackers, to organise work to suit themselves. A good example of this is adding product features that the developer wants to add, rather than features that the customer wants to use, or working on features/performance that exceed the original requirements (known as gold plating in other industries).
Developers will lobby for projects to use the latest language/package/GUI/tools in their work. While issues around customer/employer cost/benefit might be cited as a consideration, evidence, in the form of a cost/benefit analysis, is not usually given.
Like most people, developers want others to have a good opinion of them. As writers, of code, developers can attach a lot of weight to how its quality will be perceived by other developer. One consequence of this is a willingness to regularly spend time polishing good-enough code. An economic cost/benefit of refactoring is rarely a consideration.
The first step of finding out if developers are doing productive work is finding out what they are doing, or even better, planning in some detail what they should be doing.
Developers are not alone in disliking having their activities constrained by detailed plans. Detailed plans imply some form of estimates, and people really hate making estimates.
My view of the rationale for estimating in story points (i.e., monopoly money) is that they relieve the major developer pushback on estimating, while allowing management to continue to create short-term (e.g., two weeks) plans. The assumption made is that the existence of detailed plans reduces worker wiggle-room for engaging in self-interest work.
All this is all too true. But it also seems to be getting worse. Working from home, and the proliferation of tools and libraries (npm, etc.) is allowing developers even more freedom to bring new technologies and code into their systems without mgt knowledge.
Beyond that, I am the last person I know who actually does any substantive analysis or design work that can be recognized as such, before starting to code. The code being produced around me is “ball-of-mud” accretion-style coding. Drives me nuts, and yet we have not ground to a halt because of it. I would like to understand that last part better, but it defies analysis: Why does ball-of-mud coding not stop forward progress sooner than it would seem it should?
@Grant Schultz
In some business areas things are changing so quickly that getting a ball-of-mud out the door today is better than being less muddy a week later. This priority will change as things settle down, or the company learns from a very expensive mistake, or just gets out competed.
Developers, at least US and UK ones, should be pushing for a return to the office. If management learn that developers working from home is effective, they will hire developers in cheaper countries, e.g., Poland.
One positive consequence of more developers using tools like Copilot is that they are pushed towards coding in packages/languages that are widely used, because Copilot does not perform well for the less used software (because this code does not appear often enough in its training data).