COVID vaccines and the high-availability websites that distribute them

Here in DC, members of the general public who want a COVID vaccine register for one on a website where appointments are made available in batches. Eligibility has recently expanded to include people under 65 with certain high-risk medical conditions, which means a larger group than ever is attempting to book one of the 4000 or so appointment slots when they’re initially released.

As you might imagine, the appointment-booking website is absolutely buckling under the strain. It’s been a frustrating experience, made worse by how DC’s CTO has described the situation:

Throughout the crashes and subsequent apologies, the refrain has been, “the system is experiencing high demand! Thirty thousand people are trying to use it at once! Keep refreshing! The real problem is that DC needs more vaccine!”

And yes, DC does need more vaccine, just like everyone else, but plentiful vaccine isn’t going to make a website able to handle an entirely predictable number of visitors.

DC is a city of 700,000 people. I do not know the precise number of people who are currently eligible to be vaccinated, but it’s not at all a stretch to think at least 100,000 (and probably more) people in this city are seniors, part of a critical workforce group, or have extremely common health conditions like diabetes or high blood pressure. But the website is absolutely collapsing at around 30,000 concurrent connections.

Now, I am not a developer or server engineer. But I do work with people who are to keep some extremely high-traffic, high-profile websites online. And more to the point, I spend a lot of time explaining to non-technical clients how the decisions they make can affect the availability of their high-traffic websites. And based on that experience I can tell you that 30,000 concurrent users is just not that many.

When you need a web service to be available to a large number of users, there are broadly three ways you can improve it:

  1. Increase technical resources: You buy more processor cycles, more bandwidth, more servers, until you can handle all your traffic through pure brute strength. This can be expensive; cloud tech has made it more accessible than it used to be, but costs can still be unpredictable and high.
  2. Increase efficiency: You reduce the amount of work the server has to do per user. You design your application to have fewer clicks, fewer writes to the database, fewer files that have to be served.
  3. Manage demand: You reduce the number of users that hit the site all at once. An application and environment that would fail at 30,000 users can often handle 15,000 just fine, so how do you make sure all 30,000 people aren’t using it at the same time?

The DC form makes inadequate use of all three of these strategies.

Managing demand is another way to say “flattening the curve.”

This is probably the most important one in the case of COVID vaccines. There’s a limited supply available every week. DC is trying to ensure equity in the process by prioritizing slots for the less-affluent wards hardest hit by COVID. As a result, only about 3000-4000 appointments become available at the time. So even the fact that 30,000 users (and probably many more, 30,000 is just the point at which the server runs out of resources) are all trying to book appointments at once is a problem. 90% of users are going to come away disappointed even if the website performs perfectly.

Rather than throwing 4000 appointments on the website at 9AM and letting the Hunger Games happen, what if DC had registered residents in advance (say, during the months we were all staying home, waiting for vaccines to be approved), and then started contacting people as they became eligible? Most of the information in the form is pretty static- name, address, occupation, medical condition. The only information that has to be established at the time of making the appointment is the actual appointment time/location and the person’s COVID status.

Pre-registration and contacting people when their turn comes up means people are only being offered an appointment when there’s one available for them, and it also increases equity for residents who don’t have flexible jobs that let them refresh a browser for an hour while trying to get through or reliable home internet access. But for web performance it also drastically cuts down on the number of people simultaneously using a form that writes to the database, and reduces the amount of data being written at once.

If you’re only having to accommodate <5000 people at a time on your form, efficiency in the form itself matters less and making sure you have enough server resources gets a lot cheaper. But let’s just say that it’s a few months from now, vaccine is more plentiful, and you can release 30,000 appointments at once. What then?

Efficiency is about design choices as well as technical choices.

Even at high demand, you can make your form as lightweight as possible. I think DC’s form has made a good start at that: there’s minimal styling, no decorative assets, and the couple of external services invoked (CAPTCHA and maps) are critical for the functioning of the form, there are some weird UX/UI choices happening that cause some inefficiency. For example, after you’ve entered your contact information and answered the COVID status questions, the page reloads and shows you the data you just typed in, with a checkbox asking you to attest that all that data is true. That’s an entire page request that doesn’t need to be there.

