Hacker News new | ask | show | jobs
by dvas 977 days ago
Socialize the design: "Find people who you think will be contrarian, and have them poke holes in the design"

Happy to see this mentioned! By involving everyone, the experienced engineers will usually ask the harder questions and test the assumption of your design and the juniors to learn and re-evaluate assumptions they have about building software. Almost a win-win for everyone.

Even though in these discussions there may be a social aspect where certain individuals are trying that much harder to find disadvantages of a proposed design (many reasons which readers are probably familiar with). However, I think this becomes a net positive to the overall engineering as everyone tries to bring their A-game to these discussions.

Anyhow, my experience has been that collectively reasoning about a design (assuming the team feels comfortable with criticism) will always get results quicker.

7 comments

Important additional requirment: do not have a manegerial class that will throw all reasoning of those on the ground out of the window and demand it to be done a certain way.

I had a boss like that once. He could literally turn everything into shit. You had a good plan for an event room, he strikes everything useful out for "minimalism" and aesthetics reasons. Then they ended up with a room that was both expensive and unusable. No wall sockets pure concrete ceiling ("to show the carrying structure"), a reverb time worse than in a church.

For him it was always looks above literally everything else, no matter if it was about architecture, furniture, tools or graphic design. And he had the habbit of impulsively demand changes after months of planning, as soon as things started to take shape. Horrible.

The Jony Ive school of management?
>"Find people who you think will be contrarian, and have them poke holes in the design"

Socializing the design is good advice.

Seeking out contrarians is not.

It costs you much more to defend particular engineering tradeoffs than it does to raise questions about them. So unless you have a good relationship with your "contrarian" and they will operate in good faith, you'll quickly end up exhausted and dispirited after the anklebiters attack.

Architecture astronauts and other armchair engineers will suck up all your energy with half-baked ideas they aren't even invested in, if you let them.

Contrarian probably isn't the right term, but there is real value in having someone come at the problem with a different set of blinders than you have - particularly if they understand their role is not to redo the design but to stress test the existing one. I suspect this is what you mean by "good faith" and "good relationship".
I think the poster you replied to understand this. What they're saying is that asking for input often invites malicious behaviour. It's really painful to experience. I think this person knows what they are talking about.

There are people who somehow manage to ruin even the simplest code reviews with their precious input that ultimately goes nowhere. Such people will absolutely destroy your spirit when you invite them to consider your something substantial. Those guys so everything in their power to get themselves into such position.

I think it's the right term, a contrarian is someone that not only will disagree, they're not afraid to do it publicly.
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.

Great, but then how do you fix it, how long will that take, and how do you get any work done until then?
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?
I hope its spacecraft design. 5 reviews!
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.
I've observed it used as a great way to shut down projects that don't immediately have demonstrable results
If your shop is full of grown children, like this, then, face it, you're doomed regardless.
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.
Individual programmer skill is seen as taboo to discuss despite it having a huge impact on project outcomes.
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'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 keep waiting for the O’Reilly book “Agile: Managing Mediocrity”.
Seems like that would invite armchair engineering like you seen in HN comments. “Couldn’t you just do the easy and obvious thing?” The answer is probably a long no and the creator had your thought already before realizing the true scope of the work.
It's definitely double-edged. The main thing I've learned regarding this is to clearly document this answer somewhere, very early on.

I recently learned this because I was asked this precise question and basically had to drudge up all my two-quarters-ago research that was the answer to this question. My answer to their question was "yes we could do the easy thing, but..." and everything trailing the "but" is a very long string of small points that add up to something that tipped the scale (at least in my and several other folks opinions). But without that laid clearly out they thought I was just over-engineering for the sake of job security or something like that.

Make sure people know why Chesterton's fence was put up.

Letting people know why is two fold. Not only does it keep them from relearning the 1000 edge cases you discovered in the school of hard knocks, sometimes technology changes and something that was a hard limit no longer is.

That's great stuff to include in your design doc, at least on an appendix
I find this pretty easy to deal with. You just don't engage with that question. Make it clear to the people you are discussion it with what kind of things you want input on (architecture, design, product market fit), and make it very clear when you consider their input out of that scope. People will very quickly learn what sort of comments you care about.

This form on "collective design" usually uses a confrontational form of rhetoric, but the exercise is very much collaborative.

Is that so bad?

Ideally, if as others have suggested, you've already worked through that question and documented it, you can just refer to that documentation amd move along.

If you haven't documented it, it's a good reminder others may have the same question and answering it will either lead the to the same conclusion or other questions you did not think of.

Without proper management, you're correct. It would. I would retort, never start a sentence with a negative. Find something you do agree upon, make comments about the stuff that you do like, before going into the details of what you don't. This way it's clear where those boundaries are and in what context the disagreed design would need changing, if any. This also prevents brilliant jerks from completely destroying the confidence of others to even present designs to the group. Yes, it's a little showy, using more words than are necessary, but it keeps the human aspect of agreement and cooperation in-tact.
> I would retort, never start a sentence with a negative.

"Could you do the easy and obvious thing?" means the same thing, I don't see how it makes a difference.

I believe parent was more into “could you do xyz?” Where xyz is easy and obvious thing, but no one would explicitly phrase it exactly like “could you do easy and obvious thing?”.

This way proposing xyz as a solution is positive not a negative.

Easy and obvious are subjective.
Unfortunately a lot of contrarian people think "it wasn't my idea" is a hole in a design even if they would never say it.
Not a problem if they don't say it since then it's not derailing the conversation. It could even be a benefit if it motivates them to look for actual holes.
you just have to refuse to accept input like 'I don't buy it', 'I tried something like that before and it was a failure', 'thats a code smell', 'I saw a blog post about how that is an anti pattern', and other unsubstantiated disses on an approach. if its so bad, you should really be able to put some real words behind that.
You have to exclude them from the discussion if you know they will go there.
I told a team for months to be wary of shoving everything into a single nuget package and using it for everything across 9+ API's.

fast forward 6 months and suddenly they have a lot of problems due to that shared library being a larger risk than they ever anticipated.

sometimes "I've seen this before" is a legitimate concern.

totally. not saying you shouldn't use your experience. but you should use that to really paint a picture of how it can go sidewise instead of just claiming authority. the former really moves everyones understanding forward.
You're not wrong, but the problem is that people sometimes just flat can't see it and think they know better than you.

The example I gave above, I definitely did spent months explaining to them how the risk to a library like that grows unexpectedly over time. How it's a small risk at first but if you don't consider the use of that library over the next few years you don't see where the risk profile ends up.

What's interesting is that I had a similar conversation with a VP recently. What I told him is that sometimes people really just flat out can't see it and in that case you have to "rule by fiat" as it were and issue an edict. If you wait for compromise with someone who just can't see it you'll get nothing done, especially if nothing can ever be agreed upon.

and I say this as someone who is very particular about the battles I'll fight, I'm a fan of compromise but only if everyone in that conversation truly understands all sides of the issue or I think it ultimately doesn't matter (yak shaving).

The issue I see here is that being a contrarian is not enough. In order to drive change, one must also have influence. It doesn't matter how good a design is if others are not quick to agree with it.
it's a win-win-win. Win for the seniors to ask the harder questions and make sure there's alignment. Win for the juniors who learn and re-evaluate assumptions and bias. Win for the business because they get the best design (at the time, with the resources on hand) for the ask.

It's important to make sure that folks who are doing the work, agree upon the work. Building a bridge only works if the engineers are building a bridge, not a suspended walkway of dubious quality because they didn't like the design so some wood and rope is what you got.