Friday, August 23, 2019

Anxiety Tech 2019: Neurosquads and Floor Parties

As this is my umpteenth attempt at curating a blog, I promised myself I was going to keep it very professional and elegantly technical. I am, as many of you may be expecting by now, about to totally eff that up.

But hey, I really did go to a tech conference. Anxiety Tech 2019 was a full day of big-bear-learning-thangs about the applications of technology on issues related to mental health. There were workshops and Emotional APIs and free wifi and everything. The thing is, it's really the lead-up to the conference and my experience once I finally made it there that stick out in my mind.

My company put together a useful Twitter bot, Tech Daily CFP, which looks for calls for presenters at tech conferences and RTs them all in one place. One of these RTs was for a conference I hadn't heard of, Anxiety Tech -- but they mentioned mental health, which is one of my hot-button advocacy issues, so it stood out strongly to me. Though I've never given a full-length conference talk before, I submitted a talk, This Is Not the End, at the insistence of Ben and others who were present for my eight-minute panic attack of a security standup comedy lightning talk at CppNow 2019.

And then I totally forgot about it. I don't actually even remember writing the abstract, but I know as I was pressing the "submit" button my brain was like "haha, this is crap, they're never gonna let you talk."

A while later I got an acceptance letter and my reaction was "Oh wow I got accepted OH FUCK I HAVE TO GO TO NEW YORK CITY."

The last time I was in Manhattan, I was eight years old, and I distinctly remember being very unimpressed with the myriad smells, visual overstimulation, and noise. Through a comedy of errors I also found out that Ben, my usual travel-handler (because it's a crapshoot as to whether I can cross a street without zoning out and getting hit by a car, and I can't understand transportation schedules on my own), wasn't planning on going with me. So not just Manhattan, but Manhattan by myself.

Those who've been following my exploits over the past several years know that I suffer from a whole bunch of fancy mental illness acronyms, like MDD (major depressive disorder), GAD (generalized anxiety disorder), and CPTSD (complex post-traumatic stress disorder). Leaving my basement usually requires deep breathing and a pep talk. I can do the route from Denver to my parents' house in Los Angeles because I've made that trip so many times, but going to what is essentially a new place with no one to look out for me so I can stand up in front of a bunch of people and brain-dump at them for half an hour?

Full disclosure: I seriously considered faking sick because this was just too damn scary and what had I gotten myself into and why did I do this to myself? Unlike the C++ conferences I attend, I didn't know anyone else going. But I had made a promise to the lovely and wonderful organizers, and it was for an important cause, so I spent a few months having full-on anxiety attacks and accusing Ben at top volume of abandoning me and crying myself into cluster headaches.

The conference organizers, Jamund and Kari, noticed the first of many Twitter meltdowns and immediately sprang into action to find a way to help, because they don't just talk about mental health, they actually do something about it. It was decided that I would have a walking buddy between my hotel and the venue -- only 0.1 miles, and yet when your brain is telling you that you're going to get stabbed or lost or run over by a truck trying to get there it seems like an impossible distance.

Somehow I made it to the airport. I made it onto the plane. I even ended up sitting next to a software engineer and gamer who was so freaking awesome we spent the whole four-hour flight talking and swapped contact info before going our separate ways. This was a Good Sign, but there was still the hotel check-in to contend with.

Oh. Check-in went fine. Well.

I still had to get to the conference the next morning, though. I was originally supposed to walk with Dani Donovan, whose ADHD comics have been frequent retweets of mine for ages, but due to her own nightmarish battle with last-minute cancelled flights and rescheduling, she set me up with her friend and fellow attendee Jessica. I expected she'd probably roll her eyes at me, a fully grown woman, needing an escort to a conference.

Yeah, instead we talked the whole way there, ended up being friends by the time we hit the front door, and spent the rest of the conference hanging out.

I don't remember how Robo started hanging out with us too but he's from my hometown and is doing very good work and I'm proud of him so yeah, the squad was now up to three members. During one of the breaks we found a bare patch of floor and sat down to eat snacks. Then Tori saw us and wisely knows the golden rule of "people who sit on the floor are the very best people" and joined us. Four.

I gave my talk. Mikael stopped me afterwards to say that he liked it. We walked and talked and ended up with the rest of the group and now we were up to five.

Poor Dani finally made it to the conference and then we were six -- Neurosquad, assembled! Six people who communicate in the same way, don't begrudge each other for talking too much, or for having their stuff strewn around them while they're digging for something else, or fidgeting during a talk, or say something awkward, or flail and knock something over. Who can just chill out and be their genuinely good selves together and run down the hall shrieking "OH MY GOD BROWNIEEEEEEES" because there were leftovers and brownies are delicious, thank you very much.

As a kid, I was left out and punished constantly because I behaved differently than the other kids. I tried, I really tried. But somehow I would always end up messing up and being sent to the principal's office or being sent to my room. I even remember telling my mom one day that being "good" was way too hard. My impulse control is shit. I imitate noises I like and walk down the hall softly singing or making little "boop boop" noises to myself. I forget what I'm saying halfway through a sentence. My train of thought is impossible to follow.