Additionally, when you look for an appointment slot, the form defaults to showing you the next week, and if the next week is booked up, it shows no appointments available. There might be appointments available after that, but then you have to adjust the date picker and try again. Why doesn’t the display just start from the next available appointment? Again, this is multiple page loads that don’t have to happen, not to mention just a confusing UX.

Throw money server resources at the problem.

We’ve already established that we shouldn’t have a situation where 100,000 eligible people are competing for 3000 slots. But if you’re going to do that, you should probably contract with your cloud provider (Microsoft Azure in this case) to allow 100,000+ concurrent connections. Not doing that just makes for an aggravating situation for even the people who do manage to score one of the coveted appointments. It’s expensive, and that’s why the other ways of managing this problem are so important, but the entire point of cloud infrastructure is that it’s easier to provision additional resources on-demand.

Despite these criticisms, I don’t want to come down too hard on DC, or other state and local governments, for not having their act completely together on this. The pandemic has been mismanaged from the top and that has left governments that should have been able to cooperate with a federal plan having to make it up as they go along. But DC is full of civic-minded tech experts who could and would have advised on these systems had they been asked to. Instead, we have a situation where trying to get scheduled for a COVID vaccine is like trying to score concert tickets before they sell out. We can and should do better.

“So, what’s DC like right now?”

…you mean like, after an armed insurrection at the Capitol? The week of the inauguration? SO GLAD YOU ASKED.

There are 25,000 National Guard troops deployed to DC right now. That’s more American troops than are currently deployed to Afghanistan (note: the low numbers of troops in Afghanistan is a GOOD thing, don’t get it twisted, but DC is not a large city.)

The security perimeter for the inauguration includes not just the major federal buildings and the National Mall, but also nearly all of downtown, Union Station, 3 of the bridges into the city from Virginia, big chunks of NoMa, and nearly the entire neighborhood of Capitol Hill (not just where Congress and the Supreme Court are, but where people live). Parking garages all over the city are closed. Residents are being told not to get out lest they might not be able to get home.

Don’t get me wrong; in DC we are accustomed to inaugurations. A perimeter goes up a day or two ahead of time around the general area of the White House, Mall, and Capitol, you know you’ll have to pass through security to get on to the Mall to watch, and the city pretty much shuts down for the day and everyone takes the day off.

But all of this started a full week before the actual inauguration and has thrown the lives of hundreds of thousands of people into disarray.

Thinking of trying to get around the city this week? Think again.

Meanwhile, folks are falling all over themselves to provide restaurant food for the paid troops occupying the city, while the unhoused population in that perimeter is cut off from the social services they depend on. Families who are dependent on nutrition programs during the COVID shutdown are cut off from meal distribution. For an entire damn WEEK.

The perimeter is pretty tight; the only arrests have been one-off randos who “forgot” about the gun in the back of the truck, or people who are clearly disturbed in some way. But now the new concern is that if the visiting fash can’t cause mayhem downtown, they’ll start acting out elsewhere in the city. You know, in our neighborhoods.

So I plan to spend some portion of Wednesday sitting on my porch, conspicuously sharpening my axe, and glaring at anybody with Trump paraphernalia on their car.

Recommended Resources

Here are some articles to read about how DC residents are experiencing these events:

Here are some on-the-ground mutual aid groups working to keep folks safe who have to venture downtown to work, and make sure our unhoused neighbors have food and resources while all this is going on. There are lots more, but here’s a good starter list:

  • Remora House: Venmo: @Remorahouse_dc
  • Feed the People: Venmo: @Charity-Sade CashApp: $CharitySade
  • DC Fridge Collective: CashApp: $dcfridgecollective
  • Errybody Eats: Venmo: @errybodyeats CashApp: $errybodyeats0
  • Kyanite Kitchen: Venmo: @kyanite.kitchen CashApp: $kyism
  • Fuel the People: Venmo: @fueltheppl
  • Casa Ruby: Venmo: @casaruby
  • They/Them Collective: Venmo: @TheyThemCollective

Sustaining the unsustainable.

