It worked at first with a good team. Then later I inherited a fragment of another team with some older know-it-all engineers who thought everything modern was garbage and we should be doing everything like they did 25 years ago. I wasted too much time letting them stonewall everything while thinking we’d eventually reach a consensus.
Then at some point you realize you have to put your foot down and pick a direction after they’ve had a chance to state their position.
Autocratic-style hierarchy and coercion isn't necessary for avoiding decision paralysis in organizations. It appears to be the practical route but has all sorts of harmful and counterproductive consequences.
But I guess, if that's the environment you're in, then you're stuck with autocratic leadership (no matter what label it claims for itself), and your only choice is to leave or not.
I’m basing these comments out of experience - one example is a workgroup/committee operating under a similar model that was completely unable to do anything due to decision paralysis. The committee grew significantly more effective when we reformed the decision making process to have a small group of owners to handle pitching and (potentially) implementing the decision, then had approval be a simple yes/no majority vote.
In full sociocracy, it...
> honors the circle’s ability to freely make decisions within its domain. This is key for the organization to remain effective. But it comes at the cost of members not having “consent rights” to every decision the organization makes. Each member will only have those rights for the circles they are a part of.
So it's not necessary to allow people outside that working group to veto or require compulsory followup through objection
There's no perfect solution to organization, everything is a tradeoff. I've also been part of working groups (made of people whose job description is to manage the scope of changes they're proposing) where everyone and the workers impacted by the decisions are in agreement and no impact on cost etc., but the exec decides no change can be made due to personal preference despite disastrous consequence. Or where an exec who abstains from checking in on a working group's efforts nonetheless counters it with shifting and contradictory demands whenever it comes time to take action, requiring going back to the drawing board repeatedly until people simply give up or leave the organization. Or where the exec asks for more data for a proposal, and then doesn't evaluate the data once gathered, leaving no recourse but to give up or leave the organization. We all have stories like this. Hierarchical organizations are also susceptible to paralysis.
>> Hierarchy and coercion isn't necessary for avoiding decision paralysis in organizations.
> I don’t think that is a practical framework for situations where people aren’t already very closely aligned.
Putting aside the concept of Sociocracy for the purpose of discussing engineering team leadership philosophies, one which I have observed to be very effective when working with experts is Servant Leadership[0]. From the Wiki page:
A servant leader shares power, puts the needs of the
employees first and helps people develop and perform as
highly as possible. Instead of the people working to serve
the leader, the leader exists to serve the people.
While Servant Leadership[0] might initially raise concerns resembling the problems you rightly identify with a sociocratic approach, it has the benefits of peer collaboration combined with accountability of the decisions made by leadership.Each role is a module to take in inputs, process them, and produce outputs. it is effectively a program.
Define your roles, and expectations of each role, then run the program and edit as needed.
There’s rarely a single correct answer— lots of good solutions have trade-offs— but there are often various wrong answers. Do the best you can to avoid the wrong answers, and when you inevitably run into the business end of one of your trade-offs, take comfort in knowing the other good options probably also had trade-offs, and tell the smug know-it-alls to cram it.
People working effectively towards a non-optimal solution is far more useful than sitting around arguing about the best way to do it.
Whatever it is, it tends to be considerably less value to the business than the decision itself, but it directly acknowledges their discontent and allows them to get something out of the process besides platitudes, (perceived) public embarrassment, and frustration.
That's not to say that consensus always works. But it does mean the group needs to understand the objections and make decisions the team can live with. The most toxic of engineering situations is the manager making decisions without understanding consequences and without taking responsibility for the outcomes.
Sometimes there is time pressure or difficult people but the base assumption should be that people actually want to make the right decision, being difficult generally makes your life harder. Who would be responsible for executing on the decision and who would be responsible for the outcome? What are the consequences of strong arming the team into solutions they don't agree with?
Old engineers will say things that are hard learned lessons like "don't reinvent the wheel, when your thing is running on a system that comes with wheels". So, good solid advice that rookies will ignore, because of course they do. But sometimes old engineers will say things that are more of the quality of: "30 years ago went deep into this topic, discovered the truth and haven't updated my judgement since, despite the world having changed a lot".
The problem is that unless you really know things inside out or know the hard held opinions of your older collegue well, it can be hard to tell the two apart. In that case it only helps to talk about it in more detail and try to get to the root of where the judgement comes from. Then it could come to light that the warning to use PHP comes from a bad experience with PHP version <1.0 or that there is a number of bad experienced that are really useful for deciding the direction of a project.
In the end many decisions are about taste. And nothing is as good as a way to keep arguing than matters of taste. Weigh all the pros/cons and make a choice.
For example, I started in DOS (as did many older folk). Memory was severely constrained. So we developed habits to use memory (and disk space) very efficiently.
Like using bits in a byte, or a byte as an ID field. Or quibbling over the length of a Name field.
All those habits proved to be bad in the long run. And today memory (and disk space) are abundant. But these old habits are hard to break.
And that's before we talk about "modern" techniques, like version control etc.
Experience is great. I'm a fan. But all too often experience is also "there was a bug I windows 95, so that API call is unreliable ".
As mentioned before there are exceptions, like embedded programming, anything that needs to be finished within predictable time (game code, graphics, DSP code, etc). But even if you write a thing for a company website today I wouldn't dare to answer if making the code 10% less readable to make it use memory 10% less memory is a good trade off. Not that redability and memory use are necessarily mutually exclusive goals, but if you highly optimize code for one dimension, others will suffer at some point. And if you come from a generation where memory usage was king, it could be that you make these trade offs out of habit or principle despite them maybe no longer aligning with the goals of the project you're working on.
Anybosy who is good at their craft will choose how to deal with trade offs depending on the needs of the project and not based on remembered tradition.
The same thing might happen to these engineers when working on existing or new projects and writing C/C++ code; these optimizations will be part of their process.
It still has a cost though, which needs to be taken into account in many situations. At our company the cost of compute, RAM, and storage are some of the biggest ongoing concerns, which can make the difference between profitability and bankruptcy, and we’ve done a lot of work on it.
It is good to know how to use memory efficiently, even today. But it is also important to know that if you optimize for memory usage or speed you may be paying in another dimension. And in my experience a certain type of old programmer can have a total lack of awareness that e.g. in some cases readability, maintainability, ease of use for developers, display latency etc. can be dimensions that are priorized over another for really good reasons.
The admin equivalent of that is somebody who provisions the same hard disk space for a server today as they did in the 2000s and then have the machine run out of memory on every fourth kernel upgrade. It is good to only use the necessary resources, but not if you can't/won't handle the ugly consequences that may come with it.
I'll bet you the people inventing these modern new architectures are among the more experienced engineers at the companies
who I would criticize by saying, we used to think it was a good idea to code around the limitations of old architectures and now we're accused of coding for PDP-11s and processors aren't PDP-11s any more. so what we should do now I'm told is code very specifically around the idiosyncracies of the new PDP-11,000's and that is what marks progress. Caches were invented to invisibly and silently make things faster, and that was a brilliant idea. Now new cache designers analyze what we used to do to insist we change how we code so they can cache what they want to cache not what we want to do, and all younger programmers talk about these days is coding for the cache (which itself is a cache of a cache of a cache). this is not progress, it's coding for the timing of the modern storage drum.
This is sound advice when people agree on which column things belong to :)
E.g. let's say one library is more privacy friendly and the other allows more data collection, depending on the project both could be pro or con. I respect developers who value privacy, but if you don't know whether a program is meant to collect data by the point you discuss library choices that eindicates either bad project planning, bad communication or both.
I would say that they are pretty average.
First I am not sure what you mean by "know-it-all", specifically if this is a positive trait or not. Let's say that it is positive.
In that case age does not matter much because you can have extremely good practices that are simply outdated. Yes they work. Yes, they are stable. But they may not be adapted to the current needs.
So age is not a good differentiator for me.
Now, if you drop "older" I agree with you (with the assumption of a positive meaning for know-it-all)
good lord, in those phrases he was quoting the wording in the comment he was replying to.
I don't know if you are young or old, but I'd like to teach you about threading (and we won't stop till you get it or your eyebrows are gone)
The person kvetching at you about not understanding threading is making a joke because there's also a process called "eyebrow threading."
HN is supposed to be high quality discourse and you have to be on your toes if you want to participate!
Missing context, and missing references, and doubling down when you're called out is NOT the optimal strategy.
I am so sorry not to be at the correct level and, as a non English speaker, not to know all the references.
I feel so ashamed, fortunately you enlightened me about the high quality discourse I was missing.
Thank you very much for your kindness.
Disagree. This can be very bad, but the worst situation I had was a very experienced developer with poor social skills making decisions for the team without a complete understanding of the entire picture
personally, I think those hacks are cute and handy, but once you recruit well, reward and empower your staff, leading becomes much easier. At google, that approach probably helped more with their ESG policies than staff productivity. In Jobs' case, probably helped "him" stay focused rather than his staff, a meditation technique of sorts lol
Re: Juries. wasn't the main reason to prevent the world outside the court from influencing their decision?
[1] I think it's on How Google Works
Breaking ties is part of the leader’s job.
Of course if every issue requires the leader to break the tie, then perhaps there’s either a management issue, and incentive issue, or people don’t understand the strategy.
The popular vote was going to load us up with little emergencies that were going to slow several divisions down and we ended up talking to the bosses and ignoring the vote.
In trying to smooth this over, I realized that the problem is that the people who would be dealing with the consequences of a decision wanted solution C and everyone else wanted solution A. And I think it’s something worth remembering for future indecisions, that the people with skin in the game need to be able to veto a popular vote. If you don’t want the project to lose momentum.
Generally on a large project you will have a bunch of leads all dealing with different domains, and they will reach quorum on major architectural decisions, particularly cross cutting concerns and interfaces between Conway’s Law modularizations. The boss only needs to break ties when a consensus does not emerge. And I mean NEEDS. Second worst boss I ever had refused to break ties and we had an even number of leads, so it happened half a dozen times. We wasted hours every month venting to each other about what we hated about him and one of the regular attendees just about wanted to murder him for that, and have us help him hide the body.
"Okay. Let me know when you are done with that."
The quiet ones may want the yapping voices silenced so progress can be made.
And sometimes the yapping ones get out ahead of their own skis and don't know a graceful way to back down so they're happyish to be closed down, even if they're primed to come back with an "I told you so" if the leader gets it wrong.
This is the most important line. You shouldnt be afraid to hurt some peoples feelings (though not intentionally and as kindly as you can of course). Absolutely nothing will get done if you want everyone to be happy
Your job as a leader isn't necessarily to make the decision, just to be sure that the decision was made.
If they're not getting the same inputs to their decisions as you are, why are you hamstringing them?
And if they're not capable of understanding the inputs to their decisions, why are you keeping them around?
This doesn’t seem realistic to me. Division of labor also implies division of decisions. Mature individuals and teams will acknowledge when there are decisions they’re not able to make, and will refer them to the relevant teams.
An obvious example of this is legal: it hardly ever makes sense to leave a legal decision to a software developer or development team. But similar logic can apply to product management decisions, customer success, security, etc.
How is that an example? Legal is just an input. A mature individual is going to heed the advice from legal, most certainly, but legal isn't making the final decision. Legal doesn't know anything about all of the other constraints, like customer need and technical need. If they did, they wouldn't be working as legal council, they'd be doing the job we're talking about.
So, we're right back at the previous comment:
- If you don't think they're capable of listening to the same things as you are, taking into account team guidance, and coming to a reasonable decision, why would you trust them to implement something?
- If they're not getting the same inputs to their decisions as you are, why are you hamstringing them?
- And if they're not capable of understanding the inputs to their decisions, why are you keeping them around?
An input that regularly mandates choices. The idea that an engineering team gets to make choices with legal consequences using legal as just an "input" is not consistent with any large company I've ever worked at.
> If you don't think they're capable of listening to the same things as you are, taking into account team guidance, and coming to a reasonable decision, why would you trust them to implement something?
Because different people have different skills and knowledge. As I said previously, division of labor also implies division of decisions.
People are not interchangeable or fungible components.
That sounds like someone has hero complex. Someone has to make the decision. The only reasonable way another person can manage that complexity/scale and be capable of making decisions where another can't is if you've set the other person up to fail. And the only reason you'd set another up to fail is if you like to swoop in and save the day.
Taking this approach with skilled people paid to think can easily be interpreted as being dictatorial and often stifles future contributions.
> Take the time to listen to everyone and to form an educated decision. Explain your conclusion once, twice and even thrice.
This implies a rigid hierarchical structure, one lacking collaboration. Again, this approach might work with assembly line workers but won't fly more than once or twice with people paid to solve problems.
> In that case, it's your duty as the leader to play the dictator and impose order.
And it will be soon your duty to find people to backfill those who have better opportunities to pursue.
> If it happens though, don't forget to re-establish trust with your team members and make sure they understand the circumstances that led you to act in that way.
There is no "re-establishing trust with your team" when this form of "leadership" is employed. Once trust is broken, the only employees who remain are those with no better options.
Championing collaboration in a team environment where members are employed for their skills is to acknowledge the value of those members. How you equate this to "a massive god-complex" is a mystery to me.
> If you think your job is to second guess your manager's knowledge and experience, why are you working under them?
Again, collaboration is not "second guessing." It is an effective technique used to identify and pursue an optimal approach given the information known at the time.
> You should be working as a manager somewhere else.
Don't "should" on me. "Should" in the bathroom and wash your hands afterward.
> You are not a peer, you're part of a team reporting into a person that company has entrusted to lead the team.
Management is a personnel role, not a subject matter expert role. Many excellent managers do not possess the skills or domain expertise of those they manage. The great managers I have had the pleasure to work with would freely admit this if asked.
That you imply an organization chart reflects the ability to make informed expert decisions based on where one resides in same confirms to me a myopic understanding of management in general, let alone "how to lead in a room full of experts."
Yes.
And I have made the mistake of "being a dictator" early in my career, only to learn that collaboration and valuing team members yields success much more often than me unequivocally imposing my viewpoint due to reporting structure.
> It is irrelevant what you can "confirm" about me and my views - what a pompous thing to say!
If you have management philosophies which differ from the limited communications in this thread, then obviously I am unaware of them until and unless you decide to share them here. Until such time, all I can do is draw conclusions from what you have posted thus far.
As to "what a pompous thing to say!"
This is the second time in this thread you have projected a judgemental position regarding my prose. The first time can easily be rationalized as perhaps a reaction "in the moment" or a poor choice of words. Now that you have done so again, I have to surmise the origin resides in yourself.
Present the decision in terms of its consequences — consequences that fall on you as the leader, not on others. You want to make clear that the accountability for the outcome rest with you and that others are "safe".
What usually happens when I do this is that the team defers to me to make the decision cause they recognize my point.
That way, you preserve alignment and authority without eroding trust, because the team sees it’s not about wielding power, but about owning the consequences no one else should or can carry.
Take the time to listen to everyone and to form an educated decision. Explain your conclusion once, twice and even thrice. But sometimes teams can get caught in an endless futile discussion over details that don't matter for the stated goals.
In that case, it's *your duty* as the leader to play the dictator and impose order. "If you want to make everyone happy, don't be a leader. Sell ice-cream", Steve Jobs reportedly once said.
If it happens though, don't forget to re-establish trust with your team members and make sure they understand the circumstances that led you to act in that way.