Take someone who points out flaws in a system, things that need to be addressed before they become a problem. The exact same words from two different people can be interpreted differently. For example:
- "X is a top performer who anticipates problems with their deep understanding of the system"; and
- "Y is negative and simply points out problems rather than offering solutions."
The difference? Whether or not that person is liked, which really comes down to them being like me. That's literally all it is.
Take your example of "fun" days. Personally I hate that kind of faux team bonding. I mean if it works for you and your team then great. But don't be fooled. You haven't found the formula for "top performers". You've just found people like you.
"Those who were followers; who lacked discipline, failed faster and more obviously."
Classifying one's reports into "top performers" and people who "lacked discipline" or "followers" betrays a categorical mindset very eager to bucket people rather than see the contradictions and subtleties of people's individual situations and work towards helping to resolve the difficulties, which is what leadership / management should be about.
EDIT to put it another way: good parenting (which I don't always practice, BTW) doesn't say "You're a bad boy", they say "You did a bad thing." Likewise when talking to oneself, it's really shitty to say "I'm a crappy X [engineer/painter/swimmer]".. it's far better to say "I did X poorly last time." A good engineering manager should help frame things this way, and shouldn't be saying "top performers" and "followers" but, instead: "people who performed well" and "people who tended to be behind or 'follow' in the last quarter" and help the latter identify how they can do the former (note: not be, but do).
We were in a global crisis. People were at home with their young kids, spouses, dogs, whatever distractions. Empathy and flexibility were required to make this work. "Failing" at work was probably the least of concerns for many people, given everything that was going on. I personally quit my job rather than deal with the guilt of having spent time getting my son to do his school work rather than triaging bug tickets. Others could not afford to do so.
For one, we ensure everyone commits and delivers and holds others accountable for failures. What you’re describing is not a measurement of performance, I see your point though.
I too very much disdain “team bonding”. But the point is to get to know and respect each other. By doing so you’re more likely to hold yourself accountable.
In terms of performance there’s two parts:
1. How much you commit to
2. How much you deliver on commitments
We expect 100% on #2 or explanations and plans to adjust. On #1 we expect that to change as you increase through the ranks. Junior members don’t need to commit to as much, senior more and staff should commit to a lot and help the junior.
Top performance is learning what you can accomplish and delivering, communicating when you’re having trouble, and then ensuring improvement over time in terms of committing to more.
So if I were looking to join your team and you said this it would be a huge red flag. Why? Because it's not easy or everyone would've done it already. The fact that you think it's easy really would be a cause for concern.
> For one, we ensure everyone commits and delivers ...
First sentence in and you've already added a qualitative factor. For a given task, is it "enough" to meet team expectations? This depends on how difficult it is perceived to be. Maybe there's some huge unknown unknowns. Maybe it's just really tedious and is real time gated for some reason. The standard retort is "we take that into account" but again this conflates subjective perception with objective truth.
Some people talk a very good game about how hard their job is and I've seen some very senior people skate because of this and the fact that for whatever reason they're liked (by management).
You expect 100% delivery on commitments. How is that not going to just reward under-promising? it also leads to things being half-assed. Bugs closed as "could not reproduce" or "working as intended". Features being just good enough to ship without the massive problems surfacing later. Hell, that's just another opportunity for more impact.
Further and to clarify, I said it’s fine if you can’t complete a task due to some unknown. Vocalize it to the team and update accordingly. It won’t be held against you if you if you collaborate to get it resolved. If that happens every time, there may be an issue, but typically people learn to investigate before committing.
Expecting people do what they commit is the only way to drive people to success. As I said, there are two factors, how much you commit to and how much you deliver on commitments. If people want to move up they have to commit to more AND deliver more over a 6-12 month period. Failure to deliver on a regular basis means you should commit to less. In either case, it’s easy to measure objective results.
Comments like these are red flags for me, because pushing back on estimates or communication is not going to go well. Your job is to produce results, if you fail, but ask for assistance that’s one thing. We can plan around that. If you fail and don’t request assistance that’s another. It’s about promoting solid engineering and development, keeping delivery timelines, etc. This worked on the remote places I’ve worked, might not be a great fit for you idk.
In terms of bugs, that’s more of an engineering culture. We always had strict and thorough PR reviews. High test coverage, formatted code with comments and two reviews from at level or more senior engineers.
I don’t think that’s the case at all. One could say a similar thing in that it enables the worst employees who can drag down so-called top performers. But I don’t like any of these framings.
I personally prefer working in the office. I’m more productive, focused, and able to check in with someone or go grab them and show them an issue I’m having. I’m able to attend talks, have discussions, etc., which get me going on certain ideas. I am a person that doesn’t work well in ambiguity. I like to have a plan discussed and agreed upon. I find this is much harder remotely, for reasons both known and unknown.
Very few deep conversations happen over Slack. I miss some of the deep conversations I used to have with fellow coworkers on slower days. You are also very limited to the type of work you can do. Basically any job requiring hardware interaction requires you to be in office, either by natural constraints or policies.
But I am also like the commenter above. It will be really hard to give up remote work. The convenience of not having to commute, dress a certain way, have my own food in my own kitchen, etc. are all massive perks. At some point, I may choose to go back into the office, but I’m going to do the remote thing for a while. Especially now that gas is insane.
I think there's an important distinction here. It may be more productive for you but not necessarily for the team. You grabbing another employee may increase your productivity but subvert theirs. Anecdotally, my personal productivity goes way up when I work remote because I don't have all the "drive-by" questions that erode my focused work time. Whether or not that makes the team more or less productive may be a factor team dynamics and contributions.
So it cuts both ways.
Then there's this somewhat weird obsession with people supposedly being unable to perform their job without 8 hours of uninterrupted solo time. The work day isn't supposed to just be each person working solo trying to accomplish as much as possible. Interacting with the team is being productive. Extremes in either direction are likely not productive.
I think I may disagree about the "somewhat weird obsession" with uninterrupted work. (I'm assuming your '8 hours' was hyperbole). The research seems pretty clear that interruptions are more detrimental to highly focused work. I don't think it's unreasonable to expect certain blocks of uninterrupted time if the type of work requires it, but that shouldn't be conflated to someone expected to simply be left alone all day.
This sort of overgeneralization just tells me we'll have people in 5-10 years "realize" that many of the benefits of remote work were just built on relationships and processes created in the days before. It's like the "open office" floor planning all over again, but with higher stakes.
In the office the culture for accessing these guys was: Ping with slack DM/skype, if they don't answer in 15 minutes walk over to their desk and bend their ear, unless they were clearly working something more important at the moment. Sometimes there would even be short lines of people outside of their cube waiting for attention.
There was an organic interrupt-driven workflow for these experts because they were in so much demand (with occasional pauses in access if they were working on something time-critical). That whole workflow collapsed under WFH, and as these veterans were used to operating on their own/managing their own time roughly half of them failed to be readily available online. This led to issues for people like myself where we needed some piece of their knowledge but just got radio silence for hours, sometimes days. So you pick up some other work to fill in the gap while you wait for a response, but that leads to inefficiencies of its own once they actually do get back to you. Once I had a cascade of about 6 stories going in parallel because I kept picking up alternate work to fill gaps, only to get to a point in THAT work where I needed some tribal knowledge, so I pinged the appropriate SME, waited several hours, picked up another task in the meantime... etc
And leadership lacks any carrots/sticks to make these guys accessible aside from asking nicely. They're largely where they want to be for their careers, value their time, and have all the truly vital knowledge so they can't really be punished lest they leave the program.
Sadly I suspect my company's organization is closer to the average than yours, so lots of other companies fall into this boat. It's not always a matter of discipline :)
I'm sticking around for personal/defensive reasons (it's stable and recession-proof, and I have a one-month old so moving would be extra stressful for the family), but I doubt I'll stick around for more than another year or two. My turn for that revolving door is coming up
What we did was that we made our internal docs and agreed that whenever we were blocked by something, once we learned it, we would document it. It was a mixed success though because we never had time to work on the docs properly, and the veterans didn't touch it, so I'm curious if there is a better approach.
Doesn't help that some of the engine code dates back to the late 80s, was originally written on a mainframe for a compiler where variable names had character limits, so even if you know the surrounding conceptual terminology it's functionally indecipherable unless you have a lot of experience with it. It's hard to tell what it's doing or why, or even if it's relevant to the problem you're trying to debug.
What we really need is something like a dedicated sprint where we stop the presses outside of critical maintenance and just write documentation, free up the veterans to write down their knowledge. But that would require the company to actually invest in what is otherwise seen (wrongfully IMO) as a cost-center. :P
And honestly if we had that kind of money there's other software redundancies/inefficiencies that need to be resolved first, that would lower the documentation requirements in the first place.
If you've discipline and commitment you can make anything work. :)
My 5 year old struggled and needed a whole bunch of support.
my 8 year old was able to work on her own, but still didn't get anywhere near as good learning outcome as being in class.
Now, the reason why my kids didn't fail utterly, was because my wife wasn't working and could, just about support their learning. Until it sapped her will to live.
This is roughly analogous to junior employees. They need special attention, and providing that over remote is a challenge to scale. Not impossible, but a challenge.
You also need to factor in that Junior employees are more likely to have shit accommodation.
EDIT: I definitely should have mentioned that my children are learning from a laptop WITH very close guidance from my wife who is raising them full-time and with intense dedication!
lol Pretty big caveat
In other words, they are not at all just learning from a laptop.
My experience is that unsupervised education is worthless.
I studied CS pre pandemic at a regular university. The whole curriculum was designed around lectures and in-person classes. But I skipped most of them due to social anxiety and laziness. Because every class had a digital script and I could practice with old exams, I did fairly well. Even better than most of those guys that visited every lecture. I guess that part of the problem is that some students tend to think, that just visiting the lecture is enough. They forget to practice the stuff on their own. Which you do automatically if you work through the script all by yourself.
After university I dropped right into my first job. Because of the pandemic it was 100% remote. Again, this worked perfectly. I could not have been any better. I even was able to take additional responsibility due to my performance "which exceeds expectations".
So calling this nonsense is nonesense ;-)
I suspect it works for readers, not audio consumers.
I hold myself to high standards and have been described as a top performer by every manager I've ever had.
I am disciplined and work extra hours as needed to ship. I am constantly thinking about the product and the engineering challenges we face outside of working hours. But sometimes things take longer than expected, sometimes complexity estimates are off, every so often I have a bad week due to personal reasons. Having to conduct a team-wide postmortem every time a ticket rolls over into the next sprint sounds exhausting and I'd start looking for a new job stat. At a minimum it's a huge amount of communication overhead when you should trust me to get my job done, especially considering my track record.
Couldn’t be further from the truth. I ran an applied research team for years. We had hundreds of patents, multiple publications, a growing open source project, multiple presentations a year, delivered a couple of the highest priority projects, and were consultants company wide for deep learning.
I was always fine with delays, but you had to discuss them and collaborate. Come to the team, explain, then we could prioritize accordingly (5 min). It’s not a big deal, but always required high communication. That’s difficult in a remote environment, but that’s why you have regular meetings & have to be more strict than normal about planning.
Perhaps it wouldn’t be an environment for you, that’s fair. But a project isn’t about you, it’s about a deliverable; often a team effort. If 10 min of communication a day is too much, idk then.
We have exactly the same strategy and it works very well.
> Those who were followers; who lacked discipline, failed faster and more obviously. Most software engineers produce more effort than they’re worth and skate by with meetings, “pair programming”, etc
This is so common and I am glad that remote work has been an effective extra filter. I mean, I don't mind mentoring junior devs, but also I am not a teacher and many of them seemed lacking total basics. Like they memorised algorithms but had no idea why they work or common issue was them just pasting code from Stackoverflow and then asking for help when it didn't work.
That sounds horrible. Software estimation is not a science and some say is impossible. To hold people to their estimates or else they've "failed" is toxic.
Just a personal opinion, but I hate daily standups. It's agile theatre. Nobody listens to what others are saying; they're too busy trying to make up good sounding stuff to say when it's their turn. I'm being a bit hyperbolic, but the general principle applies.
But sounds like it's working for your company so more power to you.
What.
I've not done it as an established thing, but had standups where we pivoted to working on issues and as the issue got sorted everyone just chatted and enjoyed each other's company whilst moving onto other work. 3 hours later it's lunch and you end a mega video chat.
Tools like Remotion or the virtual office apps with spatial sound and movable avatars also aim to lower the friction and make informal chats easier.
Now if deadlines are important, maybe it's just relative performance that you're speaking to. So if everyone misses deadlines you can still be high-performing, but it's like saying you're the skinniest kid at fat camp. It's normalization of deviance, and not a trait of high performing teams.
There's also a big difference between being a month late and a year late. It's also a lot easier to explain you're going to miss a deadline 3 months in advance than a week before.
You don't get high performing teams by forcing crunch time because the deadline is the deadline. This is also why I'm grateful not to work in video games; you can't reschedule Christmas.
Ironically, the civil engineering projects are one of the best examples of missed budgets and schedules. Almost every civil project at large scale becomes rife with change orders because coordinating different domains is complex, even if those domains have "precise" blueprints. Those blueprints always change, which is why the industry has "design" documents and "as-built" documents.
So what do you think it is? Why do they have an inability to coordinate large complex pieces of a project? Optimism bias? Can we really call someone a high-performer when they display those shortcomings? Or do we just normalize them so they aren't considered a problem?
If you’re engineers are constantly hitting deadlines, probably it’s greenfield development or the problem space is simple
We can write complex code with minimal errors[1].
"the last three versions of the program — each 420,000 lines long-had just one error each. The last 11 versions of this software had a total of 17 errors. Commercial programs of equivalent complexity would have 5,000 errors."
But I worry when we facilely normalize sub-optimal behavior because we've normalized it. Especially as FAANG and adjacent companies work on safety-critical software and when that attitude pervades other domains.
[1] https://www.fastcompany.com/28121/they-write-right-stuff
...but it's also true that all-superstar teams rarely win vs teams composed on superstars and supporting staff [1], and thus you can't afford to hose the supporting staff.
[1] sorry I don't have a better reference - https://www.google.com/search?q=all-superstar+teams+vs+super...
But I’ve also had some nightmare scenarios with people who just massively slack and do nothing. I worked with someone who wanted to “navigate” in 10/10 sessions and never said anything. They just watched me do stuff, didn’t respond to questions, didn’t work on docs, didn’t look stuff up. It was weird.
Mismatches like this made me eventually stop doing it as the team ended up separating out to pairs of superstars and pairs who did nothing. And it demoralized people.
I've come across people that are very good at getting "help" on their work to the point that they do very little work.
I would bet the CS graduate is having a much easier time self-learning at home than the no-degree person who usually stops peoples work 12-15 times a day to get them to explain concepts or show them around the code, again...
It's the new grads from courses that are theory heavy and practice light that expect a lecturer or tutor to guide them through the whole process in my experience.
Self taught people (Bootcamps are included here) are self taught to perform in the very specific tool-heavy world. Think Create React App + AWS. It's harder for them to independently understand bigger decisions/system design/building something from the ground up
CS grads know how to study, know when they are really stuck, and know what the good questions to ask when stuck are. They were thrown into this impossible course work and survived, they're better at studying complex systems, and to clearly define what exactly they do and dont understand
Bootcamp grads? they just need you to share a code snippet of exactly what you asked them to do in a different place in the codebase
You could explain 10 times why you chose to build the new microservices in Clojure and they still won't get it
People mistake self taught with understands complex software problems. Usually from what i've worked with, self taught is self taught to copy paste some commands into npm
Some people are good at programming, and do a CS degree to expand their capabilities. Some people do a CS degree solely for the career options (which to be clear is not necessarily bad). Some people didn't do CS degrees for whatever reason, but have thousands of hours in codebases, and know when to look up an algorithm or data structure.
I am a self taught and am pretty good at looking stuff up and figuring it out on my own, especially stuff that isn’t even in a manual. I figured this was pretty common since self taught is sort of forced to develop this skill.
What I mean by that — as a manager and one of the senior engineers, I had insight across our organization to projects and employee performance.
Those who thrived being remote were those who already were the top performers. Those who were followers; who lacked discipline, failed faster and more obviously. Most software engineers produce more effort than they’re worth and skate by with meetings, “pair programming”, etc
When the lockdowns started, my team at the time were some of the top performers. I had already had a remote team and we knew how to screen for it and manage it.
Some things we employed - weekly syncs across team members, an always open video chat, daily stand ups amongst projects, fun days where we’d play games online, etc. The most effective thing we implemented was holding people accountable to their deliverables. People commit to their work and tell us when it’ll be done, if they fail we talk about it as a team. Team members quickly learn they must deliver and if they need help ask. We don’t delay timelines and I expected a clear “I think this will take days” if they need to delay, that’s fine, but they explain publicly and ask for help.
That quickly led to discipline and we’d pair senior engineers with junior engineers to improve.