And yet now, at age 32, I was finally accepted completely as I am by a group of people who literally just felt right. None of the normal fear or anxiety I usually have when meeting new people or even being around people I already know was present. The thing that was formerly the scariest thing I've ever done ended up being the greatest thing I've ever done and for the first time in my life I seriously considered that maybe I wasn't so broken and strange as I thought I was.

Also, I now know that I need to get evaluated for ADHD when I get home, because apparently I'm pretty textbook, and literally every weird quirk of mine is explained by this.

So yes, I should be talking about tech and about my own talk but the point I wanted to get across here is that this is the greatest experience I've ever had at a conference and if I hadn't asked for help or followed through with attending I would have lost out not only on these six amazing people who actually made me feel like part of a group, but the countless other sweet humans I met today and hope to meet again.

Thursday, August 15, 2019

The Destroyer, Hello World

I try to keep an empty testing queue as much as possible. When something hits that sweet column o' mine on JIRA, I usually drop everything to knock it out right then and there so that it doesn't build up to Towering Inferno levels. Typically it only takes a few minutes per story to give it a good component testing once-over, and my team is adept enough at what they do that I very rarely have to kick anything back to them.

On this occasion, it was nearing the end of my self-imposed work day (hip hip huzzah for flexible hours and remote work) when I decided to quickly knock out four bug fixes that had crossed the threshold between Code Review and Testing. Yawn.

Bug fix 1: not in the environment, even after a hard refresh and cache/cookie clear. I left a note and kicked it back to In Progress.

Bug fix 2: ...also not in the environment. Hm. Okay, strange, given my team's typical success rate, but whatever, we've all been a little distracted lately due to shifting from a recently completed Giant Project back to our normal duties.

Bug fix 3: Nope. Okay. Something's amiss. I've worked closely with these devs for over a year now -- starting as solely QA and editorial, and moving into a junior dev position myself -- and there's no way they're going to miss 3/4.

To Slack I went. "Hey, these changes ARE supposed to be in the test environment and ready to go... right?"

"Should be. Check the pipelines."

Sure enough, two PR merges had stalled out due to queue order -- since the pipelines run after the merge itself, this was the day I discovered that JIRA will still show them as successfully merged even if there's a pipeline fail -- and wouldn't you know it, they were the PRs containing the fixes I needed. I clicked Rerun and prepared to resume my ez-mode work day.

That's when the yelling started.

Line after line of errors and warnings started showing up in the logs, which yes, I do keep up and stare intently at the entire time because we all know that a status bar never actually completes unless you're watching it. Hoooooo boy, so much for that quick end to the workday.

Once both pipelines had gloriously failed I went back through the logs to see what had happened. It looked like a bunch of packages related to our cloud functions were out of date. Nothing an npm update can't fix, I figured.

git checkout master
git pull
git checkout -b cloud-function-update

And now the magic could begin. It was supposed to begin. But attempting to update the outdated packages was triggering a cascade of failures in others. TSLint started shrieking about a laundry list of newly-deprecated code. This... was above my current pay grade.

I pulled my mentor-slash-boss Martine into a video conference so I could show her what was going on. The first issue was that I'd accidentally deleted a closing curly brace, reminding me of why I prefer Python to JavaScript in the first place. But that only fixed one of the many errors filling up my terminal.

I'd like to tell you that we figured out the issue immediately afterwards, but it was another two or three hours of ctrl-clicking file paths and looking for squiggles and beverage refills and swearing before we'd made significant process in whittling down the crisis -- no small feat considering that every time we smashed one error, another would take its place. Our eyes were starting to cross when we finally got the answer we were looking for.

"...Wait, what the hell is this hello-world.ts file it's talking about?"

cd functions/src

Sure enough, hello-world.ts was quietly waiting to be discovered in our sidebar hierarchy.

With all of the care usually reserved for opening the Ark of the Covenant, we cracked that sucker open to find a very important comment starting on line 1:

/* This code is generated as part of the Google Firebase cloud function setup and is intended for demo purposes only. It should never be deployed. */


According to GitLens, hello-world.ts and its equally useless cousin, add-message.ts, had been hidden away in our cloud functions since 2:36 a.m. on December 22nd, 2017, the date that it was finally set up and ready to go. It painted a very clear picture of my other boss, Michael, hammering at it all day and all night to get things working, until that glorious moment in the wee hours of the morning when all tests passed and he could finally get some sleep. There was no fanfare to indicate that these demo files had been added. They were two folders deep in the main project files, hardly noticeable unless you knew exactly what you were looking for. So there they sat, untouched, for two years, over three breaking changes to firebase-tools, until the third time was, as they say, the charm, and all Hell broke loose, because even though the demo files were commented out in index.ts, build was causing them to deploy anyway. And since the demo code wasn't being automatically updated with everything else...

Hello World, friend of beginning programmers everywhere, had absolutely wrecked our shit, badly enough to insert :clap: emojis between each word in that statement.

We very quietly deleted both files and re-ran npm run build. Pass. TSLint. Pass. Emulators. Pass. After a nerve-wracking git push, manual testing of functions in our test environment revealed everything in working order.

There was a moment of silence as we watched normal operations resume in our build and deploy processes.

"So... can I like, write this up for my blog?"

"Hell yes you can."