> A critical piece of avoiding endless debate is to know who makes the final decision and how it gets made. Consensus-seeking leads to endless debate.
Every rapidly growing company I’ve worked for has reached a point where we have product managers and program managers and engineers and engineering managers and stakeholders and suddenly nobody can even identify who is the decision maker.
Weak leadership then pushes a “we all have to work together to come up with a solution” angle that clarifies nothing and turns everything into a consensus-building operation. Progress slows to a crawl.
The second most common failure mode I’ve seen is, I hate to say it, similar to what this author is proposing as a solution: Product Managers who view themselves as facilitators of a process where they get others to come up with the answers about what to build. The product managers call meetings where they shuffle context and requirements and suggestions from stakeholders to engineers and customers and back and forth under the idea that their job is to lead others to the conclusion. I’ve worked with some product managers who produced prodigious amounts of meetings and slide decks and Figma charts and process documents and Notion pages and after meeting summary e-mails but can never actually conclude what we should build. They’re so enamored with process and documents and afraid of being prescriptive, so you only get questions and prompts and meetings and frameworks to follow to supposedly arrive at a conclusion about what to build.
IMO, the fundamental role of a PM is to make the decisions nobody else wants to (and own the consequences of them). If my team is making progress and decisions are being made, I get the fuck out of the way.
I jokingly refer to myself as the "designated scapegoat", basically meaning it's my job to tank the risk for situations where everyone is nominally in agreement about something, but nobody wants to be the person to put their hand up and own the decision because of the risk if it backfires.
“If things go well, dev team gets the credit. If things go poorly, PM takes the blame”.
This is fundamental to building trust with the dev team and gaining the respect of leadership.
This made it possible to guide the product in directions the dev team wasn’t immediately comfortable with, because they knew it was my ass on the line. And when those decisions led to good outcomes, it further reinforced the trust relationship.
I haven’t countered many PMs who live by this, but it sure makes a big difference.
We’ve hit industry maturity with ever slimming margins but with management still operating like costs don’t mean anything. If management was doing their jobs they would discover the cost of meetings and ultimately the cost of indecision!
PMs shouldn't have to fix organization dysfunction while operating in Hero Mode.
So many PMs are either over bearing or scared to make decisions; or, the worst, that do both, over bearing and micromanaging all the time and then blames the team when their decisions back fire.
A good film set runs like a well oiled machine with an extremely clear division of responsibilities. Decisions can be made fast, because time is of the essence (the sun only shines so long). This is cool, because if I do the camera I usually don't need to worry about anything else. But usually I also don't have to do anything else: For the duration of the shooting, the film becomes all I need to worry about. I get food, I get a place to stay and most importantly: I chose to be there.
Meanwhile in corpoworld there are X meetings with people who don't even know why they were invited, don't wanna be part of it, are not given the time/resources/mental headspace to be there and then corperate wonders why the project doesn't goes as swimmingly as it could. If your people already do two jobs and the project becomes a third, guess what: they are going to avoid doing too much and maybe if you are lucky some poor sap carries that thing over the finishing line alone. But if that is the outcome, wouldn't it have been better to free that person from their daily duties and put them in charge of the project and whom to talk to? The resoueces of the company would have been better spent, the result would have been better, the thing would get done quicker etc.
If you want to take two things away from this post:
- put someone in charge of the project, make sure they want to do it
- Daily cruft is the enemy of projects. Free people from the rest of their duties, even if it is just a day of the week, e.g. "on Fridays Frida works on project X".
I'm lucky enough to work in such a team, and it's been fantastic.
If the manager keeps avoiding making decisions and diluting responsibility, they aren't fit to be a manager.
With client projects it’s different, you have a budget and deadline. Miss it or screw up on the way and the client fires you and hires your competitor. My client delivery teams are a much harsher environment but roles and responsibility for decisions are very clear and everyone’s job is at stake so it gets taken pretty seriously. There’s no room or time for consensus building, the flip side being owning a bad decision means working somewhere else.
For management more interested in playing politics, this kind of ambiguity is a feature, not a bug. This is how you take credit for successes, and shift blame for failures.
I've worked across 18 companies, and about 2-3 times I've been given a person to onboard me, once we had a decent central wiki, and the rest of the times I've basically been left figure it out.
I don't even think these things are overly hard to figure out, but very few people in tech straddle the lines between tech and org, and when they do, they're usually kept at bay by the non-technical tech roles ( deliver manager, etc ).
In my limited experience, you have a real problem if the dev team hijacks what will be done and how it will be done. There is a good chance your product is going to be over-engineered, difficult to steer and all the minor but important details will never get done/corrected because hey, lets build another mammoth worthless (in business terms) functionality.
To your point, I think a lack of leadership can kill a consensus-building process. Whoever is coordinating needs the authority and will to end the discussion when the time is right (among other things.) Otherwise, it really can become endless debate and drawn out attempts to get some unwilling party onboard.
Making decisions based on consensus is just often not the right choice in this context. If used for the wrong type of decision, it will lead to a "design by committee" type of process and result, driving a lot of people mad along the way.
A better way to make decisions in a software project is to consult with stakeholders (if necessary), identify the appropriate decision maker based on competence and then let that person make a decision.
Spot on. If I could have all the years wasted through this back, I would be a young man again. In my experience, these are product managers that have never actually been involved in building anything.
Except every time you add someone new, it slips back to a prior state - and every time the group gets bigger, it takes longer to ‘settle’.
Eventually, roles/ownership/structure. needs to be codified, or the group never ends up actually performing - and if not done right, that won’t happen even with that.
Making a decision based on input from relevant coworkers while being competent in the domain you are making the decision in isn't exactly dictatorship?
So what happens in the happy case is a very complex system of figuring out who should be the dictator and when they need to be moved on. If you look at successful open source projects that process is often visible - a brutal communal negotiation (of global scope!) to work out who in the world is the person with the best motivation to control a project.
"Just tell me what to build" is a dangerous attitude to foster. It pushes more work into the management layer which is already a bottleneck for making decisions. That is bad strategy. A couple of devs thinking that way is OK, but it is going to accentuate the inevitable management dysfunction.
The best approach is a culture where PMs understand customer problems and give quick, effective feedback to developers about whether what they just did affected a customer in a good way. Then management lets developers do what they do as quickly as possible. Alternatives can work, but that is the sweet spot.
The ultimate goal of any software company is to have that one lucky dev who just gets it, builds something amazing quickly and then the company comes in to maintain and milk the product until management miscalculates, destroys it and the cycle starts again. Failing that, the next best option is a product guy who just gets it and organises the engineers to build something that makes customers happy. Neither of those states depends on debate or, curiously, on what the median developer is doing. Software developer productivity is one of the spikiest, most disjointed and chaotic metrics I've ever dealt with and most of the time it appears to be $0/day value add or slightly negative. Then sometimes it spikes to a few million dollars an hour. The culture should all be about working around the spikes, not the day to day.
My preferred method of development is tell me what you think you want, then be available for the stream of questions I'll be asking you to make sure what you need is accomplished.
I've found that it's almost always a bad idea, for everyone involved, to implement what someone says they want, unless they're assholes or competent developers.
"Be very careful what you ask for because if I really dislike you I'll give you EXACTLY what you ask for and you'll find out quickly how much you didn't want that."
That said, interpretating what's and crafting them into needs is more enginner than developer.
For me it was normal to assume that neither my customers nor I know what they need automatically. This requires a creative process and the finding of a common language at least in the beginning of the project.
The worst thing is when developers you work with are "Ok go!" without discussing and you know they got a hammer and now everything to them looks like a nail. Sure they get things done, but if so do builders that start building a house without a plan.
That strategy works if the requirements are foolproof and straightforward, but as soon as the project reaches a certain complexity. Sure requirements can change, customers can fuck up and misjudge what they want, but a good craftsperson thinks about the future of a project as well. And while you might think you sell software, you are also selling a relationship with the customer. If they feel like you tackled that problem openly together with them, that is worth something as well.
TFA seems to present reasonable advice. Yet lots of comments here don't seem to agree that "give experts necessary context and trust to build good products" is a decent strategy.
Well, humans are primates and I suppose we could draw a parallel between keyboards and typewriters. Although if a dev is trying to write Shakespeare they will get gentle feedback that this is an inappropriate use of their time.
> Yet lots of comments here don't seem to agree that "give experts necessary context and trust to build good products" is a decent strategy.
I expect all the opinions agree that the plan is to give experts necessary context and trust to build good products. There aren't actually that many options here. You have to talk to devs, and then you have to let them dev. The question is how much context can/should be front-loaded and how to deliver feedback.
And those are relatively simple to answer; much as possible and frequently. Beyond that we're relying on monkey-typewriter dynamics.
Organizations that do nothing until someone else tells them what to build are afraid of sticking their necks out for some dominant manager to just ignore them anyway.
This is why executives and managers are recommended to foster psychological safety. Respect the efforts of people who built some skunkworks project, then discuss realignment with them afterwards (understanding that you, the executive, may need to be the one who re-aligns). Encourage people who never stick their necks out to start to tell you what they think, even if only privately at first, and eventually hopefully they'll start to join the discussion too.
There's a lot of talk about clarifying who exactly the decision-maker is in any situation. It's a nice fantasy to think that the decision-maker should always be some kind of manager or executive, but the truth is, if you issue a dictate from on high to someone to do something that they deeply disagree with, eventually everybody's going to leave. That's not the way you lead people. Ultimately, the person who does the work is the person who decides - all that you can ask from them, as a manager, is for them to listen to you (and other stakeholders) first, especially since someone who never does as they're asked is someone who will, sooner or later, get fired. But no manager can truly control the actions of their subordinates, and the wise manager understands that and channels that into productive workers who are mostly (but never fully!) aligned with the organization.
I worked on a team that went from a very strong "debate everything" culture to a very apathetically strong "just tell me what to build" culture, and it was primarily due to the hires we made. We hired for the ability to grow technically, and that certainly proved true. But the interest in the "why" behind the work never developed the way the "debate everything" folks assumed would happen with all good devs. The QA team cared, and remained in "debate everything" mode, but the dev team eventually just wanted to be left alone to focus on relatively meaningless (without context) work. No amount of connecting the dots to real user need seemed to really get through. They just wanted semi-challenging technical problems, and a paycheck. Nothing wrong with that in moderation, but it ended up infecting the entire team.
So be careful how you hire. If you have a blind spot for this phenomenon and hire exclusively for technical skill and/or potential, you might just get unlucky and end up with a critical mass of "just tell me what to build", and then you're screwed, because you'll have a technically strong team that has zero interest in understanding the bigger context of their work, forcing you to choose between getting sucked into the codependent relationship, or resigning yourself to doing the wrong thing with great technical prowess.
- They’ll help you profile who you need. Questions you would never have dared asking, like “Tell me a situation when you reacted to xyz”, not only they filter the person, they also change the attitude of the relationship, the person itself goes from “it’s just a job” to “let’s put the extra neurons in, to make a product people actually love”,
- And they’ll give you weight in negotiation, asking questions you never dared asking.
It’s expensive, but recruiting more than one guy will be expensive anyway. And the engineering coming in, will feel safer that it’s a microstartup but it already has the structure to manage them, starting with HR.
And I say that as a person who only saw HR as the legal goon of the boss in the past. Don’t hire those, hire a consultant in recruiting.
As a manger, you could go as far as saying explicitly -- "hey, any engineer who demonstrates customer obsession and shows attention to impact, will receive their choice of project to work on, will get promoted faster and higher than those who don't, etc.", but this is unlikely to create a positive outcome. At best, 1-2 people may rise up, but the rest of the team will resent them for "try-harding" probably; crabs-in-a-bucket mentality is a very natural human group phenomenon. And now you've got 1-2 "stars" who won't want to stick around to deal with the rest of the shitty team members, so once they leave, you're back at square one.
Reorging is a reasonable step to take, but it's risky and you could just as well end up "infecting" other orgs or team members, by carrying the contagion of bad culture with you.
Firing and hiring again more carefully, is honestly both faster and more direct, and shouldn't be seen as a "last resort" option IF the culture is truly too far gone AND the culprits are readily identifiable. First step is probably to make sure you have a firm and accurate diagnosis of the problem, then if you're 99% sure you can identify the right people to fire -- go ahead and fire them.
This is an underestimation of the potential of software systems. Of course it depends on the software application, but in many cases there is a lot of value lost when organizations implicitly create a technical ceiling for their engineers, and push their focus away from the theory and practice of engineering.
Saying that there is more value for an engineer to coordinate, plan, and present, is almost like saying that there is a point in which software systems can no longer be innovated or improved, or that there is nothing about software that requires more than 5 years of experience (or whatever the senior level would be). This is a sure way to build naive systems that brake all the time, when instead it could implement more sophisticated solutions. Of course this would mean that engineers would have a harder time communicating their solutions, but once again, it would be limiting software just because the managers want full control and visibility at every step of the way.
We're now talking about the possibility of AGI, yet it seems every software org still goes through the same problems, with the same type of bugs, pipeline problems, etc. This is definitely not because software can't solve the problems, so it must be that the solutions are too hard to implement, and so the question is why is that hard?
Too many chefs, not enough cooks
In general this happens when companies over-value management. If you find each "team" of 3-7 software developers have at least 3 "managers" on the team (in addition to the visual designer and other folks in productive roles): you've got too many chefs. Decisions have to go through the committee, the process, etc. Software developers that are making the product itself are rational, intelligent, capable people whose hands become tied behind meetings, documents, and permission-seeking. Too many chefs make for busy work and they focus on the wrong work.
One manager for 5-8 software developers is often good enough. Someone who interfaces with HR, handles administrative tasks, and is the voice of the team to the rest of the company at meetings. A good manager enables the team to do their best work and stays out of the way.
As long as the chefs also do cooking, having chefs is not a big deal. The problem is the people who do not produce anything but keep themselves busy doing stuff that ends up wasting everyone's time.
In most cases, you are engineering a solution to solve a business need. Each engineer should know the business metrics you are trying to move, and why, not just the PM. This tends to highlight that navel gazing on which framework to use is pointless, because unless you actually build something, the money isn't going to arrive, and you'll be out of a job.
Software engineering is all to often treated as a black box, that must be isolated from the real world, lest the magic smoke escape. But that leads to terrible decisions, and allows "carbon fibre" programmers to flourish. Engineering should be a business unit like any other part of the company.
The sad part is that many employees have come to the rational and correct solution that the above is not true. Out of the people I've known, more have lost their jobs to the results of C-suite malfeasance (e.g embezzling, illegal behaviour) than have ever lost their jobs to their own actions.
Conversely, unless the organisation you work for is exceptionally incompetent, your own personal failures shouldn't put them out of business. Think about all the cancelled Google projects. If the devs that worked on them had just come into work and played Minecraft all day, Google would still be in business. My personal opinion is that, if the Google Reader devs had never delivered a product, Google would be better off today than it actually is because it wouldn't have such a devoted community angry at it for killing off a beloved product.
The navel gazing framework discussion is like selling your own lotto tickets. If someone's number actually comes, you're on the hook for millions of dollars and probably broke for life. However, a person with a risk taking mentality will recognise that the odds of someone winning the lotto is tiny and, barring that outcome, selling your own lotto tickets is free money.
Ref.:
I am not empowered to make decisions, I have nobody to discuss meaningfully with, and I'm told what to build perentorily but vaguely and often incorrectly. Will I be able to read the mind of my boss? Better to stall, complain, and avoid making mistakes.
What I'll never do again is work at a place where every decision is subject to re-debate anytime someone decides "they don't like it." I just don't have the mental energy for that bullshit any more.
But then, I leave the developers and/or the manager to make their own decision and shoot themselves in the foot if they happen to make the wrong decisions.
This approach takes more time, but I think it improves the sense of ownership of developers and their maturity over time.
1. Uncertainty. People haven't done X before, and are concerned about the outcome, so they delay, by debating. They don't know whether they're right or wrong. They're really just trying to figure out their own opinion. So they will bring up objections, even if they don't actually have a concrete reason to object. They just literally don't know if something is valid, so they pose a hypothetical. Another form of uncertainty is lack of trust. If somebody has trust that an outcome will be acceptable, then they can deal with any fears they might have about whether a given approach will have the outcome they hope for. If they can't trust the process, or people, they'll bring out road blocks.
2. Ego. Let's face it, we work with people with big egos. People who are smart, and capable, and know it.If their egos don't feel adequately compensated, they will debate until it is.
I think "just tell me what to do" is easier to understand:
1. Apathy. It's a real killer, and it can hit any organization. Sometimes people care too much; if they don't feel like they can affect change, that turns into caring too little. Or perhaps they've just been burned too often at this job. Frustration builds until the stress or friction is too much, and they compensate emotionally by disconnecting. Some people carry this from job to job, like a form of PTSD.
2. Inexperience. When you have a lot of experience, you mostly know what to do already. But if you're working on something very new, or the organizational hierarchy isn't clear, or goals aren't clear, or processes, or you just don't have a lot of professional experience, you can be lost in a sea of uncertainty, not sure what to do. Maybe you have ideas of what to do, but it's not clear how to decide on it. So you relent, just waiting for someone to give you some guidance.
In each of these cases, the missing component is: leadership. There must be good leadership to help people do their best work and keep the ship sailing. Bad leadership, or the absence of leadership, will lead back to these problems.
I have tried to explain to my therapist why I have developed something like PTSD around peer reviews... yes, we all say "you are not your work" but that does not excuse being (dare I say) abusive in comments on PRs.
And, since software development is a mostly creative work, software developers are strongly impacted by it.
https://blog.danlew.net/2021/02/23/stop-nitpicking-in-code-r...
That said, review debates are only one part of a "debate everything" culture. Architectural disagreements are much harder to solve while maintaining morale. One thing I've found effective as an engineering leader, when we need a plan of action, is to ensure I listen to every technical take, but make it clear that while I'm incorporating all those concerns into the decision, some concerns need to be weighted more than others based on larger medium-to-long-term business context, and that those concerns need to drive the design. It isn't always the best approach with 20/20 hindsight, but the removal of paralysis has been a net positive so far.
A real leader should absolutely value and respect the input of their team, but also know when to just say “of the options, this is what we are going with, here is the trade off we are making and why” and have the mutual respect and trust of their team to make both of those activities successful.
Edit: It's from the article. "F***s given" scale.
every new hire under him lasted about 8 months, then were burnt out and stopped being active in debate
Data driven decisions.
I think PG has a tweet a while back like "some decisions are so bad, no one in their right mind would agree to this if there wasn't data to back it up". More of less saying, you can find data to support any decision, so why even be data driven?
EDIT: Found the tweet, which pg responded to but didn't actually create: https://x.com/dadiomov/status/1553474933010755584?s=20
I'm speaking from a 20 year background designing medical devices and other critical infrastructure. In my world, like with airliners, it's important to get decisions right or people can be killed. Therefore, data driven decisions.
Obvious means that there is a 51% chance that decision a is better than decision b.
I'm advocating against just guessing when it's 50/50
Debating is also used as a human interaction tool for "feeling part of" or "being good enough" and it's especially clear in a startup and early company setting where everyone kind of tries to show their own merits to the rest of the group.
It's unhealthy to debate a lot and it's a clear sign that there is either too much uncertainty, too much ego, too little subjective evidence or simply too shallow leadership.
Debating should be very surgical and not attempt to either look into the future or favor the most outspoken.
I don't care what kind of data you want me to load, but let me know the frequency, the type, the schema and other technical information and I'll load it for ya.
They were taking about how they just want people to have a well formed idea of what to build, to be able to hand off clear expectations, and let him roll. For curiosity sake I started asking about other times: has there been a time where you've felt on the line, been the one who has to figure out what to do?
They paused for a bit & then said yeah, actually... They had been battlefield promoted after two higher ups on a team had left & it was just them running this product. They said they had little idea what they were doing but the company trusted them & let them hack through it. They loved that time. Finding out what to doz being given problems and the freedom to solve it was a highlight of their life, they said.
A lot of people don't want to play the game. Especially when we are forced to collaborate with non-technicals, it's incredibly hard to justify and explain ourselves & to share power & compromise with these people who lack competency to judge, assess, negotiate.
The title here omits the gods truth as an option: we the engineers know & can assess & you the business/product don't have the technical chops to debate, nor do you understand what is to be built. The premise presented is "debate vs do" as they say it, as though product and product alone understands do. But I think most engineers live in pain and dissonance and sadness, feel an incredible impedance and struggle, because most businesses/product have only the faintest fragmentary fake propped idea of what do is. It's a fiction. And it's up to engineers to cobble together some vaguely competent rendition of the fairy tale nonsense product tells itself it's come up with and that engineers need to just do.
The phrasing here could not be more slanted. Run, engineer, run, from the dented terrors that would think their product sensibilities have fully flushed out the idea, that think there is no cause for "debate" or sussing out how really to do a things that think only to "do" what the master product says is necessary.
https://www.corporate-rebels.com/blog/next-influential-manag...
Where a bunch of corporate fascists took such umbrage over debate/exploration over how their corporate envisioned scenarios were to work that they started pursuing legal action? Against open source people making Home Assistant integration?
These people basically went thermonuclear in terms of cancelling possible debate & enforcing top down decision making. Utterly unwilling to listen or permit a single other opinion other than what their top-down management built.
I cannot think of a better company to serve as a warning sign for what to never ever do. Seeing yourself & your own vision of the product as God & any deviation or discrepancy or other opinion as something to be squashed. Usually lawyers aren't involved as Haier did in their quest to stop out undogmatic use, but alas this kind of managerial hubris & self importance from the product world seems all too typical & all too poisonous; an unwillingness to let anyone else explore bounds of possibility, lest it gets in the way of those egos assured they've built a perfect little terrarium for the users to play inside.
They calmed down eventually, with an incredibly useless & empty press release hinting that they were backing off. But this seems like one of the most powerful examples of a company chuffed up on hubris unwilling to permit even the hint of debates.
We had a simple avatar upload. Done this in every app we had ever made. It "broke". And I mean it didn't really break, but it changed enough where it might as well have.
Who changed it? Sales (aka the customer)? QA? Development? Design?
CEO.
Does what you’re doing increase revenue, profits, market saturation, improve customer experience, whatever?
If it doesn’t don’t do it.
I don’t think it needs to be that hard.
Fire people who waste time that detracts from this mission.
Imagine you’re in close quarters combat as a soldier and your team lead is goofing off or your manager is focused on looking good. Don’t find yourself in that position. Don’t let your team get to that level of incompetence and failure.
So then you get into all these murky waters of how to decide what to work on and how to go about it