Can be a tough act to balance in reality: "assuming the team feels comfortable with criticism" is where this well-meaning process falls over in most shops.
One of the best design evaluation methods I found was to teach and train others on the products. Occasionally doing onsite project installations was a good feedback loop. I wouldn't let them know I was a principal designer. Would sit back and see how well they grasped the design and constantly take notes on how to improve it.
I want criticism about the designs. Tell me where you think the product is junk and why. There is not one user but many users you are designing for in a single product. Each has an unique take and requirements. Features to sell it, those that write the checks, and those that use it daily must both be met.
> is where this well-meaning process falls over in most shops
I would argue that if you have this problem, it is fundamental, and your team will never be firing on all cylinders until you fix it. Admit it is not easy if the dysfunction is well set in.
I have a job where we all check each other's work as a routine part of the process. Most of our work undergoes five official rounds of double-checking/feedback, and we often do a couple more unofficial rounds of testing just to be sure. Every round of testing always finds at least a couple of issues (often many more) and so we're all very used to getting feedback.
Testing takes time, but we factor it into our schedule.
When new people join the team, they make more mistakes than experienced people, which can be very demoralizing for them. There are a couple of things that I find helpful for this:
1, I warn them during training that they will make a lot of mistakes, but it will get better as they get practice, and I ask them to be patient with themselves. You can only learn one thing at a time, so some of the training won't click right away.
2, I tell them that even those of us who are experienced make mistakes; that's whole reason we have this feedback process. I ask them not to shy away from pointing out issues if they notice anything in anyone else's work, even if that person is much more experienced than them.
3, I make sure they see other people's mistakes before they start making their own; once they are out of the training period, their first tasks are to check other people's work, rather than do their own work. After that, they may be tasked with fixing other people's mistakes (which also helps them understand the sorts of mistakes to watch for in their own work later). Only then do they start their own work.
That sounds fascinatingly different from how most teams I know of operate. If you don't mind talking about it a bit more, what application domain do you work in? Do you know how this work style arose in your team?
Incrementally is the answer to most of your concerns, but the specifics will depend a lot on context. More concretely, this is bread and butter stuff for engineering leadership. I mean that in the broad (including experienced staff) sense, not hierarchically.
so much discussion around software engineering these days is based on infantilization and making sure you get _something_ out of your fundamentally dysfunctional team. its pretty disheartening.
Isn't what agile/scrum literally is? Or "equaliser" languages like Go? Both a trained monkey and a senior engineer will be equally mediocre in using it. Zero room for improvement.
Project success? Thanks to workers, they deserve a reward! Project failed? Due to managers, they should be replaced!
Or vice versa, depending on what side of the fence you are on. Acknowledging incompetence seems to be taboo everywhere, managers don't want to acknowledge that managers are often incompetent, and neither do workers want to acknowledge workers are often incompetent.
I think I disagree. As an IC, I have often experienced the problem of all the developers knowing who the critically weak developer is on the team, but nobody is willing to inform the manager of just how much of a problem the weak link is causing, and the manager doesn’t have the perspective or role to realize just how poor that teammate’s work is, despite generally understanding the hierarchy of ability / experience / output of the team.
And I say that as someone who thinks this forum tends to dunk on management a bit too much. My point is that workers do want to acknowledge that others workers are incompetent, and likewise for managers and their colleagues, but they are structurally and culturally disinclined to do so primarily from an information gap problem.
often it's both, it's not like a poor manager is consistently hiring talented developers.
We have that with one of the teams internally, I don't know what the technical leadership on that team is actually doing but whatever it is, it's not working and hasn't been for a while now.
I'm talking 6+ months of code not working right that I myself could have implemented better in a single day because it's not hard.
I'm talking API 1 calling into API 2, API 2 reports a problem with detailed information (per our standards) and API 1 logs it as "see API 2 logs". Then you go look at the API 2 logs and _it's not there_. I've legitimately had this experience.
multiple of our offshore development teams run _circles_ around this team. The developers are not good so they can't be successful despite the poor leadership and the leadership is not good so they can't fix the problems with the development team.
I'd say that's backwards. Agile is all about having a lighter and more flexible process that allows skilled developers (very little correlation with "senior" IME) to go faster than something more rigid like RUP or Six Sigma. Agree about Go though.
I am not talking about actual Agile (as in the Agile Manifesto), I am talking about the actual "business" bastardisation of it. Otherwise, I 100% agree with you :)
Absolutely. It’s a toxic, nihilist mentality that leaks into tools that greatly influence how we think.
Bad programmers are an organizational failure. You cannot fix that with tools.
You can make it easier for devs to fall into a pit of success, however. But, it’s fine line between facilitating that versus foisting things on users under the guise of being “opinionated.” The reality is it is often taken to be patronizing, such as views of nextauth on storing local usernames and passwords.
I want criticism about the designs. Tell me where you think the product is junk and why. There is not one user but many users you are designing for in a single product. Each has an unique take and requirements. Features to sell it, those that write the checks, and those that use it daily must both be met.