thoughtwisps One commit at a time

Hello and welcome to thoughtwisps! This is a personal collection of notes and thoughts on software engineering, machine learning and the technology industry and community. For my professional website, please see race-conditions. Thank you for visiting!

to want

I want things I don’t need. I need things I don’t want. I’m addicted to checking my Twitter feed. Click, click, click. Refresh. Log off and log right on. More meaningless scrolling, cat emojis, an interation on the Ariana Grande ‘thank u, next’ meme, another rendition of ‘Ladies, if he never answers your texts’ meme. It’s meaningless, but calming. When reality offers nothing but one crisis after another, one rejection after another, that eternally scrolling thing promises to at least to entertain. Hey, we can’t fix the world, but at least we’ll have emojis, memes and GIFs to checkout while we roast in a warming planet.

duplicity

I’m tired. I’m sorry if that is a boring way to open a post, but it’s the truth. The truth of the feeling that’s comfortably settled itself somewhere deep within my body and won’t let go. Fractal tentacles of black inky liquid curling around my insides.

Maybe I should have used fatigue. A more elegant word. Tres French. Tres chic.

Or exhaustion. Maybe I should have used that. On a recent Tube journey through the hellscape that is rush hour London, the word popped into my mind (no place better to engage in a little mental gymnastics than the armpit of your fellow rush hour commuter). Exhaustion. Like exhaust but with an extra -ion. The condition of being an exhaust. A human exhaust.

I suppose that is an apt description of how I feel. A human exhaust. Everything else has dissolved.

I went to sleep in the early hours of the morning struggling to keep my sleepy eyes awake as I typed the last touches on a reverse engineering writeup I’d promised to deliver a few days earlier. I knew the writeup would have been better if I had just left it to the morning, proofread it again and then hit send, but the guilt- the guilt of promising to deliver and then failing - would not let me be and I suspected would not have let me fall asleep. The sense of self-worth is tied too closely to achievements. I’ve been failing spectacularly at the achievements part lately, so the guilt is even more acute.

(Warning: start of rant - you may wish to skip to another post).

In any case, this post is not about our broken models of human value, the London Underground system or exhaust, though I could probably fill these pages with ramblings about all three. Instead, I’m going to talk about something that was making the rounds on Twitter yesterday: the maintainer of a very popular npm package had stepped down and transferred control of the package to an interested third party that had been making contributions to the repository. This kind of thing happens in open source projects and is nothing out of the ordinary. The new maintainer then integrated some code into the package that turned out to contain a malicious payload. Users (big companies among them) were affected. Cue: initiate absolute clusterfuck where the previous maintainer gets shit for transferring the ownership without ‘proper vetting’ (based on the comments I read, no one actually suggested how to properly do this). I was glad the conversation was quickly steered into the direction of open source sustainability problem, because yes, we still have a problem of paying maintainers unless they work for a company that supports an open source project financially or allocates company time. Strangely, most companies, including the billion dollar behemoths don’t have a problem with profiting from open source projects. Anyway, people far more eloquent and knowledgeable about this topic have made better writeups of the situation and why it needs fixing.

The security breach and the ensuring cluterfuck reminded me of a conversation I had a few weeks ago with a hiring manager, who gently asked me about my GitHub and the kinds of contributions I had been makind to open source. I could see their face fall when I described contributing to documentation and community in a few projects. Apparently, it’s only code that counts. Good luck learning how to use an open source project without good documentation. I was then gently prodded to make contributions to the company’s open source project, which would ‘be good for getting hired in the future’.

I’m not going to go into how this ‘github as your cv’ hiring practice disadvantanges people who may be excellent in their day jobs, but don’t work on open source full time and have other obligations outside of work (family, hobbies, carer duties, civic duties, life?) - others have done so already and far more eloquently. What I am going to say though is this. Everyone seems to want to see open source contributions until you go to work for them. After that, it’s going to be ‘jump through these 50 legal hoops we’ve setup to prevent you from open sourcing any code’.

/rantover

Now it’s back to our regularly scheduled programming.

failing fast

Failing fast is usually a good thing in application code. Much less so when it comes to job applications. And yet here we are. The perils of checking one’s email right before bed only to discover that the job application one spent hours polishing has been rejected within hours of submission.

