These people with terrible work quality and work ethics... how do you end up with them to begin with? There can't be THAT many of them. Are you working for a huge company that hires by the hundreds and just don't have time to properly vet/interview individual hires? I don't even mean LeetCode, just casual questioning, code samples, etc.
I believe you, I just have a hard time understanding how somebody so terrible gets onto your teams to begin with. None of the coworkers I've ever worked with have ever been like that, and though all we all start at different skill levels for different things when we start, that tends to equalize itself after a few months of working together.
Why is it a problem that some people do the bare minimum? By and large they still contribute in some small way to the project
I sense that your bar might be quite a bit lower than the bar I would apply, solely based on that comment. If you think doing the bare minimum is OK, your bar very likely is below the bar that I set. While it's hard to actually define and talk about the standards we think are to be met or not, here is one thing I value and that thus goes into the bar.You should put 100% of your effort into your work, when you work. I'm against the overwork culture that exists in a lot of Corporate America. Don't do 150%. Don't work 60 hour weeks. That doesn't impress me. What I expect from an employee is that they work however many hours their contract says they should ("nominal hours" if you will in places where this isn't well defined by contracts) and that they give 100% of what they can do during that time. After that time is done, stop working. Do other things. Be with family. Be with friends. Go on a date and start a family or whatever floats your boat but stay away from work. But if I see you on your phone, looking through Facebook or Reddit or HN every time I enter the room (and you quickly put it away) we're not going to be friends. I love WFH btw. Never want to go back into the office. But you better not "do the bare minimum", i.e. be on HN 80% of your time that you "work".
EDIT: And of course that doesn't mean you can't ever check stuff on your phone or whatever during the workday. But there is a strong correlation between people with sub-par output and those behaviors, especially if they tend to quickly put their phones away as if you "caught them".
I don't think people can give 100% to anything 8 hours a day, 5 days a week. That's just a recipe for burnout. Our productivity ebbs and flows like moods. I mean, we're really not that more evolved than apes, and to expect us to behave like finely tuned robots is kinda unrealistic to begin with.
My quality bar is basically "does it work, is it readable, can it be modified and maintained without too much frustration". It's not going to win any awards but it's also never caused any major complaints that I know of or any major catastrophes. And to deliver that, I give 80 to 90% pretty consistently, between 30 and 50 hours a week depending on circumstances. My peers too. Sometimes my coworkers have kids who are sick, sometimes they have some personal errand to run, sometimes they're moving or having a bad breakup or just needing a mental health day. And sometimes they work late because they have nothing else to do and really want to wrap up that new feature for the next version. My managers follow similar balances too. I don't expect them to behave like machines, because they're not. And it goes both ways.
I never once thought, "I'm going to try to get away with being lazy today because the boss is away". I value my contributions at work, and even if it's just mediocre code, it's stuff I still pour a lot of energy and sometimes emotion into. It's just paced so as to not cause burnout. I also don't think of my employers as temporary steps on some treadmill to riches. I work with them as much as I work for them, because I believe in the company's projects and values.
Shrug. Different cultures, maybe? I don't work for assembly line code mills. They don't think of me commodity labor. With a bit of mutual respect and empathy, it seems to work out pretty well in the end. That's just my anecdotal experience though.
Regardless of the initial reasons, if you are continuously detached from your work you are extremely unlikely to get very good at it.
Our brains are actually wired to filter out information that you don't find interesting and even if somehow get aware of the information -- to quickly forget it.
Our RAS (reticular activation system) is part of brain that wakes your attention to facts that your subconscious is programmed to recognise as interesting. Have you ever noticed that when you get interested in some topic (for example cycling) you immediately start noticing a lot more about the topic in your life (like when somebody rides a particularly interesting bike) even though nothing about the world changed in the meantime (no more interesting bikes today than a month ago)?
Now that I think it might be enough explanation for why devs these days seem to be so weak compared to what I remember from decades ago. Because if the same problem of detachment from work applies to large portion of population then this large portion of population will be doing very poorly at getting better at what they are doing.
In software development the additional problem is that the number of developers has been growing exponentially for quite a long time and so there is only very small proportion of devs who remember world from before "big tech" boom.
"does it work, is it readable, can it be modified and maintained without too much frustration"
I think that's a really good base. I suspect there's more behind this that meets the eye. While we can debate what exactly constitutes "readable and maintainable code" just the fact that you mention these things tells me that we could probably have a really nice philosophical discussion about what exactly that means to each of us, learn from each other, maybe make each other learn something new or see something from a different angle. There's a lot of opinion vs. cold hard fact in what is "readable" for example. The kind of "average person I don't want to work with" wouldn't even know where to begin regarding those things. They copy and pasted stackoverflow posts together to try and pretend they "worked" and got "stuck".You mention between 30 and 50 hours. I don't think this is incompatible w/ what I wrote and how I see things. I just didn't spell them out in more detail (long enough post already but this time I'll try to just write it all out). Let's say your nominal hours are 40. I think it's fine and should be normal to sometimes do 30 hours and sometimes 50 hours. It should just even out. Like you say, sometimes you have an errand to run in the middle of the day but you have kids and can't just do a couple hours longer in the afternoon that day. But you can get up earlier one of the next days and add the two hours of your time that you promised your employer there. Sometimes you'll have hours of nothing but brain farts but other times you'll have a stroke of genius while you're in the shower and you code it up in 10 minutes the next morning. There are your mood and productivity ebbs and flows. I'm not saying you have to deliver that task that nominally takes 8 hours to do in exactly 1 wall clock work day. An 8 hour task is probably going to be spread across 2 actual wall clock work days. Not that anyone could actually make such an accurate task estimate.
And yes, it should be OK to work late sometimes because you just want to finish something off. In fact, I expect this kind of flexibility from my employers. I must be able to start at 6a.m. one day because I couldn't sleep as well as working till 10p.m. another day because the S.O. and kids are gone that evening and I want to do that refactoring I never have time to do otherwise. If my employer forces me into a 9-5 instead (i.e. hours outside of that don't "count") then I will be looking for a different employer. I also expect the employer not to expect me to work 60+ hour weeks. I don't want to have to pretend to work 60+ hours while actually goofing off. So of course those extra hours I did that evening have to even out as well. I'll maybe take the Friday after that off or do a half day or something. The last bit is important I think, because otherwise it leads to peer pressure and the aforementioned overwork culture. I don't want to have lots of people on the team that "have nothing else to do" than to code for the company till 10pm every day. Even if they're all about code and that's the only thing they love doing (been there earlier in my life), do it for a side project, open source work, you name it.
Like I said in the edit, when I say 100% it doesn't mean there's not time to talk at the water cooler or answer a personal message here or there and sitting around discussing soccer results w/ someone after lunch while having a coffee. But it does mean not taking 1 1/2 hour lunches every day of the week and counting them as work time. Or walking around w/ a cup of coffee all day, chatting and distracting everyone else. Someone that feels "caught" and quickly stashes the phone away when you enter the room wasn't just answering the S.O. about who's gonna drive little Joe to soccer practice later. They've been on HN since you left the room 3 hours ago.
I guess you can see how we're not really that far off. Empathy and respect, for sure. But I have to actually be able to respect the other person. Some people I really can't bring myself to respect. I rather wonder how they got where they are and I want to be as far away from them as possible. I want to work with like minded people with similar work ethics. I don't want to work with people that spend 7 hours of their "work" time on HN and then invent reasons for why they got stuck on the task and when you take a look yourself (to help them get unstuck) it takes you all of 5 minutes to do the entire task. OK 5 minutes is a bit exaggerated but I guess you get the point. Unfortunately there have been people that I had to work with (that were at similar "experience levels" with me) that took entire weeks to not finish a task that when I took it over was able to complete within 2 hours while doing it from scratch. I'm really sorry, but I just can't respect someone like that (professionally).