on making art

I've found three main ways in which artists make art. The first is to show people what the world is like: you observe the world around you and translate it into something that others can experience secondhand. Audiences from the world you're describing might find your art relatable. Audiences not from that world can get a glimpse into it and build empathy for the people in it.

The second way is to show people what the world should be like. You can show who you are by adding your own commentary to a state of affairs. In some cases, you must first identify the unidentified and name the unnamed so that others can understand what's wrong, so they can help take action against situations they previously didn't realize require change.

The third way to make art is to create new worlds. This method is probably the hardest because you have to do things that haven't been done before. If you push right up against the boundaries of what's commonly accepted, sometimes you can break through those boundaries and forge new paths, leaving others to follow in your footsteps. Sometimes creation evolves naturally from showing people how the world should be. Sometimes it develops on its own, separate from any hope of action on the existing world, because you've found that this world is broken beyond repair.

I feel like the third method is more intuitive for artists who are on the margins of mainstream society, because it's imperative for them to create their own worlds to belong in, worlds they feel safe in. They push against the boundaries of acceptability because society has already forced them to those edges. Their continued survival depends on their resourcefulness and ability to expand the tiny margins in which they are allowed to exist.


I've spent the last year thinking about what I want to spend my life doing. It stemmed from thinking about what I want the world to become. I woke up a lot of mornings not convinced that what I was going to do that day was ultimately useful to humanity. There was no way I could continue living life like that.

What I'll actually spend my life doing partly depends on what can realistically be done and what I am capable of doing. But my priorities, and the tradeoffs, remain the same.

My large-scale priorities, in vague order:

  • Help humans get their needs met
  • Achieve human equity
  • Stop killing animals
  • Stop destroying Earth for funsies

The corresponding large-scale goals:

  • Implement baseline food, shelter, health care, education, and other needs
  • Convince society to destroy structural discrimination / Pass basic human protections
  • Make synthetic meat and leather / Pass basic animal protections
  • Develop space exploration and terraforming

My personal priorities, in vague order:

  • Make useful sh*t
  • Make cool sh*t
  • Bridge worlds
  • Be healthy

My corresponding personal goals:

  • Develop applications that help underserved communities get their basic needs met or help influence action to improve conditions for them
  • Make art / Produce music / Write novels
  • Connect very different people
  • Exercise / Eat plants / Learn martial arts

The ever-loving and trusting idealist in me still believes helping other humans will ultimately result in a better world, so that's at the top. If you help others meet their basic needs, there will be more people who can also think about how they can improve the world and do some of these other things. Maybe not all of them would be able or willing to do so, but some of them would, and that's more than there were before.

Making art is actually part of staying healthy. I realized a long time ago that my mind starts to unravel when I go for too long without writing or making art or music. It's both a creative outlet and a way to leave something for others to enjoy long after I'm gone.

There are secondary personal priorities, like making enough money to cover expenses, or supporting a family. Many people choose to make those priorities their main focus in life. I am clearly not one of them. I accept that I may have to dial down some of my main priorities to address those. But as long as I am able to, I'd like to focus on helping humanity at large, because anything less ambitious may not get me out of bed every morning.

inner strength

The past month has been extremely difficult. I've been weathering personal and societal storms on a large scale. And this weekend saw a massive tragedy in a community I'd been part of for years. The artist of the track above was one of the victims.

It's hard to bother with sleep when you already know you'll wake up to a crushing sense of hopelessness. And yet, we're still here. In a couple of hours, the sunrise will shed light on the fact that we still exist. Maybe we'll have another day to make the most of what some people no longer have. Maybe we'll have the opportunity to help others do the same.

what i do most days

Developers who debug inherited codebases do a lot of what I've been doing lately, which is tracing. It's time-consuming, but like most brute-force methods, it's simple and works eventually. You:

  • look at what errors you're getting
  • try to figure out which function they're happening in
  • go to that function
  • insert a bunch of log printing functions around where you think the error is happening
  • run the code again and see which logs actually get printed to the console