It was a damn good opportunity too. A great company and a great set of problems to work on. As much as I like to pretend I can take a good slap-in-the-face rejection as well as any seasoned programmer (who once, many years before, used to regularly submit my badly written thinkpieces and fiction to literary journals), it hurts. My brain has dug out the familiar ‘Compilation of Epic Fails’ reel from the Forbidden Archives and all those moments are now gleefully playing in my mind. Not a good recipe for sleep. So perhaps it’s time for some more thinkpieces.

Any given application is like a garden of forking paths. Data flows through functions, taking left or right turns at if-junctures, looping about in loops, before finally exiting the application boundaries. When application developers design these convoluted gardens, we often make many assumptions about the paths that come before the particular segment we are working on and what the data will look like once it has traversed those and reached our little nook of the garden. We build our own abstractions and instructions based on those assumptions and often, our utopian views of the world upstream from us, is flawed. We rely on the gardeneres who designed the paths before us to trim the weeds and lay enough traps so that any rogue bits and bytes don’t reach our pristine constructions. Laying these traps are what we speak about when we speak about failing fast in code. In Python, my current language of choice, it is a common task to lookup a value in a data structure known as a dictionary (though other programming languages may know it as a hashmap) using a key. Sometimes, we may not know before runtime whether a given key will exist in the dictionary, so to help out programmers in these situations, Python allows for two ways to look up dictionary values. The first

my_dictionary['key']

will fail if the key key does not exist. The second

my_dictionary.get('key')

will not. It will return to the caller the value of None and the program will continue on its merry way. If the value of whatever is stored at key in this dictionary is critical to the functioning of the rest of the program, it would be best to use the first method and force the program to fail fast. Otherwise, the downstream error that would result from allowing the None value to propagate might be cryptic and result in many wasted braincycles of debugging.

Is there a life equivalent to ‘failing fast’? Is there some test one can carry out to determine if it’s worth continuing on this path or if one should just throw in the towel? A few years ago as an undergraduate I worked in a chemical physics lab for the summer. While I wasn’t zapping dye molecules with ultrafast lasers (a story for another time!), I shared an office with a postdoc, who told me about her strategy for failing fast. She told me that she would solicit honest feedback about her work from her supervisors and ask if they thought she could make it as a scientist. I wonder if I should start doing the same and if I could take the answers whatever they might be.

Hearing that you’re just not cut out for something you really really like doing has never been easy (even if deep down inside you already know you’re not cut out for it). When I was in high school, I got really into mathematics. By sheer chance, I’d done a few problems from an advanced book on sequences and series and fell in love with the problems. They were addicting to solve! That same month, my mathematics teacher returned our exams and looking at the class told us, ‘There are no diamonds here.’ I think she meant that none of us were going to be the kind of star students that score high on math olympiad questions. I already knew this. I was never going to be able to do research in math or compete in the olympiad and yet, I felt a bit deflated. Why try if the person teaching me already thinks it’s a lost cause? Later, when the teacher tried to encourage some girls from the class (weirdly enough, me too) to sign up for the math olympiad, I flat out declined. There are no diamonds here.

So now I wonder: Can I really make it in technology? I don’t come from a traditional background. I don’t have a degree from Oxbridge or an Ivy. I don’t have the Big 4 on my resume. I was not a diamond in anything back in high school and I sure as hell am not one now. Can I make it? Or am I just deluding myself? Have I gotten this far just because of my gender? Maybe I really don’t have what it takes.

green park

There will be no Indian summer in October, the Met Office had promised just a few weeks ago, when it seemed that London, faced with a milky white cold drizzle, had collectively looked back at those suffocating weeks between late June and early August and let out a longing sigh. And yet this Saturday morning in mid-October is glorious. Though only a faint image of the sticky, dusty heatwave that had sent Argos stocks for air conditioning units into the negatives, the temperature is warm and I, still dressing for the Finnish October of my childhood, am of course overdressed and very soon, overheated.

