2022 in Review

Nick Radford
Nick Radford
Dec 9, 2022
  • 8 min read

Another year has come and gone, and I've decided to redesign and reimplement certain features of this site. Let's start with a postmortem of sorts since the last time I wrote something here.

2021

Stuck in the midst of the pandemic and absent from the tech industry proper due to being burned out, I was finally determined to get back to doing what I love to do — create awesome software.

I had been following @kvlly on Twitter for a while, and she was teasing a new company called Govalo. She had posted a link to the website, and while she and her cofounder @rhiankatie were still in stealth about the company, I was intrigued.

The interview was set, Monday, October 11th, at noon. I was nervous, but I was also excited. This wouldn't be my first interview since my last job, but I was prepared. Leading up to this, I completely bombed an interview with one startup and had an intro call with a founder who negged me about my kitschy website then lowballed me on salary.

I had also recently done some client work for some friends, as well as built a Twilio-powered SMS forwarder for when I was working solo as a stage manager for a small improv theater. I was ready to talk about my experience, and I was ready to talk about what I wanted to do.

The day of the interview arrives, I sit down on Zoom with Kelly and Rhian, and we have a wonderful discussion. We talk about my experience and my goals, and I learn how Govalo is planning to disrupt gifting in the ecommerce space.

FIFTEEN MINUTES LATER

An offer email from Rhian

A sigh of relief. Finally.

Working at Govalo

I started at Govalo on November 2nd. The team was small, but very diverse. After I started, two more product engineers, 3 implementation engineers, and a solutions engineer joined the team. We were all remote, and we were all working hard to build a product that would change the way people give gifts.

It's really fun to join a startup early. You get to see the product grow from a few features to a full-fledged product. You get to see the team grow from a few people to a full team. You get to see the company grow from a few customers to a full customer base. You get to influence the culture, the product, and engineering practices along the way.

Race to the First Pull Request

As an aside, I always challenge myself at every new job.

  1. How quickly can I get my environment set up?
  2. How quickly can I get my first PR opened?
  3. How quickly can I get that first PR released?

Luckily, with the existing documentation and support from a teamate (shoutout to you @joshecheverri), I was able to get my environment set up really quickly, probably within an hour.

While my first PR wasn't a full feature, it was a tiny change to some copy in the app, it was submitted 1 hour and 19 minutes after I started on my first day, merged that very same day. We did manual releases, so it wasn't released until a few days later, but this was a personal record.

Personal Growth

Since beginning my career back in 2010 with Quest Software (later acquired by Dell), I've focused on being great at building the front end of applications. Yes, those roles where my title was "Full stack" too. Even when I was studying compilers in college, I went as far as building a user interface for my final project with QT.

I didn't have the luxury, if you could call it that, of focusing solely on the UI at Govalo. Nor did I really want to. I would always preface conversations about backend development with interviewers with "I know enough to get into trouble", but that would change.

Async Job Processing

We were a small but pretty mighty team at Govalo. Our customer base was growing pretty rapidly and we needed to make sure our application could scale to meet demand.

We were already using BullMQ to send emails to gift card recipients, but we were handling webhooks coming from Shopify synchronously. At scale, this could end up impacting the performance of our admin app. We already had workers sending emails, why not use that infrastructure to handle the more critical parts of our business asynchronously.

Within a few days, I had a PR open which would add process-webhook jobs to BullMQ, and they would be asynchronously processed by a WebhookProcessor function later. Over the next couple of weeks this expanded to issuing the proper product (gift card or store credit), sending emails (or email events to configured 3rd party providers like Klaviyo or Omnisend), tracking timeline events.

Each JobProcessor dovetailed into the next step - passing along the relevant IDs or other static data so the next processor could look up the latest data for that item.

Before - there were several places we would need to change if say, the data being sent to our email provider had changed. Now, there was one single file that needed to be updated.

Gift Card Timeline

This was a fun feature for me to work on. We were inspired by the order timeline that is displayed on an Order Details page inside Shopify. To make Govalo more transparent (and to simplify support cases), we wanted to show when certain events happened for each gift card / store credit.

The govalo event timeline

This feature hooked into the async job processing described above and enqueued jobs to add events to the database at key moments in the lifecycle of the card.

Internal Dashboard

One major benefit to enqueing jobs and processing them later is that if something failed (eg: a 500 response from Shopify or Klaviyo), it was easier than groking a ton of logs to try to figure out what happened. Well - it would become easier.

This project went through a couple of iterations. At first, it was a command line script that we could run inside a container on Heroku. It would get all the failed jobs from BullMQ, and list them in a table. But because we were connecting data from Shopify and our own database all over the place, there was still a lot of manual digging required. It wasn't as convenient as it could be.

So, I built an internal tool we could use to list failed jobs and link to the relevant DB rows. The tool would also allow our product team to create promo codes or change the product pricing (both features I implemented the front and back ends of).

August 2nd, 2022

Anyone who had been paying attention to the startup space regarding fundraising this year had seen the economic headwinds leading us into the layoffs affecting the entire industry this fall.

The morning of August 2nd, after I had just reviewed a PR from our principal engineer, I got a message on Slack asking if I could join a Zoom call. I thought that was weird because we had switched to using Google Meet as a company. I opened the link, and as I saw Rhian, the chief of staff, the chief product officer, and my manager on the call - I knew what was happening.

It honestly came out of nowhere. I had initiated and led so many features. I had grown so much as an engineer during my time at the company. I was excited about the future of the product. But none of that mattered at that point - my time at Govalo was at an end.

The wheels had fallen off the bus.

Today

`` Looking back now, I am so thankful for my time at Govalo. I worked on some cool shit, with some awesome people, and gained a lot of perspective and skills that will propel me into further success in the future.

I've redesigned this site, probably my favorite thing (apart from the better font choices and information hierarchy) is the Spotify Now Playing component I built and is in the footer of the site. Apologies if I'm not listening to anything right now, so here's a screenshot in case.

Now playing component

I am eagerly looking for my next role.

My resume can be downloaded from the homepage, and my contact info is on my resume.

...

Well, that's enough rambling from me. It's taken me some time to write this, to redesign the site, and to process being laid off. As I say every time I start blogging, I hope to do this more regularly, but we'll see.

May your 2023 be filled with kindness.

- Nick