Now that we’ve been in physical distancing mode for a few weeks, I’m trying to get out of bunker mentality and figure out how to live like this for a while. Depending on who you ask and which theory of the the testing numbers they subscribe to, we could be doing this straight through for a year or more, or we could be doing it in waves for a while.

There’s been a weird impulse to engage in pre-nostalgia for this time, with lots of preachy memes about the value of everyone slowing down and cooking more and spending time with their families, and children looking back on this time as an extended summer vacation, and just… gross. This is a crisis caused in large part by a failure of political leadership. It didn’t have to be this way. I plan to hold our national leadership accountable for that failure in any way I can.

And yet. We have this enforced time at home together whether we want it or not. While I feel a certain sense of responsibility to stay angry about it, it’s also my job to help keep the family running, and to ensure my son feels safe and protected. So it would not be the worst thing if he grows up and remembers long afternoons playing with LEGO, reading books, making pizza dough with Dad, and taking family bike rides.

So I’m giving myself a break on anything I can. I’m only emphasizing some basic skills practice for school, plus the video calls so he can feel connected to his teacher and classmates. Reading books and acting out elaborate stories with his toys is plenty of exercise for his mind at this age.

I’m trying to add what I can, too. I try to eat breakfast and/or lunch with the fam. I’m trying to prioritize getting out on my bike as much as possible, even though my grand designs of picking Charlie up from school and taking him and his friends to the playground on it are on hold. I’m doing Zoom happy hours with friends (but not too many, because we overdid it that first week and it was exhausting). I’m trying to get more outdoors time, at least before the mosquitos start showing up.

And I’m resisting (loudly at times) the urge to ratchet up the precautions and the sanitizing of every possible surface and the shaming others for not social distancing to some arbitrary standard of “correctness.” Not because people shouldn’t Clorox wipe their Amazon boxes if it really makes them feel better, but because this performative “I’m being SO much more careful which means I will be extra safe, and therefore I need YOU to do the same thing” behavior is counterproductive and anxiety-inducing for everyone else. We have to live like this, possibly for a long time. We cannot do that if we are constantly worried if we’re doing enough, perfectly enough, to say 100% safe.

Preparing for Pandemic Parenting Pandemonium

While state and local governments are scrambling to limit the effects of COVID-19 in their communities, there’s a lot of talk about how to handle being suddenly forced into remote work.

Since I work at Automattic, I’m already working remotely and my job will remain largely the same. But I’m anticipating that my 6 year old son’s school will soon announce a lengthy closure, and that means I’ll need to juggle my job with his needs all day, for potentially weeks at a time. I can take some time off, of course; we have unlimited PTO. But since hundreds of my coworkers will potentially be in the same position, how much time and when it makes sense to take it is still very much a question. And besides, with everything closed, I’ll just be sitting at home anyway.

My son is very social, and an only child, so our usual way of occupying him when there’s no school is playdates with friends. Those are harder to come by as we’re all practicing social distancing.

So this is what I’m thinking for how we’ll get through the next several weeks:

Consistency: I’m thinking I’ll write up a daily schedule, with clearly-designated times for screen time, playing or reading by himself, any school assignments that need to be completed, and doing activities with Mom and/or Dad. Perhaps we’ll even go over it every morning like they do in circle time at school.

Novelty: I’m working on getting a stash of small LEGO sets and other small toys that I can occasionally dole out, sort of like the “bring wrapped toys on airplane trips” advice, but stretched out over multiple weeks.

Choice: We’ll make a list of activities that he can choose for the time with parents. We can cross them off as we do them, so we don’t end up playing SORRY! ten days in a row. Some of my ideas:

  • Bake banana bread (math! fractions! following directions! deliciousness!)
  • Play board or card games.
  • Write a story, then stage scenes with LEGO minifigs, and then I’ll take photos of them and print them out with my smartphone photo printer, and we can make a book out of it.
  • Go for a ride on a cargo bike to explore the outdoors a bit.
  • Listen while a parent reads some of a chapter book.
  • Playground time.
  • Watercolor painting.
  • FaceTime with a friend.

I think this is going to be a long period of disruption, friends. Stay safe out there.

Blue canary in the outlet by the light switch…

Tonight I learned that They Might Be Giants is doing a tour next year for the 30th anniversary of Flood. My delight at this news was tempered by the way I crumbled into dust when I realized that album will indeed be 30 years old next year.

