I worked for a while at a digital agency in Atlanta. We built websites and applications on contract for our clients. I worked in the back end engineering group: the first time I had that specialization.

Here’s a day in the life of that place.

When I read it now, with a little distance, the first thing that comes to mind is how much we jumped around from one thing to another all day. It’s almost frenetic.


It’s almost 9am. I’m clearing out the noise from my email inbox. I’m doing a server maintenance task that’s supposed to happen at the start of the day. I’m deluged in too many open tabs, too many open programs (19, I counted). UptimeRobot is complaining that the server is down. I already know it’s down, come on — I’m the one who just restarted it.

By the time I get the notification, it’s back up again, making it doubly useless.

The monitor records 1 minute of downtime in the end. I guess the client can stand 1 minute of downtime on production every couple of weeks.


I’m looking at a response to a ticket from my colleague. There are two things with almost the same name, and I was trying to use the wrong one. The solution is to delete the wrong one and use the right one. OK, I’m typing…

Naming things takes longer than doing them, sometimes.

Now I’m deploying my changes to staging yet again. Trying to keep track of the project paperwork. Should I update in Slack? In Trello? Maybe both. Our process is in flux. I checked on staging, the updated feature looks good.

I looked at my list of tickets for a second, but it’s so long and backlogged that it’s almost not worth looking at right now. I’ve gotten to the point where I just ask the project manager what to do, instead of trying to figure out which of 30 tickets is most important.


Now I’m checking if a particular web page matches the graphic design we got from the designer. I’m comparing our new version to the legacy version we’re replacing, trying to check that we didn’t miss any requirements.

I found something to improve — a particular image field should have a fallback image. I already fixed this issue elsewhere in the codebase, but didn’t realize it needed fixing in two other places. Now they’re fixed, but we have to do the whole test cycle again to make sure nothing broke. Here we go. We mostly do manual functional QA here, not much automated testing. An hour has passed. I’m listening to dance music.


Found a funny user data entry bug, where they had used URLs for their corporate antivirus tool instead of URLs for the website they wanted. We sent that off to the client to get it fixed.


Now it’s slightly unclear what to work on. There’s a javascript issue that’s blocking us from finishing a certain feature. I’m going to volunteer to take that off my colleague’s plate because I know he’s busy. (Although he would probably be quicker at fixing it than me.)

…It took about 10 minutes to find a simple fix for the issue.

I had to find this one by directly editing the code on staging, since the bug only happened in the staging environment. Now that I found the fix, I can make the change in my local development environment, then commit it and deploy again to the staging server.

Deploying again…

Testing again…

Looks like this is fixed: took about 14 minutes of my day.


The sun is brighter and brighter through the window. Incessant whir of the ceiling fan. My back would feel better if I stood up for a while. I don’t have a great desk chair.

I thought we’d be ready to send the latest feature for internal review, but now I spot one more detail to fix. Something doesn’t show up where I think it should. Also something is minorly broken in the page navigation and needs fixing. It’s almost 11. I think I’m making steady progress, but it all feels nonlinear and hectic too. I spotted a minor method call error that probably explains the bug. Let’s fix that, test, redeploy on staging… Oops, now there’s a new page layout bug, something that needs the Front End team to come fix. And another couple of fields to integrate with the front end while I’m at it… And a default value for one of the fields… Meanwhile I’m slacking with my colleague about a data import issue. Solidly 80s music now. I’m so bored of wearing headphones.


I had lunch. I stretched. I changed my makeup. I put on my work boots like I was in an office. I changed my desk to standing height.

Development velocity slows down after lunch. I spent a while in a zoom meeting, mostly devoted to catching up someone who was out on parental leave. I asked some questions about tickets that don’t have all the details settled. I updated docs and sent some slack messages about schedules and status updates. Half the job is just communicating, communicating, communicating.


Just now I dug up a good test URL for a rarely used feature. Seriously, finding test URLs is often more work than actually writing the software. It would be easier if we had the same data across all our different environments.

That mid-afternoon hazy feeling sets in. I don’t have afternoon coffee anymore, and I miss the kick.


I’m looking at a confusion. There’s a place where we use one name to mean two different things. One of them is aesthetic and one is functional. Sometimes they go together, but sometimes they don’t. It’s so hard to explain these things by Slack. It’s also distracting to have to have a phone call to explain them. Working in the same room would help, in these moments.

It was a 20 minute discussion over Slack for a 20 second code change.


3:30pm: More tickets, more minor adjustments to the codebase, more tests, more sample URLs, more staging deploys, more “this is done” comments on the tickets.

Honestly, my back is tired. My feet are tired too.


Clarified some requirements (were they ever clear? were they just not clear to me? did I forget them? the project has too much state and too many requirements, it ends up requiring a lot of clarification.)

Just found a place where the data in the database was the wrong type. Have to update the data importer to fix that. I’m going to manually clean the current import data in the meantime, because I don’t want to wait 3 hours for the importer to run again. [20 minutes later: UPDATE, actually the database schema was suboptimal, but I opted to not edit it because I’m not sure what all the ramifications would be, and my colleague who designed it isn’t available.]

It’s getting close to 5. I’m starting to wind down.

Taking a deep breath, removing my headphones, and setting my slack status to “away” to say goodnight.

No one seems to be around on Slack anyway. 🤷‍♀️ (<== This is literally my favorite emoji because I find it gender affirming.)

Goodnight, work!