Soon after I cross the lights at the knot of Regent’s Street, Shaftesbury Avenue and Piccadilly, the street goes into lockdown. Armoured police trucks drive up and down, sirens blaring. One of them gives an irritated honk to a driver of garbage disposal truck, who dutifully moves the vehicle further down onto one of those posh little streets that veer off Piccadilly into Mayfair. A helicopter, perhaps two, circles above. I duck into a corner at Waterstones and call my mother. Has she heard anything on the news? I want to tell her I’m ok. After the many incidents of last year, one can’t be too careful. But the consuming must go on! And so I rejoin the groups of window shoppers who have now spilled over onto the empty road and dive into the bookstore.

I already own too many books, too many unread novels, too many poetry collections I bought because an errant phrase here or there had given flight to my imagination, too many nonfiction books I’ve never read and will never be able to use at parties (which I never go to) to, in equal parts, annoy and astound my dates (which, to date, mostly only materialise in my daydreams). Most of them are not really books, but proxies for dreams, half-finished dreams, now indefinitely parked on a shelf to gather dust.

So I don’t stay long, lest the less well-behaved parts of my brain manage to convince the others, that yes, another erudite volume, another novel is definitely necessary. I take the stairs to the fourth floor and read some Russell on happiness but the words seem to slide through my consciousness like sand through fingers. I exit and walk out towards Green Park. Presence of police - everywhere, on the road, on the corners, in the blinking lights of the blue sirens, in the rumble of the helicopter circling above, in the policemen on the corner of Bond Street and then Albemarle Street and then further down at the entrance to the Green Park Tube station.

I enter the park through one of the side gates and, in spite of the annoying rat-tat-tat of the helicopter, am embraced by a tranquil golden autumn. It is here, under these trees and on the grass that just a few months ago was brown, prickly, singed by the prolonged heatwave, where I sat eating strawberries on a blanket that was later tinged with red droplets, like droplets of blood, one can find,in miniature, the full spectrum of human intimacy and its absence. The couples embracing on blankets, their shoulders gently touching, their hands intertwined, a gentle touch on the face, perhaps followed by a kiss. And then nearby, a woman on her own, eating a sandwich and staring out, far away from the present. I dare not look at the woman for too long nor at the couples, especially not at the couples. Why is it so, that the happiness - whether imagined or real - always maginifies an absence in our own lives?

I find an empty bench. The wind is gentle, the light bright and pure, filtered by the canopy of trees. The city and its many anxieties seem far away, their only echo a distant rumble of the helicoper still circling the perimeter of Piccadilly and Mayfair. I wish I could stay here forever, listening to the butterfly flutter of fallen leaves as storm Callum, with its final gusty breaths twirls them round and round. Here, I could love you forever, London.

It doesn’t take long for the tranquility to dissipate. It happens first at the entrance to Buckingham Palace, where I accidentally photobomb several tourist groups angling for a photo, then again near Westminster, a branch from a tree, falls, hits me in the face. I stand there, for a moment, stunned and draw my fingers on the forehead to check for blood. Meanwhile, groups of people continue to trickle around me. No one stops to ask. To survive in this city, one develops a kind of selective blindness, an ignorance to casual cruelties.

The Jubilee Line is a mild inferno and packed, as happy, slightly sundusted and windswept Londoners return home from an outing in the parks. At the bus station, a group of twentysomethings, lightly tipsy, stop to examine the shoes of their friend and a blister he has developed because of them. ‘Does anyone have a plaster?’ one of the women yells, half in jest and they burst out laughing and walk away. How easy it is to take part in a stranger’s joy and also feel alienated, an outsider, an observer, more so now as the Deadline approaches?

When I return to the corner of the world where I live, the sun has gone and the brilliant landscape of autumn dipped in in deep tones of translucent blue. It’s high tide on the Thames - the skin of the river ripples restlessly in the wind. Very soon it will be completely dark and then only the millions of lights in the millions of windows will carry the memory of the day gone by.

exposure

Author’s note: This post was finished and published on the 19th of June, 2018.

for free

I have an unconventional friend. Unconventional, because he does not subscribe to the live-to-work culture that seems rampant among the glass-and-steel towers, finely pressed suits and freshly laundered shirts. We talk over the phone (or rather one of those apps - if this makes you think I was born middle aged, you’re probably right about that one), about life and politics and work. I sometimes forget how bizarre people outside of the tech bubble find our daily rituals of seeking exposure: conferencing, CFPs, meetups, showcasing open source contributions, endless hot takes on Twitter and shitting on the latest JavaScript library on Hacker News.

