I know one project did not have my involvement and couldn’t have succeeded without my knowledge. They were so bad they would work in questions casually to their actual work.
I started avoiding all of them when I found out management had been dumping on my team and praising theirs. It’s just such a slap in the face because they could not have done well and their implementation was horrible.
I can’t emphasize this part enough.
I’ve been part of some projects where someone external to the team went on a crusade to shut our work down because they disagreed with it. When we pushed through, shipped it, and it worked well they lost a lot of credibility.
Be careful about what you spend your reputational capital on.
When I was officially the architect at two companies between 2016-2020, I felt comfortable stating my opinions on the “how” of the underlying infrastructure and cross cutting concerns and shared code. But even then I didn’t give my unsolicited opinion to the team leads who built for instance the user interface or the business logic when that wasn’t my responsibility.
The second saying is “The avalanche has already started. The pebbles no longer have a vote”. If a decision was decided by my skip manager or above, I’m not saying anything. I’m going to go along with the program.
I’ve been working for consulting departments (at AWS) and then (full time) at consulting companies since 2020. When I was a mid level consultant (L5) at AWS, for larger projects where I was assigned to lead one slice of work (a workstream), if it didn’t affect me, I said nothing. I was just trying to keep my head down to get through my four year initial contract.
I definitely didn’t stick my nose into projects I wasn’t assigned to.
Now I’m a staff consultant at a third party consulting company. I still go by the same rule. I keep my mouth shut about internal corporate decisions, I tow the company line, I don’t give unsolicited advice about other projects and I lead my own projects.
There is one specific speciality I’m working on building up within the company where I will subtly interject. But even then, it’s only because I have the blessing of C suite and they reached out to me.
If I see something heading toward failure, I let people know they may want to consider a different approach. That’s it. There’s no need to be harsh or belabor the point but it’s better to speak up than to quietly watch a train wreck unfold.
At large companies, I've rarely found a reason to speak out on a project. Unless it has a considerable effect on my team/work (read: peace of mind), it just doesn't make sense to be the person casting doubt. There's not much ROI for being "right".
If you manage to kill the project before it starts, no one will ever know how bad of a disaster you prevented. If the project succeeds despite your objections, you look like an idiot. And if it fails - as the author notes, that doesn't get remembered either.
As a senior IC, the only real ROI I've found in these situations is when you can have a solution handy if things fail. People love a fixer. Even if you only manage to pull this off once or twice, your perception in the org/company gets a massive boost. "Wow, so-and-so is always thinking ahead."
A basic example I saw at my last company was automated E2E testing in production. My teammate had suggested this to improve our ability to detect regressions, but it was ultimately shot down as not being worth the investment over other features.
A few months later, we had seen multiple instances of users hitting significant issues before we could catch them. My teammate was able to whip out the test framework they had been building on the side, and was immediately showered with praise/organizational support (and I'm sure a great review as well).
In any other setting you can't afford to watch money and motivation burn just to stay 'politically solvent'.
(Lalit is very good at fitting complex corporate dynamics in a single blog post though.)
The engineers' role should mostly be as technical advisors, i.e. calling out bad projects for technical reasons (UX, architecture, etc.) But even the seniormost engineers do not have the corporate standing, let alone political cachet, to call out or fix political issues (empire building, infighting between orgs, etc.) They can and should point out these conflicts to leadership (very diplomatically, of course) but should bear no responsibility for the outcomes.
However, as an engineer you should ABSOLUTELY be aware of these dynamics because they will impact your career. Like when the project is canceled with no impact delivered.
The example given of the latent turf war between the product and platform teams might have been avoided via a very clear mandate from senior leadership about who owns what exactly. This would probably have involved some horse-trading about what the org giving up its turf gets in return. (BTW if you've ever wondered "Why so many re-orgs" this is why.) That this didn't happen is a failure on the execs' part.
As an aside, I know this happens in every large company, but somehow it appears to be a lot more common at Google? Or at least Googlers are more open about it. E.g. I observed something similar on that recent post about lessions from Google: https://news.ycombinator.com/item?id=46488819
I've never worked at a company as large as Google but in my experience things can be a little more optimistic than the post. When earn enough trust with your leadership, such as at the staff/architect level, you'll be able to tell them they are wrong more often and they'll listen. It doesn't have to be a "$50,000 check" every time.
That leads to a very important question - Why doesn't leadership always trust their engineers? And there's a very important answer that isn't mentioned in the blog post - Sometimes the engineers are wrong.
Engineers are extremely good at finding flaws. But not so good at understanding the business perspective. Depending on the greater context there are times where it does make sense to move forward with a flawed idea.
So next time you hear an idea that sounds stupid, take a beat to understand more where the idea is coming from. If you get better at discerning the difference between ideas that are actually fine (despite their flaws), versus ideas that need to die, then you'll earn more trust with your org.
* Know your audience. Saying things they are unable to hear is a waste of energy.
* Choose your battles carefully.
The flip side:
* Trust your gut
* Speak authentically and with an aim to help (not convince)
* Don’t be overly invested or dependent on the actions and reactions of others (can be hard to do if someone has power over you)
Balancing these things is something I’m learning about…
This also applies to the capacity of the industry to generate bad (and evil) ideas.
Now that we're one of the biggest-money fields, there is no end of people thinking/behaving badly.
You'll wear yourself out, calling out all of it.
For example, I fled cryptocurrency entirely when it got overrun with bad faith. But I don't intend to flee AI, and so will have to ration the criticism I have for abuses there.
> The nuclear option is [...]
BTW, be careful in what context you use this idiom. It doesn't always translate well outside the US. (I realized this as soon as the words came out of my mouth, under perhaps the worst possible circumstances.)
You might be able to get the engineers to tweak the design, but actually getting it canceled can be hopeless. You'll get told the CEO approved it.
This results in a net loss of ROI: we risk being seen as a negative person, while no one acknowledges our goodwill or instincts, because the project lead presents the improvement as their own win through a strategic change of plan.
If you are simply the wrong person in a "toxic" culture, there is no action that can increase your social capital. In a well-functioning culture, constructive criticism would be investment, rather than spending.
Some part of it is that we are perceived as lazy obstructionist naysayer dinosaurs when we point out any flaws in new projects as the article warns. But the rest is that because some of the elders were effectively semi-retired and doing little, anyone over 40 has been uncritically dumped with them.
So we keep the lights on while all the new shiny stuff is given to fresh juniors that don't ever push back and are happy to say yes, but also can't do it alone, and are lost at sea.
So they don't get anything shipped while we keep polishing our legacy turds and wince every time we accidentally get a glimpse of what they are doing.
- It will adversely affect me directly (e.g. cause me to get paged a lot)
- It will harm users or other people outside of the org (various kinds of externalities)
Otherwise it's the company's problem. (Of course, I'm generally happy to give advice and critiques if asked.)
I think it speaks poorly of their manager's professionalism, and what sort of behavior they consider to be acceptable with regard to colleagues.
Knowing things is bad only requires knowledge of the product itself. But fixing it requires understanding of the whole infrastructure and members around the project.
An outsider can't do it. And the insider don't necessarily think the project is bad from his perspective. You would have to argue with him to convince him the project is bad. Which really don't bring any value to the outsider themselves. And it can even be harmful.
Imagine if instead of having to speak up, and risk political capital, you could simply place a bet, and carry on with your work. Leadership can see that people are betting against a project, and make updates in real time. Good decision makers could earn significant bonuses, even if they don't have the title/role to make the decisions. If someone makes more by betting than their manager takes home in salary, maybe it's time for an adjustment.
Such a system is clearly aligned with the interests of the shareholders, and the rank-and-file. But the stranglehold that bureaucrats have over most companies would prevent it from being put in place.
The reality is that a lot of people put ideas forward solely for the purpose of getting attention and trying to get promoted. A lot of those ideas are full of hope and enthusiasm and lacking in fundamentals. But to shoot it down makes you come across as a nay-sayer, or a Debbie-downer. Even though you are sure it’s going nowhere, the reality is that it’s a lot easier to let the market prove you right.
Less hurt feelings and interpersonal drama that way. Seems wasteful, but at the end of the day you got data and learnings that you didn’t have otherwise. So hey, silver linings.
I often use the term "social capital." You have to be careful with how you spend it.
> You rarely get credit for the disasters you prevented. Because nothing happened, people forget about it quickly.
There is another problem left implicit in the article: clueless people doing drive-by project reviews without any context or understanding of the whole problem domain, and proceeding to give unsolicited and unreflected advice supported by partial knowledge.
Also, sometimes projects with a perfect design end up failing for some reason or another, and projects doomed to fail end up pulling through and succeeding, even if they pile up technical debt. The truth of the matter is that software is soft and can adapt to changes in requirements and design, and with enough work anything can be made to work. Thus any observation on "failure" ends up being superficial opinions based on superficial observations.
Upper management agreed to geoIP blocking of the app, without consulting engineering. Why this matters is that GeoIP blocking is at best a whack-a-mole with constantly updating lists and probabilistic blocklists. And is easy to route around with VPNs.
The verbiage they approved was "geoblocking", not "best effort of geoblocking". Clients expected 100% success rate.
When that didn't work, management had to walk that back. We showed proof of what we did was reasonably doable. That finally taught upper management to at least consult before making grandiouse plans.
There's a good chance that when inevitably fail, the team will be laid off.
So beware of shiny new projects until they've proven themselves.
From a creator's standpoint, a software project exists to solve a problem - or at least make the lives of the software users easier. But the moment a company bigwig clique decides to make money out of company, "bad" projects pop up.
To my chance, I experienced this for three times. The signs are nearly the same. The company has a lot of workflows - usually handled by excel and/or internally developed apps that actually reflect those workflows. Then comes the buzzword team proclaiming miracles, snake oil and an app that will even cure the dandruff - just sign here. Of course, the clique has their cut - that's why they say yes or advice the board to say yes.
Then begins the grueling process of "analyzing workflows". Do they contact the actual users who are doing the work? Hell. No. What they do is, create a "Project Team" - usually hired anew, with no information about how the company does its work - and they try to "understand" the workflows. Then it becomes like that game, user says one thing, project team understands another and says a different thing and the outcome is a different product that solves a problem but not the user's problem.
Of course, this process burns money. You gotta do development, you gotta have a server to run the app, you have to book meeting rooms in hotels to train the users, you have to create fliers internally to promote the app - and create pdfs, many many pdfs to make the users understand how the app works. And no one asks "hey, if this app is reflecting our workflows... why are we getting this training?"
Because at the end of the day, this app only exists to make some people money. And after a certain point, no one dares to say anything because of all the money spent. An ambassador who says "the app we spent $10M does not work" will be get shot. People get retired with the f-you money they gained and the company tries to work with the app they "built" usually it ends up hiring an internal team and do it from the zero - and the expensive shit becomes a thing nobody talks about, a company omerta so to speak.
Of course, the wisdom of taking the person risk is a continuum. In some cases it is and in some it isn't. But.. To omit the ethical angle entirely seems like a bad take.
I mean the supply and demand problem was so bad that you had people so narrowly focused that their expectations were absolutely wild. Expecting wild titles out of college or practically out of college. How many "senior" engineers are there who have 3 years of experience or less? How many principals? CTOs? Tons. It's wild and a horrible expectation. Then this cohort of people couldn't possibly fathom actually learning and putting in time so they attacked the people who were simply around longer. I guess ageism but really that naive and toxic phrase you'd hear all over "jack of all trades, master of none." People just couldn't get over the fact that others knew more than a week's worth of YouTube content...and I get it, the large companies hired many people to do one specific job. It's just how the industry supported the insane demand. You "specialize" ... If you want to call it that. As a result, I do not often hire people from large companies because they expect way too much money and do far too little.
So all of this is to say quality has fallen off a cliff and very few know any better. It's really a result of industry demand.
I think many senior engineers let bad projects fail because they don't actually know how to save them. But yes, I'm agree, there's also no incentive.
Here's where I love AI. I'm hoping that AI can help fill some skill gaps, provide education, and separate the people who have motivation from those who don't. At the end of the day, I hate to say it - many engineers took advantage of people. Maybe not intentionally of course, it what was the market would bear. I think AI is going to put an end to the gravy train and as a programmer of over 20 years? I'm thrilled.
Will AI prevent bad projects though? No. Because we still have the same problems. Few programmers are going to plan, communicate, and even bother to put forth the effort to ask about software design. They're going to crank out AI slop.
You know my bet? My bet is that product minded people who didn't understand coding will end up out performing most programmers. In fact, the more junior people on my team absolutely shred many of the "senior" programmers. So much so that I'm faced with a very very difficult gut wrenching challenge. Upskill the "senior" programmers or let them go, because it's just bad for the business when you just look at the numbers. I wouldn't be doing my job and be protecting the company if one of those two outcomes didn't happen. I'm not going to protect people who don't want to lift a finger.
A great reckoning is coming. I think there's going to be a Renaissance from an unexpected cohort of people who will produce good projects again. It won't be the "senior" programmers.
In this case it was an incompetent VP of Engineering who was seriously lacking domain knowledge when a new set of projects outside the norm came into the company. Instead of having a professional attitude, understanding his limitations and convening domain experts to help him and the team move forward, he actively opposed and derailed the project.
What's sad is that we, as external engineering consultants, were yelling at the top of our lungs trying to make management understand the serious liability this had revealed. They were absolutely blind to it until even a toddler could recognize the issue.
This cost the company millions of dollars as well as market reputation.
I think he is an Uber driver now, it's been a few years.