2020 is here, and I’m writing this from Brooklyn Roasting Company off the tail of about 7 hours of accumulated jetlag. I’m in New York! This is crazy and surprising and surreal, and my first impressions are… New York is cool? I mean, that’s not exactly an original thought; but I like that it’s clean, and there’s parks, and holy crap the metro network is enormous and so well-branded. In my first day here I saw ads for free coworking for freelancers and heard about the “tech talent pipeline” program. It feels like the antithesis to San Fransisco, not just because it’s on the opposite coast, but because it feels like it’s got the public luxury thing happening. In the words of the immigration official who pulled me into a room for a ‘chat’ when I landed:
I feel like [the rental market] has something for everyone here.
Ok so yes, this is a nice city. But this isn’t about New York, it’s a post about how I ended up here, and everything that 2019 was.
There is a lot in flux
The end of 2019 / start of 2020 feels like a period where everything’s in flux again. My life apparently has a cadence of about 3 years:
- 2013 was marked by finishing university, moving to Sydney, starting work as a programmer
- mid-2016 was marked by moving to Germany, changing jobs, leaving a relationship, leaving a religious tradition
- end-2019 was marked by quitting my job at Sendwave, applying for permanent residency in Germany, doing long-distance, spending time in Cairo (where Jackie was studying), and getting ready for 3 months at the Recurse Center in New York.
I started the year working at Sendwave, and ended the year wilfully unemployed. It was a stranger, more nebulous, more fulfilling year at Sendwave than in previous years.
I managed a team for about six months at Sendwave. We’d historically treated management as an afterthought, and so the team fluctuated in its composition, and my role remained extremely unclear the whole time I was a manager (but I understand this is kinda normal for engineering management jobs, and also kinda normal for small companies).
Managing people was… not what I expected. I think the most surprising things for me were:
- When you’re a manager, you no longer get to be wholly on the side of your colleagues. You’re theoretically supposed to be balancing business needs as well as the needs of the employees. This makes it weirdly lonely sometimes, especially in small orgs without a lot of managers, because you have fewer people you can turn to for support within the org. You need to be more proactive about having your own support networks, I guess.
- The trajectory in to management is often “hey, this person is really good at mentoring other engineers”, but then, once you’re managing people, you don’t have much time to do it, and really you should be coaching your senior engineers to mentor your junior engineers, and your junior engineers to find help from a broader network than just you. Mentorship is a great thing for senior engineers to do, but is often an anti-pattern for an eng manager.
The book Resilient Management was instrumental for me in getting my head around both of these surprises. Not only did it offer super practical management advice, it also did a great job of drawing distinctions between leadership as a manager and as a senior engineer. I’d recommend it to anyone dancing along that Senior Eng / Manager knife-edge, along with Charity Major’s thoughts on the Engineer/Management Pendulum.
The most satisfying thing in this role came on my final day. In saying goodbye to two of my teammates, they told me that they came away from 2019 feeling much more empowered and confident in undertaking security, web infrastructure, and performance work – all notoriously difficult fields to break into from a technical, but also a industry-cultural perspective. Seeing them take ownership of and gain confidence in these hard topics was such a rush. I’m so proud of them.
My work in 2019 was differently focussed to previous years. I was working on important things, but they were more continuations of long-term arcs than concrete projects that I can sum up neatly on a résumé. Some examples:
I transitioned our team through an infrastructure change onto Heroku Private Spaces, which has a different set of constraints to their common runtime stuff
I coordinated everything from Sendwave’s side for a penetration test, including fixing things in response to findings. This was a super interesting project, but also exhausting – coordinating and verifying fixes, and coaching other engineers through some of the nuances in the fixes was hard work, mostly because they touched a bunch of technical debt and so the fixes weren’t as straightforward as we expected them to be. I’d like to do more computer security work in future.
Systems performance. This has been a theme for me since mid-2017, but it culminated in a load-test in preparation for Christmas 2019, and coaching a couple of my colleagues in how to do this sort of work. I left on Dec 13th, so I have no idea how it went, but I left it in some very capable hands…
I also got to live with the repercussions of decisions I’d made in previous years, which was awesome for learning:
My 3D-Secure implementation from 2018 turned out to be pretty solid, and it’s now one of our major fraud defences in Europe (yay!)
As part of that 3D-Secure work, I’d moved a bunch of code out of our HTTP request handlers and into background tasks. This paid dividends well beyond anything I’d ever expected, because it changed the high-load failure mode from HTTP timeouts (where users can’t be sure if their requests were received by us or not) into transaction delivery delays (where users notice that we’re a little slower to deliver funds than usual). Having a smaller impact on UX means that “performance fires” are no longer “fires”, but are more “hiccups”.
I built a rate-limiting system using Redis in 2017. It’s since being used for more and more stuff, and handles everything we throw at it super nicely. I’m amazed that something so quick and simple to build has been so effective, and I think that’s a testament to Redis being well-designed.
I had a list of projects that were Really Cool Infrastructure Ideas that never saw the light of day, because they ended up being much more complicated than anyone expected, and I didn’t push back hard enough on them when they were assigned to me / didn’t kill them quickly enough when I noticed them blowing out.
A bunch of small observations I wrote down on my last day
- Systems observability is hard and requires thought and effort to do well
- Lightweight analytics for internal tools are a good idea
- AWS is a terrifying behemoth and it surprises me that people pay them to not be able to find shit
- When you are stuck on a frustrating problem, go for a walk in the forest, or work on something small and practical that will make you feel like your quality of life is improving
- I think I have a value now of “do lots for the people you care about and it’s ok that they’re your colleagues” but simultaneously hold a value of “don’t hold unwavering loyalty to any company”. There are a lot of tensions that arise because of this.
- You should be paged rarely, and not just because there’s lots of people on the schedule
- You should break things on purpose sometimes, so that you know what the failure modes of your systems are
- Definitely get repeatable builds happening. They’re pretty critical and it’s cool the tooling is moving in this direction.
- Remote work is one thing, async work is another, harder thing.
- Get face time with your colleagues.
- Monkey patching is one of the coolest and most mind bending things about Python and it makes tests really easy to write.
- The Zen of Python has a few gems in it:
- Explicit is better than implicit.
- Flat is better than nested.
- In the face of ambiguity, refuse the temptation to guess.
- There should be one – and preferably only one – obvious way to do it.
- Reading the source code is a superpower. It’s really valuable to teach people how to do that. Especially if you can jump into library code to figure out what the library is doing, and what the authors intended. Python makes this slightly harder because of weird monkey patching shenanigans but thankfully most libraries are pretty good about only doing that sometimes.
- It’s really nice to have a simple-to-explain business model, and I appreciated that about Sendwave. Charge people for a service that provides value.
- People will put emojis in anything.
- It’s often really hard to know when something is a one-off vs when something is a many-times-off issue, so maybe defer it until you know for sure (a.k.a. first time, observe it, second time, fix it).
- Similarly, I’m reminded of something my old tech lead Michael used to say - do the quick hack the first two times, and the refactor the third time. The idea is that you don’t know which ways your code is insufficient the first time you need to make a change to an existing system, and the mental cost of understanding a hack is often low. Then, the third change is the point where the cost of hacks starts getting higher, and you have enough information to do a good refactor.
- Instant deploys are worth investing in. Set things up so that you can click the shiny green ‘Merge’ button on Github, and have your code running in production in the time it takes to get a coffee. Then come back, check that it’s working, and cross it off your mental list. Best feeling.
- Many small teams underinvest in their own tooling. I think tooling is uniquely important because it’s the difference between having to task switch or not. Good tooling prevents you from yak shaving, which means you can focus better. I think this is why it’s under appreciated – people don’t notice or account for the impact of the work they’re doing upon focus, until they get to a point where things are so bad that they realise they can’t focus anymore.
In October, I visited Jackie in Cairo, and while we were sitting around one afternoon, she said “you’ve been talking about the Recurse Center for ages! Why haven’t you applied yet?”
And indeed, I found a draft application on my laptop from December 2018. So I submitted the application, and then two days later I found myself telling my boss that I’d applied, and so I wouldn’t be around from January to March. She said that I could take unpaid leave if I there was a 70% chance I would come back after… but nah, I’m ready for a new set of problems. And hopefully less work hours.
Mostly, I’m excited about not having a concrete job immediately – I’ve been working consistently for 10 years now. I’m excited about exploring ideas for what’s next; about working on things for their own sake, rather than because a company wants me to do them to make more money. We’ll see how long I can handle the self-directed-ness of it all, but it’s something that I’m hoping to get good at while at RC. I heard once that 12 weeks is long enough to build a good habit? Well, I’m hoping to return to Berlin in April with a handful of good habits.
2019 was the year I reconnected with Voracious Reader Fabian, who can’t put a book down once he’s into it. The highlights were, in no particular order:
- Deep Work, by Cal Newport. It’s a book about making space to do your most meaningful work. The author comes across as immensely smug and vaguely male-chauvinistic, so this book gets only a cautious recommendation. But his ideas are good, and they’ve shaped a lot about how I think about my own productivity.
- The Complete Books of Earthsea, by Ursula K. Le Guin. I lugged this 1000-page tome into a cafe down the road from my workplace and read it in my lunchbreak over about a month. Le Guin is one of those authors who can teach you something true about the universe by telling you a story about a different one. I’m inspired by how intentional she was about representation of people of color and women in her books (especially given the context of the 1960s, when she published the first book), and about the way she handles ideas about Good and Evil – namely, that both are in all of us, in tension and struggle. This is the sort of story I’d want to read to my kids one day.
- The Refusal of Work by David Frayne – case studies on people who are resisting the hamster wheel of paid employment, and imagination on what our relationship to work could look like.
- Similarly, Utopia for Realists, by Rutger Bregman. More dreaming about Universal Basic Income, shorter workweeks, and the examination of the purpose of work. Treat it as vision and imagination; there’s not much of a plan (indeed, how could you get a plan for all that into a book?) but I found it worth reading just to give me a scaffolding for my own values2.
- The Soul of a New Machine by Tracy Kidder. I thought this was HBO’s Silicon Valley-style parody about the development of a new computer in the 1980s, but then I was talking to my Dad about it, and it turns out it was about a real company and the book is reportage 🤯. It’s funny, engaging, accessible, and has characters you can fall in love with. An incredible case study about a feat of engineering in a specific organisation. I felt like it provided some good context into how we ended up with the American tech company culture that we have today.
- A General Theory of Oblivion, by José Eduardo Agualusa. A portrayal of connectedness and the Angolan Civil War, told from the perspective of a woman who stayed inside for the whole thing3.
Side projects! Blogging!
Yes! It’s all happening again!
I got more into film photography, went hiking again, built some more bottle lamps, and released a small software utility named after a bird (and incidentally also after the whisky my Dad used to drink when I was a kid). I blogged about a surprising amount of it. I’m super excited to be blogging again; it’s a great way of clarifying my thoughts on things, and I really enjoy writing!
Ok, so what’s the plan for 2020?
First the obvious things; the continuations of all the things that are already in flight:
- Go to Recurse Center, deep dive into how digital cameras work probably (more on this in a future blog post)
- Figure out if I like being un/self-employed, or if I should go back to a normal job
- Get Permanent Residency in Germany
- Keep blogging about it all.
Now, all the less-obvious but more profoundly important things:
Building capacity for courage, or for giving fewer fucks
Repeatedly in 2019, I realised that my track record of caring too much about what people think of me is jeopardising my ability to live to my goals. I’m a case study of the bystander effect in that I never want to be seen as doing something out of ‘line’, and given that I theoretically care about justice and equality and dismantling the patriarchy and diversity in my industry, I need to actively become not a bystander.
I realised this a lot at work, I think. I was happy to complain about the way changes to the promotion policies were made specifically because I felt like I had nothing to lose in doing so (the changes didn’t affect me). On the other hand, I was given responsibility over engineering hiring at some point, and I was super keen to instigate a bunch of changes to the way we did it – namely, make our interview process less strenuous and more people-focussed, on the basis that reducing your unjustified rejection rate is an important step in reducing hiring discrimination4. But, the repercussions of messing that up felt huge, and terrifying, and I didn’t have the guts to push the idea through, and so someone else took over, and the interview process moved in the opposite direction. Maybe if I had had more courage, we would’ve ended up with something more equitable.
In August, I read that white dudes are able to hire minority candidates without personal risk because we’re automatically assumed to know what we’re doing, and it stuck with me that if I’ve got the capital-P Privilege to not risk anything personally by advocating for diverse candidates than I’ve got a responsibility to exploit that. So, in 2020, I want to grow courage to take up space or be a pain in the ass or to basically just do the right thing without giving a crap about what other people are thinking about me.
Something about living more intentionally?
2019 was a year where I realised that I sorta needed to get my shit together and spend more time figuring out what I want, and then actually pursuing that, rather than procrastinating and then causing a bunch of disruption to everyone around me when inspiration finally strikes. You know, making plans and sticking to them like a responsible adult. I think if I had’ve thought about this more carefully, maybe I would have been at RC while Jackie was in Cairo, and we wouldn’t have had to spend as much total time doing distance (because we both would’ve been away simultaneously). The other piece here is – my parents are turning 60 in the next couple months (if you’re reading this, hi Mum, Happy Birthday! 👋). It’s only just occurred to me in the last week that it could have been super nice to have been around for that. But now I’m in New York, and from here, the right thing to do is to stick at this trajectory. I kinda just wish I had’ve had more forethought here.
I think 2020 will involve trying to figure out a framework for being more proactive and consistent with my decisions. At a detail level, it’ll probably involve trying to articulate the tension between my life in Berlin and my history / family in Wollongong, and to have a plan for reconciling those two separate pieces of my life (which, thus far, has mostly just occurred by coincidence). At a meta level, it probably involves trying to “live more authentically” or something. I don’t even know exactly what this means, yet – but I’m excited about figuring it out.
Towards a healthier approach to Social Media
I ditched Facebook (the app, not FACEBOOK, the company) in 2018 for mostly ideological reasons. 2019 unfortunately saw me fill that void with Twitter and Reddit instead, both of which are also sometimes great and sometimes toxic hellsites in their own regard.
In my better moments, I’ve been pushing towards:
- Not accessing “distractor”-style services from my mobile phone (no news, no social media)
- Subscribing to random internet peoples' email newsletters instead of following them on social media.
- Staying in touch with friends via Whatsapp / phone calls / FaceTime, including texting photos and blog posts to my friends instead of sharing stuff on social media. This has been great; it’s so much more conducive to actual relationship.
In 2020, I want to solidify this, and kick the Twitter / Reddit habit entirely. Wish me luck.
I know that what I’ve written here is a super naïve take based on spending a day walking around and chatting superficially to a couple of folk here, and I’m looking forward to having a better understanding of the issues here by the time I leave. ↩︎
Engineering projects are often kinda crazy seeing as we purportedly “just want to see how people think”. I’m 99% sure there’s better signals than getting people to do a 4 hour take-home project. But, for a remote / async company, we really do care about how well someone can communicate about what they’re working on, so figuring out ways to measure that is probably worthwhile. Actually, I think that’s probably true of most engineering. ↩︎