I’m going to give a talk, I tell him. Slides, demoing stuff on my computer, that kind of thing. I explain the technology I’m going to be talking about, how it’s used, what problems it solves. We talk. I tell him how much it’s starting to stress me out, this talk. How these things always seem like good ideas with months to go, but morph into nightmarish monsters when the talk date starts approaching. And how for some reason we keep signing up to do this more and more.

But you get paid to do this, right? he asks. No, most people don’t get paid to speak at conferences, I tell him.

Networking, hallway track, learning about cool new tech, meeting your heroes, or at least seeing them on stage, that’s why, I explain while he digests. I’ve become so accustomed to doing things for exposure: meetups, talks, tutorials, workshops, I never even thought about compensation. Everyone does these things. Twitter is bursting with conference hashtags and livetweeted talks - enough to induce a permanent state of conference FOMO. LinkedIn is full of posts celebrating this or that meetup. CFPs, conference parties, photos of happy people celebrating speaker socks - and here I am, in my pajamas, trying to figure out why the ef can’t I center this div using CSS.

Well actually: Conference talking is voluntary - at least on the surface. No one is filling out that CFP for me. And yet, when everyone is on the dance floor dancing, you feel you have to join in. When conference speaking becomes the norm, the way to become visible to potential hiring managers and future collaborators, it becomes a necessity, not a nice to have. A bit like having a GitHub profile. An active GitHub profile, mind you.

the good and the sad

Even though I actively hate myself on the eve of every talk I have ever given, the conversations and memories from conferences do usually make it worth the trouble! Some of my best memories of the tech industry are from meetups and conferences. I was a Django Girls Coventry mentor at PyCon 2015, met lots of amazing people and got to teach Python to a group of four women. One of the attendees later on became a full time software engineer. Stories like these are what makes interacting with the community very rewarding!

However, there are community experiences that are not great. My list is long and our collective list even longer. I won’t go into them here or likely ever. One incident still stays with me. Not because it was harrassment. No, on the contrary it was a comment that I initially took as a snide remark, but then upon later reflection, I realised the profound sadness of it. A lady came up to me and said ‘Of course you have time to do all this (referring to community organising) - you don’t have a family!’ I was a bit taken aback by it and perhaps angry. True, I did not (and still don’t) have a family, no husband, no children, no dependants relying on me to be there for them after work. But did it really mean I had no other issues or problems to take care of? The other reason why her comment hit a sore spot was that personal life had taken a backseat and eventually nearly completely disappeared from my life in the years post-university and I was starting to feel a nagging feeling of ‘is this it?’. The person who so desperately wanted to be consumed by work three years ago didn’t find endless context switching, battling for meeting rooms in open offices and panic-frenzy-debugging of production fires fulfilling anymore. How dare she think I haven’t sacrificed anything, I thought in anger.

I later realised that the comment had not been implying anything of the sort or even malicious. It had just been an exasperated reaction to the constant demand of free work and out of hours studying just to keep up for exposure, for the chance to secure a role. It favours people like me and imposes a heavy penalty on people who take up the bulk of caretaking duties in the household.

Even though this happened a few years ago, the comment keeps resurfacing. Last time I re-visited this memory was during the PyLadies Gender Paygap panel. A member of the audience noted that women are still more likely (in heterosexual couples) to be the ones taking care of the household chores and thus had less time to develop markers, that we in the tech industry equate with Being Good at The Job (TM): an active GitHub profile, a trail of conference talks, open source contributions to high profile projects, community organising with tech meetups (bizarrely, diversity and inclusion related meetups rarely seem to count in these conversations even though the leadership skills required to maneuver the hate filled waters are on par if not greater than those required for traditional meetups), and a record of experimenting with new tech on side projects. Exposure, is in many ways a privilege. It also takes a toll.

crags, precipices and other perils of exposed heights

Every hillwalk usually has an exposure rating: one for a light bimble, five for a fuck-why-did-i-sign-up-to-do-this. The higher the exposure rating, the more likely you will be required to scramble and try not to look down. The views will take your breath away, though.