It’s hard to overstate the importance of Flood for people who were nerdy kids in the early 90s. You see, in the long long ago, before most people had the Internet, and before the stuff we liked was being made into major international blockbusters, before geeks were cool, Flood was a nerdy-kid shibboleth. If you dropped a reference to the “blue canary in the outlet by the light switch” and someone got it, you knew you were going to be friends.

And unlike a lot of the things we loved in the early 90s, Flood holds up pretty well. I will never hear the phrase “minimum wage” without immediately imagining that whip-crack sound effect afterward, reminding us that minimum wage is effectively “I would pay you less if I could.” The lyrics of “Your Racist Friend” are sadly as relevant as ever, with literal white nationalists setting national policy.

So when the tour hits DC in April, I’ll be there, singing every word to every song.

Who is cleaning the juicer?

It’s not a new observation, but I’m pretty well done reading articles about productivity and “morning routines to help you win your day” (is my day a competition?) from wealthy dudes* who do not have caregiving responsibilities.

Like, you can get up at 5 AM and go for a run in the park and then come back and meditate for 30 minutes and drink a perfectly-balanced green juice before taking a cold shower, reading for 30 minutes, writing in your journal, and THEN commute to the office? How nice for you. Who is cleaning the juicer?

My morning starts at 6 when my alarm goes off. I do not make the bed at this point, because my husband is still in it. I try to get up a bit before everyone else in the hope of being up and showered and dressed before my 6 year old wakes up and wants my attention. (Admittedly, I move very slowly in the mornings and need to build in “stare into space and think about stuff” time; not everyone does.) He’s pretty capable of getting himself dressed, though he frequently argues with me about it, so my husband and I tag-team him through it. If I’m very lucky, I get downstairs before him and have a few minutes to think about my own breakfast needs before he comes tumbling down and wanting a waffle or a jelly sandwich or something, which I will repeatedly remind him to eat while he gets distracted by telling elaborate stories with his Legos.

If it’s my turn to take him to school, we leave around 8-ish, fight traffic and get to school around 8:30-ish, and then when I have the car to myself on my way back, I can sneak in a podcast or some new music I’ve been wanting to listen to. If traffic is on my side, I can steal a few more minutes to read something or do some other hobby before I get online at 9AM.

If it’s my husband’s turn to take him to school, they leave around 8-ish, and I have the unspeakable luxury of an entire hour to myself to do whatever I think will start my day off right. I try to fit in some reading or some art time, but the truth is I’m often using this time to finish up the dishes or tidy up a little.

And look, I’m pretty privileged: I have a well-paid job, where I work entirely from home. I don’t have to worry about making it to an office on time, and if I get online a little later than I wanted to, no one is standing over me to question me about it. I have a partner who can and does actively participate in parenting, and I only have the one child to be responsible for. Just one school drop-off, no elder-care or other caregiving responsibilities. But the presence of one young child in my house pretty much wrests away control of my morning.

So here are the habits I’m trying to stick with, because I have a reasonable level of control over them:

Get 8 hours of sleep. I just need it. I can get by on 6 or 7, but that catches up to me quick. I’m just happier and more functional when I prioritize getting 8 hours.

No devices for 1-2 hours after waking up. At our Automattic Grand Meetup a couple of weeks ago, Jim Kwik spoke, and something he said stuck with me: for the first hour after you wake up in the morning, your brain is at its most relaxed and focused it will be all day, so if the first thing you do is reach for your smartphone, you’re just training yourself to be distracted. So I’ve set my phone to show me no notifications at all until 8AM. Frequently by 7:30, our day has gotten rolling enough that I need to look things up or start an Instacart order or something, but by then I’ve theoretically been awake for 90 minutes. I’ve been liking the results from this.

Make time for reading and other self-enrichment activities. I can’t read novels in 30-minute chunks; all I want is to lose myself in a story for hours. But I can read books to learn stuff in small chunks, and I can draw quick sketches or write out quick journal entries. I’m only going to be able to do more than one of these activities on days when I’m not taking my son to school, but on days when I do, I can carve out time for one of them. The point of this exercise is as much about the actual activity as it is about making the effort to prioritize myself when allocating my own time, which is something I’m notoriously bad at.

