The only issue is that I still get blamed. I don't know how many times I've repeated this scenario:
1. I highlight gap / issue in code.
2. Team says, "Need to ship; we'll accept the risk"
3. During go-live, fecal matter hits fan because of aforementioned gap in code.
4. Everyone acts surprised.
5. I point out that I mentioned it 2 months ago.
6. Everyone makes excuses / claims they don't remember it that way / moves on to burn down another project.
7. I'm left to clean up a mess / have taken a hit to my reputation.
Not sure what I'm doing wrong...
In the country of the blind, the one eyed man gets locked up in a lunatic asylum.
Perhaps you failed to build a paper trail (i.e. an email trail) to document the fact that you predicted the disaster, and who it was that decided to ignore your warnings. If you do that, when the fingers start pointing in your direction, you can send everyone copies of the emails that prove who is responsible for the mess.
Then, after people have a visceral positive feeling about you, make some tiny suggestion for improvement. Make the improvement, and whoever approved it, do something to make sure they associate your suggestion with a positive experience.
Slowly repeat. It is a slight selling of your soul. It is effective.
FWIW, 2 things mitigate this. First, some companies do actually remember people who fix things and get things done, so that's on your side. The other is that it's not likely you'll be there long-term anyhow. Companies that do this also generally fail in other departments, like paying you what you're worth as your worth increases. So you'll probably look for a new job eventually anyhow.
I know it's hard to see from where you're standing, but I wouldn't fret about it. Just keep doing your job the best you can and warning them, and let the chips fall where they may.
If the Business Unit, for whom the software is being written, has a representative on your team, then make sure you explain the risk in purely business terms, not technical ones. A BU rep's ears are going to perk up with statements like "invalid posts may get written to the general ledger" or "1 in every 20 orders may get dropped" rather than "universally scoped variables are being overwritten by invalid data in some cases" or "uncommitted nested transactions may cause a core dump."
If your team doesn't include a BU rep, then you could always get friendly with one and explain the potential risks over coffee or lunch. Perhaps even suggest some questions the rep should ask the team before the mod goes live.
In my situation, a BU rep is always part of the team and I rarely have other developers on the team. The reps and I have lunch together regularly anyway, so they get my opinions and recommendations that way.
>Not sure what I'm doing wrong...
probably you're doing it too serious and taking it too personal. After 20+ years in the industry, I got desensitiveized enough to bother that much about small things, and when i point to the issue i usually do it in the "constructive" "spirit-sharing" and "team-building" way - "Ha! Just imagine how those suckers - customers or downstream devs - would be hitting that bug, completely lost at what to do, they would have no chances to make it work so we should give out a Grand Prize to the unlikely one who would make it through... " I noticed that various leaders/management/etc. have hard time to full-heartedly subscribe to that vision of future. Not that that gets the thing fixed or anything like this, mind you. Yet it helps with the blame part if/when it still comes my way - "Wow! when _we_ (me and you, the manager/etc.) were laughing at it _we_ did look into the crystal ball! _We_ are that smart!" The management somehow don't enjoy sharing in on that smartness :)
At some point (agile?) we explicitly gave up all moral responsibility for our creations, to people with money.
In that case, the mechanical engineer would certainly acquiesce, just like most of us do when management prefers speed/cost to scalability.
Not any more.
But in the 19th century bridge failure was quite frequent, until things like the Tay Bridge Disaster happened, and then some standards were imposed, and engineers and others were empowered to enforce high standards.
In any field you can have fast development, or you can have safe development, but you really can´t have both. It remains to be seen quite what level of software disaster it will take to bring this lesson home in our industry.
- 508 / ADA compliance
- HIPAA
- AICC / SCORM / cmi5
- PCI / DSS
Things like code quality and inner loop optimization are largely irrelevant for the people who are using the software.
You hit the nail on the head. It happened when we stopped financing our own work.
We would have dramatically less surveillance programs, automated enforcement and bombs if there wasn't as many people ready to blindly write the software for them.
We should be thinking hard about what we are building and how it will be [ab]used, especially in government.
"I try to stay much less emotionally attached to the end-result".
This is the mindset that drives most of military, police and totalitarian policy. You don't drop a bomb or violate the constitution without a bit of emotional divestment.
Our industry loves to write CYA statements about the product not being intended to be used in critical situations and bury it in the fineprint of licenses we know customers do not ready anyways. Then, we act surprised when the same customers go and use the product in life or death situatioins.
This is not theoretical, just to highlight the most well known example: Our current generation of social media was created for the purpose of allowing college aged people in first world nations to share trivial details about their personal lives with friends and aquaintances. But now we see activists using the same media to organize civil resistance against governments; specially governments with huge stains in their human rights record.
Maybe they should. There's a reason agile won; it was and remains more efficient than the alternatives.
Better from the market's POV != better for the people who use it.
I don't know about you, but if I'm not given what I need to do something, there is no way in hell I'm going to take responsibility for it.
EDIT: Not to mention that, if I do hold my ground and refuse to do something until I have what I need, the company is going to fire me and find someone who doesn't give a shit. And quite frankly, I like being able to buy food.
It seems like there is a class division now, even at startups where the devs are on the frontlines and all actual decisions are kicked up a hierarchy.
If there's a quality issue, the frontline devs should be able to blow the whistle and get the problems resolved because we have the technical knowledge to identify the problem and to fix it.
CYA, Cover Your Ass, is a good call though since the tech companies aim to keep developers down.
Developers need an appropriate level of authority.
Building something safety-critical? Every dev needs to be able to "pull the rope and stop the train" if something isn't right.
Building a toy? Kick the "this is fragile, should we do it?" questions up to the PM.
I don't want my devs deciding to arbitrarily gold-plate every trivial feature, but at the same time, if there's a latent quality problem, I need to know about it.
Blaming an engineer for supposedly poor engineering is a lot more politically viable than blaming management for poor management -- because they're higher on the chain of command than you are.
It can also work to just take a little longer on a feature and do some cleanup/fixing without getting permission. If anyone bothers you about it, just say "I noticed this issue and wanted to avoid running into problem xyz again since it took us offline last week." Again, most of this boils down to tact. Project managers don't like looking bad to upper management. Usually you just have to point out (tactfully!) how dumb they will look if something crashes in prod on a weekend.
That's insulting for the cows !
Do you get that?
Things shouldn't be this way, that's the whole point of the article.
I apologize.
I'm frustrated at work, I don't understand why all these intelligent, capable people wind up building such a haphazard, nearly spastic organization.
I should not fault you for coping, even thriving, in a world not of your own making.