An analogous thing exists in the tech industry. The more prominent someone (usually a woman or femme-presenting person) becomes in a given programming language or community, the more likely they are to become a target for harrassment and online and in-person hate. Several prominent contributors to open source receive death and rape threats on the regular and have to deal with racial slurs. Just being different in a space of homogeneity and doing one’s work seems to be enough justification for these vile attacks. The milder forms of this are various kinds of well-actually’s, the most notorious of which is no doubt, as Liz Fong-Jones - SRE at Google - put it: questistatements. It may come as a surprise to people outside of the tech conference circuit, but bizarrely during Q&A (which as the name would suggest is a chance for the audience to ask questions of the speaker) many in the audience who avail themselves of this opportunity use it to prove that they know more about the topic than the speaker. This always makes for rather awkward viewing and a de-moralising experience for the speaker. Exposure, crucial for many as a way to enter and advance in the industry, carries with it plenty of toxic waste.

This is not to say that all exposure is bad. Rather it is the requirement to be ‘out there’ all the time tweeting, blogging, pushing code to GitHub and conferencing in order to get a foot in the door that routinely disadvantanges people who cannot afford to buy expensive conference tickets or need to perform other duties outside of work time. Recently, a fellow community member told me that she had been recruited and offerred a position at a cloud computing firm, in part due to her extensive contributions to the local data science community. This is great and should be celebrated! But we should not expect people to give 90% of their waking hours acquiring exposure for the sake of getting into the hiring pipeline. She is a skilled data scientist and has the education and projects to prove it. Why all these extra hoops just to get interviewed?

re-evaluating success, life etc.

I am at a meetup.

I used to attend meetups religiously, on a schedule. My Sunday and Saturday evenings were spent zealously browsing the pages of Meetup.com, signing up for tech meetup groups and penciling them into my planner for the week. Then, if no production systems were on fire that night, I’d promptly make it by 6.30pm to the hosting company and hide in my chair reading a book until the talk began. You see, I’m not very good at striking up conversations with complete strangers and this fact is usually exarcebated if I am the only woman in the room. Anyway, regardless of how socially awkward the whole situation was, I made a point of attending, because let’s face it, I was and still am largely a newbie. There is always something new you could be learning. I’d decided that I was like a sponge: I had to absorb as much as possible from the technical community around me.

I certainly learnt a lot. About meetups and technical communities and about technologies. I saw some amazing talks, for example a talk on high-performance Java by Martin Thompson. The organizers of meetups deserve a lot of credit: it’s hard, sometimes thankless labour and you have to deal with everything from late pizza delivery to angry people who have been waitlisted.

The meetup ends and instead of braving the saunalike conditions on the Central, I decide to walk thought Holborn to St Pauls and then onwards to Monument. The streets are empty this late. A few Very Important (TM) finance/law people hail a cab. A guy with one of those square Deliveroo containers exits a restaurant and gets on his bike. The glass and steel buildings quietly observe, their mirror-like walls reflecting a distorted image of passers-by. Closer to Monument you can hear the laughter and the clink of half-empty pints being lowered on the pavement while their owners smoke a few cigarettes and laugh at whether or not Paul knows what a load of bollocks these new requirements are and how he’ll never get promoted. I’d be hard pressed to imagine these people - dressed in the City Banker Boy uniform - leaving their desks at 6pm to learn about a new and very complicated way to structure, slice and dice debt.

Why has tech industry developed these complicated rituals to prove one’s worth? The reasons are surely numerous and probably not far off from the reasons we perform whiteboard interviews - a topic for another time.

I’ve been playing the exposure game for a while, but I’m not sure I want to anymore. I want to be good at writing code and sometimes the constant need to stay on top of the tweet cycle takes time away from that. I want to be good at the basics, not learn yet another layer of abstraction that I won’t be able to debug when production hell breaks loose. So, today I’m taking some steps towards that. I’ve deleted all of the content I’ve posted on Twitter. I’ve reconsidered some CFPs that I had started. I’m not sure what will happen, but for the next six months (until December), I want to stay focused on the things that matter most to me.