In my experience, remote work typically has no direct productivity downsides, but team cohesion absolutely can take a hit. I find being in the same room with someone doesn’t help us work any better, but having been in the same room with them at some point (ideally not all that long ago) absolutely does, likely even more so having had a beer with them.
I'm sure this varies based on the type of work you're doing, but I found the hit to team cohesion led to long term productivity losses. At first we were getting more done than ever. As time went on our raw work output day-to-day did not decrease but a lot of unneeded work that previously would have been headed off at planning and discussion stages would get through.
This was on a team that is specifically doing speculative high risk/reward work so that might be applicable to a lot fewer people than I imagine.
It obviously ought to, right, or else why does (should) anyone care about team cohesion in the first place?
Of course, in the end this all affects the company productivity, but it's really not as straight-forward [0] as the productivity of a single team.
[0] "straight forward" is a bit of an overstatement for measuring team productivity, but that's a different discussion.
For me? Never again.
I like the office and am currently working in the office but I just... get up and leave whenever I want. Come back whenever I want. No need to pretend to work 9-5.
The programmer then informs the manager that this is what it is like to write code all day. But since programming looks like you are just sitting there not doing anything for much of the time, then you have to pretend to be doing something whenever someone walks by so it doesn't look like you are just goofing off (otherwise they feel that they can interrupt you breaking your train of thought). And that makes programming less efficient.
The manager was then enlightened.
But like the real fix is a path to a much better optimum, which is giving employees autonomy, trusting them, rewarding them adequately, getting them to actually care, so that they don't need to be watched over as individual code monkeys.
I am a hard worker because I send 2AM emails (which I may have scheduled in advance to give that impression).
> Why are you pretending to program the full 9-5?
I'm not, because I now work from home. Where people value my actual work output, and not the hours I'm sitting in a chair, where my manager can see me.
At home, I get a "guilty" feeling if I don't work 100% effectively for the whole day. At the office, I never felt pressured to "code" the full eight hours, as I could see nobody was doing so (in Slack it seems everyone else is always green/present.)
At the office, I'd fill the day with conversations, lunch and coffee breaks, and other meaningful interactions with other programmers, managers, designers and various other stakeholders.
At home, when I need to take a mental break I just get bored and start procrastinating with the computer. If I go see my family to the other room we talk family business.
I look forward to returning to the office. Immense amounts of information just never get communicated over Slack & Zoom. I feel like working in a dark tunnel for the past 2 years and going.
If I wanted to sharply focus on a specific task for the whole eight hours I could do unlimited remote already pre-Covid. I used this option rarely, as these days could get quite exhausting.
When WFH I'll often just check out for multiple hours in the middle of the day. Go on a walk, take a nap, whatever... Sometimes I'll just do more hours later that night to make up for it, or sometimes I'm just on top of everything anyway, and the break helps keep my mind fresh.
I never felt like I had the ability to do things like that when in the office
I can only imagine the amount of institutional knowledge that is being lost right now. Workers that are low to the ground and sociable who form informal bonds between departments are hurt by being limited to only online interactions, and as a result, the organization suffers too.
Why?
Writing software, especially in a large organization, is often an inherently social job, just like many others. You often need heads down time to actually get into flow and produce code, but that doesn't mean interaction with others isn't a significant part of it as well.
I don't know much about the nitty gritty of what kernel deving looks like, but it's possible that the work there looks more like longer stretches of heads down time than average. E.g., I can imagine you could be pretty impactful being heads down for weeks or months at a time micro-optimizing the performance of various components. I think this tends not to be true of most software.
One thing I do know about the social dynamics of Linux development is that Linus can be an asshole and flame at people a lot. You could worry that this would be more intense and thus worse in an office, but IME this kind of stuff tends to get better once people can see each other as actual humans and not just text on a screen.
I mean that e.g., software in large organizations often needs to fit in with the rest of the software the organization is writing, and that producing code is only part of the work; there's also working with others to find out what the right code to produce is.