Unless you have asynchronous stuff happening, the last thing that gets printed to the console is directly before where the error happens. If the next line is another function, go to that function and repeat the process.

(Pro tip: if you are debugging something this way, log the name of the function you're in. You will probably forget to remove at least one of the logs when you're done, and knowing which function is printing a bajillion messages to your production console will be useful when you need to find and remove it.)

Tracing works for most debugging scenarios, but web developers also need to be aware of how the server gets information from its database (the backend) and passes it to a user's web browser (the frontend). Otherwise, you won't even know where to look-- are your errors and logs printing to your browser's dev tools console, or your server terminal?

In my company's case, the codebase's layout makes it clear which files:

  • On the browser side:
    • Send HTTP requests for data to the server
    • Parse the data from the server
    • Create views for the user using the parsed data
  • On the server side:
    • Receive HTTP requests for data from the browser and route them to the right data retrieving functions
    • Retrieve data from the database
    • Structure the data and send it back to the browser

A couple of well-established and stable Node.js libraries handle our MySQL database calls (mysql), HTTP requests (request), and server routing (express). We also use larger, newer libraries to create our user views (React) and to structure and parse our data (Redux).

These popular libraries also throw useful errors that help with debugging. For example, their error messages might indicate which files and lines an error is happening in, and I can follow those errors up from a library's files to our actual codebase's files.

This might look obvious to experienced fullstack developers, but I started as a primarily frontend dev and had to figure out a lot of this stuff on the fly, so I wanted to write it down for people who are still learning.

under pressure

This month I've been busy working on a new feature for my company's book club websites, most of which are managed by one server. I spent my first few months creating internal tools, scripts, and emails, so I wasn't as familiar with the user-facing codebase as the other web developers. But we needed to mitigate our bus factor, so I decided to bite the bullet. I wanted to better understand how the different pieces of our web stack worked together anyway, and this was a small feature that touches a lot of parts of our web architecture behind the scenes. (I'll write more about the actual code later.)

One of the most important things I realized during this whole ordeal has already been written about:

Nothing gets done when you interrupt an engineer.

We have an open office plan and just moved to a smaller building. The view is nice, but there aren't that many corners where developers can run away and be alone for a while-- places where we can get guaranteed uninterrupted focus time.

I usually like chilling with my coworkers, and a lot of them are naturally social as part of their jobs (marketing, customer service, etc). So I didn't really notice this aspect of our office until this week. Specifically I didn't notice until it was crunch time on Friday afternoon, I was concentrating on debugging a big issue that came up at the last minute, I was interrupted for the fifteenth time about whether we were going to have something ready for release that night, and everything I was trying to keep track of flew out of my head. Again.

My office spirit animal: a bunny falling over at work Me yesterday, my concentration broken again

My project manager is super understanding and tried to run interference for me, but there's only so much you can do on Friday at 5pm when everyone wants to hang out and unwind while you need to get something out the door. (We have a "No Releases on Friday Night" rule, but our other option was releasing on Sunday night and putting out fires during our Halloween festivities the next day-- I put my foot down on that one.)

I managed to debug the issue and do the release eventually... after the office emptied out a little bit.

about robots taking people's jobs

I'm not opposed to the idea of robots taking over dangerous manual jobs. I'm not even opposed to the idea of robots taking over creative or technical jobs. I'm just opposed to people blindly trying to make that happen as soon as possible, before any societal provisions are put in place for the people whose jobs will be taken.

I don't believe in meritocracy. I'm not in favor of economic or intellectual Darwinism. It assumes that only the smartest or most resourceful should survive, and it also assumes an even playing field for all involved. "If someone's manufacturing job will be taken by a robot, they should just learn the skills needed to get a better one," say people from well-off families who have never tried to master a skill while hungry, or while working a low-wage job 16 hours a day.

I'm all for robots taking our jobs, but before that, we need our society to function without jobs at all. We need to set it up so that no one needs to spend their entire life working at a place they don't really care about just to feed themselves and their families.

We need get our world to a place where no one has to work to stay alive. Once that happens, bring on the robots.