*I mean, I’m done reading these takes from people without caregiving responsibilities in general, but it’s almost always dudes whose articles about the 25 things they do every morning that require complete solitude go viral.

Playgroup Strong

Our neighborhood playgroup got an email this morning from one of the parents on it, breaking the news that they have been diagnosed with a medical condition that will require a grueling course of treatment that will likely last months, but also expressing gratitude for the way they knew they could count on us to show up for their family in the times ahead.

And they were right. The mobilization was immediate and impressive. Our phones lit up with WhatsApp notifications: plans to provide child care and meals, to take the older child along on the playgroup beach weekend that the affected family was going to have to back out of, and to designate point people to coordinate our efforts so they wouldn’t be overwhelmed. “Playgroup Strong,” we tell each other.

Continue reading “Playgroup Strong”

I can’t wait to show you…

This post was originally a Twitter thread, but I delete my tweets after three months. So I’m preserving it here.

A while back, after feeling shamed by– of all things– an XKCD cartoon, I started adopting a posture of delight when someone tells me they haven’t seen/heard/read some bit of culture that I consider essential or universal.

Which is how it came to be that I recently spent a Sunday night on the couch, lights dimmed, drinking good wine and eating spaghetti with homemade sauce, watching The Godfather with a friend who was seeing it for the first time.

I’ve been watching this movie since I was a kid– it was a family favorite– and to this day if I flip past it on cable, it’s what I end up settling on. I’ve seen it so many times now that I literally forget which parts are supposed to be suspenseful. That’s why I love riding along when someone sees it for the first time- their reactions make it fresh for me, and I discover nuances and contours I had previously missed.

We both have young kids and clearly can’t watch it with them, so we had to start the movie pretty late, and it’s long, so the next day we were both pretty tired. But it was worth it! She loved it, I loved watching it with her, and we’re already plotting when to watch the next one.

So I truly believe that adopting the phrase “Oh! That means you still get to see it for the first time!” will enhance your life, and I recommend it to all.

Eight remote workers walk into a meetup…

Today is the third anniversary of the day I left the office at my federal contracting job like:

That means it’s been three years of working from home. Three years of being home more or less alone all day, hanging with the family in the evening, seeing friends on the weekends. As an introvert, I’ve grown accustomed to this level of human contact and have come to prefer it.

So imagine the abrupt adjustment needed to go to my team’s meetup last week and live with my coworkers, most of whom I had never met in person, in a rented house for a week.

I feel like I’m going to spend some part of Monday staring at the wall.

There is nothing quite like living with semi-strangers you work with for a week to throw all your weird quirks and habits into sharp relief.

The Hour of Tiff

When I started my new job at Automattic a couple weeks ago, I went from having a lot of time on my hands as a never-busy-enough freelancer to suddenly being at my desk for 8 hours a day during my Happiness Rotation. (On rotation, I have the freedom to decide my own schedule for doing support work, but the best time to do it is while everyone else is at work and school.) Suddenly I felt like I had no time for anything- I’d get the kid off to school, do a full a day of work, and then it was time to head out to pick up my son and have evening family time. 

Looking at my color-coded schedule (a post about my planner is coming another day), I realized that the only way I was likely to get another hour in my day is to get up an hour earlier. I can do that and still get enough sleep, but I’ve never been a morning person, so this is going to be a hard habit to establish. 

I read recently that the only way to establish a habit like getting up early is to tie it to something you’re excited about doing instead of something you “should” do- if you’re getting up to clean the house or work more, you’re never going to make yourself do it. But if you’re getting up to do something you like – reading, catching up on your favorite TV show, making art – then you’ll be motivated to actually get up out of your comfy bed and get moving.  (It sounds obvious, but this was a little bit of a revelation to me, after reading a million profiles of tech dudes who swear that they only need 5 hours of sleep and get up before the sun every morning to walk the dog and meditate.)

Anyway, partway through week I declared The Hour of Tiff, AKA, Time for Doing Whatever the F— I Want. Here’s how it went:

Continue reading “The Hour of Tiff”