SkillsAWS and Azure deployment/automation, Python, Go, Java, Linux Shell, PowerShell
Joined devRant on 12/13/2018
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
What is the smallest, most innocuous mistake you've made that had huge consequences later?
I'll start: today I made a one-letter typo in a configuration file, which set off a ridiculous comedy of errors that culminated with me tearing down and rebuilding a whole AWS account.2
Today I played with GitHub Actions. Since I couldn't test anything without making a commit and pushing it to GitHub to trigger the workflow, my commit history now chronicles my slow descent into madness. Thank God it's a private repo. I'm gonna squash it if I ever make it public.
This gem is from hour two of my four-hour struggle:6
If I weren't a dev I'd be doing IT support.
Back in 2018 when I was doing level 1 support as part of an internal IT call center, I applied for two jobs elsewhere in the same company, one doing level 2 support and the other in a different department doing cloud infrastructure engineering or whatever they're calling it now. I almost took the support job because the cloud job was really dragging their feet with my final interview with my boss-to-be.
I probably should have taken that as a sign of things to come, since it ended up being such a pain to work for him until our team got moved under a new manager.
The support team starts pressuring me for an answer and I eventually fire off an email to the cloud guys saying, "I already have a job offer and I can't delay any longer. If I can't be interviewed soon then I will have to withdraw my application."
Got my interview the next day, and he made the offer the same day. Turned out to be a very good choice in the long run, but man were the first couple years full of massive frustrations.
Worst coding interruptions are, by far, instant messages. Especially messages I don't care about. People who tag an entire channel when they shouldn't. The Diversity and Inclusion channel that everyone has to join that tags the entire channel, all 2000 members, at least once a day to share some blog post nobody wants to read. Other employees sending "Hi" to me and expecting an immediate response even though I don't know what they want yet. People who think Slack is an alternative to our support ticket system.
I am often tempted to just sign out for the day, but unfortunately some of the messages are actually important...8
The last person who might have taken offense at this recently quit, so time for a consequence-free rant. I just want to say...
Fuck absolutely every single one of my teammates who quit this year. Fuck your shitty, undocumented spaghetti code from hell that the rest of us will have to rewrite because it's utterly broken and functions mostly on prayer and luck. Fuck the 1000+ git repos we'll have to rename so we can even begin to tell them apart. Fuck your complete lack of any sort of processes or procedures or standards. Fuck the person who hated tickets and decided we could just have hundreds of people ask us for help on Slack whenever they need it. Fuck the people who quit because we got a new manager who told us we need to support the applications we build. Fuck the person who said "I'm leaving because I want to move forwards instead of backwards" as if fixing bugs in the code YOU WROTE TWO WEEKS AGO is really moving backwards. Fuck the two people who designed their own separate pipelines and then used both without bothering to debate and pick the better one (spoiler: both are completely undocumented and broken as hell).
I hope your various new employers figure out that your strategy of covering shit with gold paint doesn't change the smell.
Now the rest of us have to fix it all, and we're probably going to start by demolishing most of it so we can rebuild it from scratch.12
I've actually had mostly good instructors for CS. Or at least mediocre. The worst teacher I had was actually my Algebra II teacher in high school. She taught by reading, word for word, from our textbook. She would copy the example problems from that chapter onto the whiteboard. And then give us the rest of class to work on homework. She was basically a Text-to-Speech program for our textbook.
We all joked that she was drunk and the one locked cabinet in her classroom contained liquor. A year after I had her class she was fired. For drinking on the job. The joke turned out to be 100% true and they actually did find alcohol in the locked cabinet.
Everything is "critical priority" all the time. Every new project is the most important project in the entire company. Every request that comes in has to be handled immediately. I have a good manager now who fights back against the deluge of critical work, but for my first year in my job I had a different manager who would bend over backwards to appease everybody, over-promising constantly.
I eventually started asking questions like "Which project are we de-prioritizing to accommodate this?" or "Is X more or less important than Y?" and then I would focus entirely on whichever project he identified as being the most important, and not touch anything else until I was done. Basically forcing him to prioritize our work.
I almost quit over a few of these issues, but I stuck it out and eventually our team came under new management, and now our manager is the one asking those questions instead of me. As she should be. Her favorite response when someone says a task is critical is "How critical? How much money will the company lose per day if this is late?"
Most of the time, the answer is somewhere in the range of "nothing" until a couple months after the deadline. So we set a much later deadline and get the work done right.6
Most useless meeting?
I once went to a meeting where people spent half an hour discussing when to reschedule the meeting that we were in because we couldn't have it then even though nobody was absent. The actual rescheduled meeting was also half an hour long, and could have occurred during the time when we discussed when the meeting should occur.
I've been to a lot of useless meetings (I still think that most meetings I attend could have just been an email chain or Slack conversation), but that one takes the cake.3
I deployed docker on a VPS a few weeks ago as a sort of learning experience since I haven't really worked with containers much before. Today I learned that docker doesn't like firewalls.
Or, to be more specific, it adds rules to iptables that are applied prior to ufw rules, allowing external connections that I really didn't want to allow. If I don't explicitly specify that a port is to be published only to localhost, then it punches a hole through my firewall without telling me.
Which means that all of my containers running behind an nginx reverse proxy that auto-redirects to HTTPS... were also accessible directly via HTTP.
I'm... trying to think of a reason why this kind of default behavior was a good idea, but I'm drawing a blank.
I see a lot of hatred for Python all over the place, so I have to ask: Why? What do people hate so much about Python? It's fantastic for my use-case (interacting with and managing AWS resources), so is it just a case of "good for this one thing, bad for everything else," or something different?25
My dad bought me a book on QBASIC when I was around 7 or 8 years old, and within a month I decided I was going to be a game programmer when I grew up. That's not where I ended up, but that's how the journey started. My parents were both pretty supportive of that decision.
What my ADHD brain looks like to an outsider:
My media player doesn't support ordered chapters, so now I have FreshRSS running on my VPS.
The actual mental process:
> MPC-BE doesn't support ordered chapters with the built-in filters
> I should install the third-party LAV Filters
> Not available on Scoop and I'm never touching Chocolatey again
> I wish I had Linux on this PC instead of Windows, so I could have a proper package manager to handle updates, but I digress
> Sure would be nice if I could find a way to know when this updates.
> Actually, tracking versions for multiple GitHub repos would be really nice.
> I would just subscribe but my email inbox is a mess already and I'd probably fail to see the emails
> GitHub Release pages have their own Atom feeds!
> I don't currently use any feed readers
> Maybe I should self-host a feed reader
> Set up FreshRSS Docker container on my server
> Actually installed the LAV Filters to solve the original problem.9
A few days ago I noticed that KDE Plasma was taking ages to launch. Like a minute or two of black screen as it loads, then a few more minutes of terrible slowness before things start to respond as they should. I assumed KDE was at fault and was just too bloated, until I recalled that my root partition was on an old 7200RPM HDD. I had completely forgotten since I dual boot and was primarily using Windows (which is on a separate SATA3 SSD) for the last few months.
So I replaced the HDD with an NVMe drive.
HOLY CRAP. SO FAST.
Cold boot to fully-responsive KDE in all its bloated majesty in less than 15 seconds.6
Memorable coworkers? It's a toss up between the guy who got fired for calling a department director a c*nt on a recorded phone line loud enough for the whole call center to hear it, and the guy who reported me to HR for not including him in a private Slack conversation because it had nothing to do with him.
People are weird.2
My dad taught me basic algebra when I was a kid (I think 7-8). Then he taught me BASIC and within a month I decided I was going to be a game programmer when I grew up. Not quite where I ended up, but that's how the journey started.
An hour of "WHY ISN'T ANYTHING WORKING" followed by ashamedly squashing 20+ local commits and actually remembering to git push the result that time.1
Proudest bug squash? Probably the time I fixed a few bugs by accident when I was just trying to clean up an ex-coworker's messy code.
So I used to work with a guy who was not a very good programmer. It's hard to explain exactly why other than to say that he never really grew out of the college mindset. He never really learned the importance of critical thinking and problem-solving. He did everything "by the book" to a point where if he ran into an issue that had no textbook solution, he would spin his wheels for weeks while constantly lying to us about his progress until one of us would finally notice and take the problem off his plate. His code was technically functional, but still very bad.
Quick Background: Our team is responsible for deploying and maintaining cloud resources in AWS and Azure. We do this with Terraform, a domain-specific language that lets us define all our infrastructure as code and automate everything.
After he left, I took on the work to modify some of the Terraform code he'd written. In the process, I discovered what I like to call "The Übervariable", a map of at least 80 items, many of them completely unrelated to each other, which were all referenced exactly once in his code and never modified. Basically it was a dynamic collection variable holding 80+ constants. Some of these constants were only used in mathematical expressions with multiple other constants from the same data structure, resulting in a new value that would also be a constant. Some of the constants were identical values that could never possibly differ, but were still stored as separate values in the map.
After I made the modification I was supposed to make, I decided I was so bothered by his shitty code that I would spend some extra time fixing and optimizing it. The end result: one week of work, 800 lines of code deleted, 30 lines added, and a massive increase in efficiency. I deleted the Übervariable and hardcoded most of the values it contained since there was no possible reason for any of them to change in the future. In the process, I accidentally fixed three bugs that had been printing ominous-sounding warnings to the console whenever the code was run.
I have a lot of stories about this guy. I should post some more of them eventually.2
Most awkward recruiter interaction was probably when I had to tell a staffing agency that I didn't want to work for them because I had already worked for them and left.
I got into IT by working for a staffing agency and I was contracted out to a large company's IT call center. Doing the usual sort of level-one tech support stuff. After my contract term ran out (and upon reminding my boss that she wouldn't be my boss for much longer if she didn't hire me away from the staffing agency), I was hired on full-time.
Six months later I left the call center and moved on to a cloud server development job in the same company. Not long after that, I got a message on LinkedIn from the staffing agency, offering to hire me on as a contractor working for one of their largest partners in the area.
I responded asking for more details, just for fun. The company I'd be working for, etc. Then I had to inform them that I had in fact previously worked for their firm, and now worked at the company that they were offering to contract me out to, and earning a fair bit more money than they were offering.
They didn't even look at my employment information on LinkedIn before sending the InMail. Just glanced over my skills, saw the magic buzzword "devops," and sent me a message.3
I used to have imposter syndrome when I first started at my current job. But then I discovered that one of my coworkers was an actual imposter. He didn't lie on his resume or anything but he was basically incapable of thinking for himself. If there was no step-by-step process to follow, he'd spin his wheels for weeks before doing it in the worst possible way, refusing all offers of assistance from the rest of our team.
After he quit and the true extent of his incompetence came to light, I no longer felt like an imposter.1
So today I logged into devrant and noticed that all of the ++ buttons were gone. Apparently the Fanboy's Annoyances filter list (which I enabled recently in AdGuard) includes the "plusone" CSS class, which is the class name Devrant uses for the ++ button. Whoops.
I think I might remove that filter list entirely. There's a lot of other very non-specific stuff it blocks that might break a lot of websites.3
Haven't started this project yet, but I've been considering ordering another Raspberry Pi and turning it into a voice assistant using Mycroft. I've been wanting to play around with IoT stuff for a while, and since I'm practically confined to my apartment for the foreseeable, there's no better time to get started.
Why is it that an issue is only critical-priority until the person who's raising the biggest fuss has to do something about it?
I was notified that a website hosted in AWS went down overnight and never came back up. I was then bombarded with email after email after email while I logged into our AWS account and poked around. I'm responsible for cloud infrastructure stuff, like VMs or virtual networking or security or whatever, not the actual applications running on said infrastructure. Once I confirmed their EC2 instance was reachable and I could login with SSH, I told them they'd have to fix their application.
They told me that they had no backend developer on their development team. I'm still getting a deluge of emails from multiple people on this team and their managers and managers' managers and so on.
"Perfectly understandable," I told them, though it was anything but. "You should probably look into obtaining one."
The emails stopped immediately. I assumed they were handling it and closed my ticket and moved on. But apparently I was wrong.
Six weeks later, the site is still down, they still have no backend dev, and I'm convinced that they were lying to me when they stressed the importance of this web app because now that it's no longer my problem, not a single person seems to care that it's still broken.3
I'm not a fan. Harder to collaborate and discuss things with coworkers. I'm constantly fighting the urge to turn towards my gaming pc and start playing something. I only have one monitor instead of the 2 I have in the office. I suffer from depression and the social isolation will definitely exacerbate that. The commute to my office is less than 15 minutes so I'm barely saving any time there. Pretty much the only benefit for me is not needing headphones to listen to music.2
Most unusual place I've coded would probably at a bar while utterly wasted. I fixed a production outage and even got on the phone with tier 1 support when they reported the issue.4
I don't like interview coding challenges. At the same time, given the skill level of some developers I've worked with who work for a contracting firm and presumably didn't get a coding test in their intervies...I understand the necessity. Some people are so bad at coding that even the simplest of coding tests can show how bad they are.
I think my favorite is being given a simple task to write code for. And that's it. No "use this specific language feature to do this specific thing". Just a task and that's it.
I got a really simple coding test once. I had to reverse a string. I could choose any language. Presumably they wanted to see loops or something, but I just used Python and did this: string[::-1]
I got the job.3
My goal for 2020: actually finish a personal project.
Last year, I built 25% of a website, 10% of a companion app for a video game, and half of a command-line utility. I would really like to finish an entire project this year, but considering that I just started a new project that promises to be huge and unwieldy, that will probably have to wait for whatever project I try next after burning out on this one.1
The one I use the most often is the AWS API (usually via a wrapper like boto3), but I hate it so it's not my favorite.
Ive been playing with the Bungie.Net API for a while, with the end goal of building some kind of dashboard for information about the various weekly events and such in Destiny 2. I guess that's currently my favorite.
One of my former coworkers was either completely incompetent or outright sabotaging us on purpose. After he left for a different job, I picked up the project he was working on and oh my God it's a complete shitshow. I deleted hundreds of lines of code so far, and replaced them with maybe 30-40 lines altogether. I'm probably going to delete another 400 lines this week before I get to a point where I can say it's fixed.
He defined over 150 constants, each of which was only referenced in a single location. Sometimes performing operations on those constants (with other constants) to get a result that might as well have been hard-coded anyway since every value contributing to that result was hard-coded. He used troublesome and messy workarounds for language defects that were actually fixed months before this project began. He copied code that I wrote for one such workaround, including the comment which states the workaround won't be necessary after May 2019. He did this in August, three months later.
Two weeks of work just to get the code to a point where it doesn't make my eyes bleed. Probably another week to make it stop showing ten warnings every time it builds successfully, preventing Jenkins from throwing a fit with every build. And then I can actually implement the feature I was supposed to implement last month.6
Fuck the Fourth of July.
I was already feeling pretty unpatriotic after all the terrible things the USA has been doing lately, and then to top it all off, they closed down almost every street within a one-mile radius of my apartment just because I happen to live near the place where they're shooting off fireworks. I spent the evening with my girlfriend, enjoying a nice dinner and sort of forgetting it was even really a holiday, then got in my car at 9:00 expecting to be home by 9:30. Nope. I spent over an hour driving in a huge circle around my apartment, searching for even one single road that the police hadn't closed to traffic. Finally managed to get into the area on a back road and get home, but it took so long that I went through all five stages of grief before I got home at 11:00.
They also closed the nearest bridge across the river so I couldn't go shopping for groceries today, either. My pantry is almost completely empty. At least I'm working from home tomorrow so I'll have time to buy food then.8