AboutMagical processor fairy; part-time misanthropic bane of idiots. 🧚♀️🏹 Ergo sum miseriae
SkillsRuby ❤, js/es6, css, react, sql. VB and PHP can die in a fire; .NET can go, too.
LocationDying on the altar of lunacy.
Joined devRant on 2/25/2017
Do all the things like ++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatarSign Up
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple APILearn More
$work is migrating to a new HR performance review service (15five). Instead of a private (ish) review once a quarter, it'll be public (and uneditable) reviews due every friday. Better make sure that review is perfect.
also, praising a coworker is required.
So, I was going to complain about JS being finicky and not making a damned bit of sense, but it turns out that it wasn't JS's fault. Not entirely, anyway. It was the halfassed JS minifier middleware (written by the legendary dev himself) that was breaking the JS while writing it to the page.
The original problem:
My code worked. I removed some comments. Big ol' block of //'s. And suddenly $() isn't a function. But if I call $(); at the top, it all works!
It turns out the "minifier" caused JS to think my code was chaining off the previous JS line in the rendering pipeline instead of being a separate statement. so all it really needed was a `;` at the start. What threw me, though, was the last line of the previous blob of (non-minified) JS was a comment, so it should be a separate statement, right?
But as it turns out...
// JS really is finicky.
We share a fate, trapped on a page by the author of our world’s demise. In your eyes I see the pain, your targets slain, I will be the whispers in your mind, the demon inside.
Don’t let down your guard, let in the darkness. You will defeat this trial of ancient gods. Take me in spirit, demon adherent. When you’re the last one to survive. Spirit, stay gentle, next monumental. Will you keep the fire alive?
I, with the power inside, set an end to these lies from the deep and the quiet. Sleep, my old enemy, let an end come to me. traveler please let me fade.10
If you’re having trouble with the bossman’s ‘tude
He’s giving you the blues
You wanna dev, but not for this dude
Here’s what you gotta do:
Pull up the CV, it’s that easy
Send it every time
Just use a throw-away email, hey.10
Root: Fleshes out missing data in some factories. Tests affected code and finds the change breaks some specs (but shouldn’t).
Root: Reaches out to spec author.
Root: Messages thundercunt (the ticket’s code reviewer) on slack about the specs and the reaching out. No response.
Root: Works on another ticket while blocked.
Root: Logs off.
Root: Talks with spec author chick in the morning. Decide to pair on specs later.
TC: Still no slack response.
Root: Gives update in standup. Mentions factories and broken specs. Mentions pairing with spec chick.
TC: Still no slack response.
Root: Pulled off tickets in favor of prod issue. Gets ignored by everyone else diagnosing prod issue. Investigates prod issue by herself. Discovers prod issue isn’t from bad code, but bad requirements — code works as requested. Communicates this with details. Gets ignored by people still diagnosing prod issue. Tries again. Gets ignored. Gives up. Works on non-blocked tickets instead.
TC: Still no slack response.
TC: Comments on PR telling me I broke specs (how did I not notice?), that I need to reach out to spec chick and work with her, and that I can’t resolve the ticket until it’s fixed and passes code review.
TC: Still no slack response. (21 hours later at this point)
TC: Logs off. Still no response (25 hours at this point)
Ignoring the prod issue for the moment…
I broke specs. No shit.
I need to talk with spec chick. No shit.
I can’t resolve the ticket. No shit!
Bitch, I told you all of this 21 fucking hours prior, and again 3 hours prior during standup. But no, I clearly “don’t communicate” and obviously have no bloody clue what I’m doing, either, so I need everything spelled out for me.
And no, I didn’t resolve the fucking ticket. Why the fuck would I if it still has pending changes? Do you even check? Ugh!
And what the fuck with that prod issue? I’m literally giving you the answer. fucking listen! Stupid cunts.
Why is it all of the women I work with are useless or freaking awful people? Don’t get me wrong, many of the men are, too, but I swear it’s every single one of the women. (Am I awful, too?)
I can’t wait to leave this sewer of a company.
Oddly still a good day, though. Probably because I talked to recruiters and sent out my resume again.14
I built a feature. I asked questions for days. Nobody helped. I built it anyway, and while I'm not sure it's quite right, it works.
During a code review, I asked for clarification on who the fuck it's for. Simple fucking question. Didn't get an answer. I did get the same crap response twice, though. It's great because it both doesn't answer my question and makes things worse.
Let's refer to this as "branding." Here we go!
Root: "Should this be changed to blue? I'm not sure who the end-user is."
TC: "should be purple, then call it something more convenient" (...what?)
Root: "Better phrasing: if we use the feature, it should match our colors and be blue. If customers use it, it should match their colors and be red. It shouldn't be both. I looked through everything again, and i'm convinced that it's only for us, so it should be blue so it matches everything."
TC: "this should be purple, and then call it something [sic] red" (...what!? also: lolcopypaste)
But like, that's wrong in every single way. It's internal, not external. Doing both makes it confusing. Doing both and calling it external is fucking stupid. Did she even read the PR? or any of my questions? ugh.
I swear, it's like arguing with a boulder and expecting it to listen. An ugly, oversized boulder that comically resembles Jabba the Hutt. No joke.
Whatever, it can be purple. Later, if someone complains that it's confusing, I'll just link them to the damned PR. Then again, almost everything here is confusing AF, so I doubt anyone will actually notice.
Screw this place. So glad I'm on my way out.6
god i hate this company's product.
Visit merchant-facing sandbox -> 404. works after a refresh.
Log into sandbox with admin account -> redirects to a different signin url -> 500s -> signin no longer works.
lol I keep getting in trouble over people taking secondhand-offense, and managers keep bringing up the same instances like I’m somehow at fault.
Look, if Alice says something to Bob, and Carol hears it and gets offended on Bob’s behalf, but Bob doesn’t? Carol should jump off a bridge.10
Yes yes yes
Let's spend countless hours writing painful spaghetti that generates a financial report, extend that spaghetti for specs, then not bother to check the amounts or status. or where it says the money went. Nope, checking non-unique names is totally good enough. We're so good at this. Ten points to the legendaries.
Let's also make the object factories not create the objects correctly, and make sure that report includes entries for orders that don't include any actual payments. Oh, their status? "Ready to send" of course! Let's send that totally valid $0.00 to nobody!
Oh, but Root. Root, root, root. You can't ADD payments to this. no no no. if you do, it'll break specs everywhere else that uses that factory! Shame on you for suggesting it.
Pssh, now you want to make a payment just for this report? Why would you do that? Our best devs have been working on this for years! What could you possibly know that they don't? No, they're perfect. Don't touch them. Just make them better, okay? No take, only throw!5
Dropping out of college because it was useless, and getting a job in the industry while continuing to teach myself.
That way I was paid to learn instead of the reverse — and I learned newer and actually useful things. I also saved time to boot.
I might not have a masters degree, but that doesn’t matter, either. Experience is always better than a comparable amount of education.
Honestly, none of the good devs I have worked with held masters degrees. To a one, they were all self-taught.10
a.name(user), # “John doe”
c.name(user), # “John doe”
e.name(user), # “John doe”
b.name(user), # “John doe”
d.name(user), # “John doe”
(Note: The comments are mine.)
See the problem? No, not the ugly code (which is actually worse than what i posted here).
It’s using the same ridiculous getter (if you can call it that) that pulls a name out of the passed user object, and then expecting each row to have that name, in order. Not that order matters when they’re all the same.
Upon inspection, all objects created by the spec have the exact same name, so the above test passes (as long as there are 5 rows). It passes, but totally not because it should: those aren’t the objects that are actually in the table. All of the specs — all 22 of them — only check for that shared name on various rows, and no other data. And it’s not like this is the only issue, either.
Fuck me these are bad.
And this guy is a senior dev earning significantly more than me. Jesus what the fuck Christ.19
The code is a freaking mess. Shared behavior, terrible variable/method naming, misleading module naming, dynamic polymorphic spaghetti, whitespace errors, no consistency, confusing even if you understand what the code is doing, ... . It should never have passed code review. It probably wasn't code reviewed.
The comments are sparse and useless. Quality level: // This is bridge.
The documentation does not exist.
Testing steps for QA are missing several steps, including setup, so actually using the feature is bloody challenging. If one thing is wrong, the feature just doesn't show up (and ofc won't tell you why).
The specs for the feature are outdated and cover only 4 of 19+ cases. And are neigh useless for those 4.
The specs for the report I'm fixing don't even check the data on the report; it just checks for one bit of data on each row it creates -- a name -- which is also the same on each row. gg.
The object factories (for specs) are a mess, and often create objects indirectly, or in backwards order with odd post-create overwriting to make things work. Following the factories is a major chore, let alone fixing or extending them.
The new type has practically zero test coverage.
The factory for the new type also only creates one variant -- and does so incorrectly.
And to top it all off: the guy who wrote the feature barely ever responds. If he does, he uses fewer words than my bird knows, then stops responding. I've yet to get a useful answer out of him. (and he apparently communicates just fine, according to my micromanager.)
But "it's just fixing a report; it'll be easy!"
Oh, fuck off.8
Just for fun, during meetings I look up “toxic workplace checklist” (and variants) and then score my employer.
So far they’ve scored 80% and higher on all lists except one.
Now that I’ve decided to leave, none of it bothers me anymore. It’s so freeing.8
Ticket user story:
“Brown Chicken Report A and B do not include rows for Blue Chickens. I want to see Blue Chickens in both Brown Chicken reports.”
“Currently, the Brown Chickens reports mentioned above do not accurately report Blue Chickens. The columns P and Q are incorrect and need to be updated. See below:
<Copy/pasted table from All Animals Report showing a White Chicken>”
Are you okay? Do you have brain damage?
(Also: Blue Chickens are not supported and do not exist)6
Hey Root. Here’s a new ticket for you. It involves lots of things you’ve never seen before, and the only person you can ask is out this week.
Hey Root. Why haven’t you been making good progress every day? Why didn’t you reach out to the guy on FTO? Clearly you can’t communicate. Give me detailed status updates twice a day at specific times, covering <exhaustive list of topics> so I know you’re working. What do you mean “no”!?
Hey Root. Stop working on that ticket, and work on this other ticket. It’s the same thing, but different. High-priority!
Hey Root. You asking questions about that ticket pissed off a legendary golden boy principal dev, and he said it’s a bad idea and that we should have assigned it to a different team, too — you know, the team who usually works on these areas. But we might still have you do it. Please work on the previous ticket that’s in the exact same area until we decide.
Hey Root. Why haven’t you gotten anything done?13
I’m updating my résumé, and want to redo it from scratch — I’ve just been migrating the same document between OpenOffice (and later LibreOffice) versions for 15+ years, so it’s pretty buggy now.
As I’m redoing it from scratch anyway, does anyone have any suggestions on what I should build it in/with instead? Is there anything that works particularly well?
I’ve been considering learning and using Latex, but I’m not sure.30
I give up trying to write this.
I'm just too fucking pissed off.
My interactions with my micromanager make absolutely no sense -- she is clearly just trying to piss me off and blame me for everything, facts and reasoning be damned.
I tried detailing this week's examples (there are lots, and it's fucking Tuesday), but. screw it.
Fuck working for (and with) her.
She's a bitchface and a thundercunt.
I'm updating my resume and fucking off out of here.
God fucking damnit i hate her.23
Micromanager: “@Root, you need to do <thing>! It’s important, and very unprofessional if you don’t. Bad things can happen if you don’t do the thing. You need to get into the habit of doing the thing.”
@Root: Already does the thing.
Micromanager’s boss: Doesn’t do the thing.
Micromanager: Doesn’t do the thing.
Team: Doesn’t do the thing.
Micromanager: “You need to work on your reputation, @Root!”16
Currently watching a bunch of drunk Irish people try different whiskeys and drunkenly banter with one another, while myself sipping Irish whiskey. It’s nice.
Hey Root, remember that super high-priority ticket that we ignored for five months before demanding you rewrite it a specific way in one day?
Yeah, the new approach we made you use broke the expected usecases, and now the page is completely useless to the support team and they're freaking out. Drop everything you're doing and go fix it! Code-complete for this release is tonight! -- This right after "impacting our business flow" while being collapsed on the fucking floor.
Jesus FUCKING christ, what the fuck is wrong with these people?
If I dropped the ball on a high-priority ticket for two weeks, I'd get fired, let alone for five fucking months.
If I was a manager and demanded a one-day rewrite I can only imagine the amount of chewing out I'd receive, especially on something high-priority.
And let's not forget product ownership: imagine if I screwed up feature planning for someone so badly I made them break a support tool in production. I'd never hear the end of it.
Fucking double standards.
And while I'm at it. Some of the code I've seen in this codebase is awful. Uncommented spaghetti, or an unreadable mess with single-letter variables, super-tightly coupled modules so updates are nearly impossible, typos in freaking constants added across sixty+ files, obviously-incorrect comments, ... . I'll have to start posting snippets to show them off. But could I get away with any of it? ha. Hell no. My code must be absolutely perfect. I hear about any and every flaw, doesn't matter how minor, and nothing can go out until everything is just so.
Hell, I even hear about flaws in other peoples' code during my code reviews. Why? Because I should have fixed it, that's why. But if I do, I get yelled at for "muddying the waters."
Just. JESUS FUCKING CHRIST.
It's like playing a shell game where no matter which shell I pick (or point to their goddamn sleeve where they're clearly hiding it), I get insulted for being so consistently useless, and god damn, how can I never find the fucking pea or follow the damned rules? I'm so terrible and this is why "nobody trusts me." Fuck you.
I'll tell you why I can't find your damned pea: IT'S RATTLING INSIDE YOUR FUCKING HEADS, you ASSHOLE FUCKING IMBECILES.
That's right: one pea among the lot of them.
goddamn I am fucking pissed off.8
Root has standup.
Root: I had no ticket yesterday morning, so I followed up on <TicketA> with <PersonA> and updated it in Jira and linked its related tickets; talked with <PersonB> about <TicketB>, and reviewed code review comments on <TicketC>, and thought about those while looking into the CI spec failure on <TicketD>. I collapsed for 3 hours before fixing it. Halfway through the collapse, I talked with <PersonC> on <TicketC> CR comments and the spec issue in <TicketD>, then went to lay down again. Afterward, I solved the spec issue in <TicketD>, and started on the new ticket <TicketE> before calling it a day. Plans today are to <…>.
Manager, in private: I need you to proactively let me know if you’re taking long breaks and aren’t working as this impacts business flow.
My update was four times longer than the others’ despite her not giving me a ticket to work on. I responded to slack while I was collapsed on the floor and discussed tickets. And, after I recovered, I went back to work to finish my 8h shift. But this isn’t good enough? And I need to let her know in advance when I’m going to collapse and be a bloody mental zombie for hours? It would be amazing if I knew. I barely have a few minutes notice, and that’s only if I’m really paying attention and looking for signs.
And (conjecture) she probably still thinks I’m not performing well enough. “Affecting our business flow” probably means she’s angry I didn’t talk to other people about low-priority <TicketE> yesterday while I was laying on the damned floor.
Goddamn I hate her.13
ahaha. The white Slack emoji skintone is frowned upon at $work, and we're encouraged to use the yellow one instead to be "inclusive" -- but fear not, the brown ones are totally fine.
Gotta love woke companies.22
bitchface micromanager keeps telling me i don't communicate enough, don't do enough, am not fast enough, etc.
So i've been sending her a weekly summary of ~50 bullet points of things I did during the week, issues encountered, workarounds found, research findings, who i talked to, etc. all organized by task with links to the tickets.
My work volume hasn't increased (probably decreased, actually) but it certainly looks like I'm doing a lot. probably because i am? but she doesn't listen during standup, so... victory by a hundred bullet points it is!16
I tried finding a gem that would give me a nice, simple diff between two hashes, and also report any missing keys between them. (In an effort to reduce the ridiculous number of update api calls sent out at work.)
I found a few gems that give way too complicated diffs, and they're all several hundred lines long. One of them even writes the diff out in freaking html with colors and everything. it's crazy. Several of the simpler ones don't even support nesting, and another only diffs strings. I found a few possibly-okay choices, but their output is crazy long, and they are none too short, either.
Also, only a few of them support missing keys (since hashes in Ruby return `nil` by default for non-defined keys), which would lead to false negatives.
So... I wrote my own.
It supports diffing anything with anything else, and recurses into anything enumerable. It also supports missing keys/indexes, mixed n-level nesting, missing branches, nil vs "nil" with obvious output, comparing mixed types, empty objects, etc. Returns a simple [a,b] diff array for simple objects, or for nested objects: a flat hash with full paths (like "[key][subkey][sub-subkey]") as top-level keys and the diff arrays as values. Tiny output. Took 36 lines and a little over an hour.
I'm pretty happy with myself. 😁6
Them: Root, you take too long to get tickets out. You only have a few simple ones. You really need to rebuild your reputation.
Also them: Hey, could you revisit this ticket? Could you help ____ with this other ticket? Hey Root, how do you do this? Root, someone had a suggestion on one of your tickets; could you implement that by EoD? Hey Root, i didn't read your ticket notes; how do you test it? Hey, could you revisit this ticket for the fourth time and remove some whitespace? Hey Root, someone has non-blocking code review comments you need to address before we can release the ticket. Hey Root, we want to expand that ticket scope by 5-6 times; still labeled a trivial feature though.
Also them: Super easy ticket for you. Make sure you talk with teams A, B, C, D, E and get their input on the ticket, talk with ____ and ____ and ____ about it, find a solution that makes them all happy and solves the problem too, then be sure to demo it with everyone afterward. Super easy; shouldn't take you more than a couple days. Oh, and half of them are on vacation.
Also them: Hey, that high-priority ticket you finished months ago that we ignored? Yeah, you need to rewrite it by tomorrow. Also, you need to demo it with our guy in India, who's also on vacation. Yes, tomorrow is the last day. (The next day:) You rewrote it, but weren't able to schedule the demo? Now you've missed the release! It's even later! This reflects very poorly on you.
Also them: Perfect is the enemy of good; be more like the seniors who release partially-broken code quickly.
Also them: Here's an non-trivial extreme edgecase you might not have covered. Oh, it would have taken too much time and that's why you didn't do it? Jeez, how can you release such incomplete code?
Also them: Yeah, that ticket sat in code review for five months because we didn't know it was high-priority, despite you telling us. It's still kinda your fault, though.
Also them: You need to analyze traffic data to find patterns and figure out why this problem is happening. I know you pushed the fix for it 8 months ago, and I said it was really solid, but the code is too complex so I won't release it. Yeah I know it's just a debounce with status polling and retrying. Too complex for me to understand. Figure out what the problem is, see if another company has this same problem, and how they fixed it.
Yep. I'm so terrible for not getting these tickets out, like wow. Worst dev ever. Much shame.
LF work, PST.14
Rename a variable for clarity.
Third-party lib behaves differently, breaks things.
Change the var names back.
Stash changes and checkout previous commit.
Diff with stash.
No notable changes. (some comments, ...)
Checkout branch again, pop stash.
WHY CAN'T YOU JUST BUILD THE BLOODY QUERY WITHOUT DOING FANCY UNNECESSARY SUBQUERY SHIT?!
OR PUT THE LIMIT WHERE IT MAKES SENSE AND DOESN'T CAUSE MYSQL TO TELL YOU TO FUCK OFF?
WHY WHY WHY WHY WHY
THIS ISN'T HARD18