In a different career, as a younger person, I had the great honor to land at a city owned theatre, after my first season of summer stock as the house technician and general assistant to the technical director. If, for a moment, you will excuse the vocational awe, I genuinely look back on that time as a blessing. My career continued from there but at some point I needed to make a different choice. The joy from the moments of creation and camaraderie that comes from making art collaboratively simply could not outweigh the anxiety of making enough money, but this post isn’t wistful rumination on a life that could have been. It’s about our professions.

The technical director I worked under remains one of the sharpest people I have ever worked with. He’s got a real engineer’s mind coupled with keen aesthetic sensibilities. Truly something to envy. One day I asked him, “Why are you here? You could be at a large theater with a higher budget than we have.” Arms folded, leaning against the wall, he half shook his head and said, “At one of those places, I would be the guy with the clipboard. I wouldn’t get to make things.”

It was an arresting statement. A decade on, that moment has stuck with me. It was also fair for him to say. Over the seasons we worked together, he had built & designed some incredible sets. Giant polyhedral dice that polypocketed open to be different sets for She Kills Monsters, A set of wooden cogs that spanned a considerable length of our proscenium that were operated by a single actor leveraging a large handle that generated enough force to rotate the entire set for Jekyll & Hyde, conscripting me to get him a bus that he would then transform into a piece for the stage for an run of Priscilla. The man consistently produced honest to god stage magic and always came in under budget. I learned a lot about how I wanted to be in the world from his commitment to the craft.

He knew what he wanted from his profession: the opportunity to hone his craft and gain the skills to better his ability to put art into the world.

I’m a long ways away from my theatre career. I’ve worked one show this decade. About a decade ago, I decided to see what the alternative careers were. I figured maybe I could get some stability and do theater on the side. Some people manage that track; I don’t think I am possessed of the temperament to do that labor part-time professionally or even as a hobby. I tend to be monomaniacal in my endeavors. After briefly working my way through IT help desk and some network operations support, I landed a role as software engineer. Programming was something I taught myself working the second shift in a network operations center, and eventually, I would formally earn a credential in it. I’ve spent the better part of a decade learning about, writing, and maintaining code.

If you have the very good fortune to be excused from thinking and hearing about artificial intelligence, may your god continue to bless you. I do not have such a fortune. The current incarnation of artificial intelligence (generative AI) is here. Container ships full of money have been either spent or promised via legally binding IOUs. For years now money has been set on fire in service of making numbgup*.

In service of numbgup, the software profession has seen untold layoffs and the imperative in many shops is to get the bot working in your code bases and go faster. Don’t worry about having the finger tip feeling for the code base. No need to dredge through enough boilerplate to realize that the abstraction is bad, we’ve overcome bad abstractions with boilerplate at the speed of AI.

You don’t need to write the code; you just need to hold the clipboard and make sure things are on track. If they’re not on track, don’t worry. When they get to prod, it’s your name attached to those commits, so we’ve got all the accountability sinks we need. Make sure that you’re playing Numberwang to win. Throw that code in a pipeline and have it try to win Numberwang again if it fails the linting or the tests.

Here is the thing, though: I do not want to hold the clipboard. In fact, what I want is to hone my craft, learn from colleagues in an environment where we are encouraged to hold each other to high standards, own my successes and my mistakes. Though, software possesses a similar ephemerality to the stage, I want the work I put into the world to be durable. I had many goals when I was a theatre worker, but one of them was to ensure that when my name appeared in a playbill, people would be pleased to know I was involved in the show because they had a respect for the quality of my work. I’m not sure if I gave the career enough of a shake to get there with audiences, but I feel good saying I was on the path there. I have many goals today, but I want the same thing to happen when someone sees my name on a commit, in an escalation path, or on the org chart, they will know that my work is solid.

I have spent some time ruminating on what I desire from my profession. It is tailored to software engineering, but I think it is broadly applicable. I have grouped these into the following categories: learning, sharing, quality, agency, accountability, and respect.

Learning: The computer science and software engineering fields are still young fields, and the work of computing can be expansive. There are innumerable ways to improve one’s craft and become a better engineer. Learning should not be limited to the domain of reading but actual implementation. It is better to understand the full implications of something through practice, implementation, and refactoring. The profession should require our hands on attention.

Sharing: This is a personal preference, but I wish that more developers would take the effort to codify their knowledge. My personal preference is the written word but I think we should inculcate in our peers that putting our knowledge into the record is an unalloyed good. I enjoy writing documentation. Some may want to put forward toy examples under permissively licensed code or to build the documentation in test suites and rest collections. Hell, maybe it’s a podcast, or even video tutorials. You could bundle this into learning or quality, but I think explicitly enumerating sharing is important because we know that sharing knowledge helps to reinforce one’s own abilities.

Quality: We should be encouraged to strive for the highest standards of quality and wear the projects we work on like a badge of honor that things are stable, they don’t have random errors, don’t consume needless resources, are reliable.

We have long been in an era where hardware people did the grueling work of making chips better, and us software people have largely squandered those performance gains by simply throwing more RAM at a problem. There are exciting strides on the fringes but no one is handing out bags of cash for the endeavor of improved software performance, let alone shipping containers. We have gotten so drunk on this freely available RAM, and it’s made the quality of our products worse. In everything we do, we should be respectful of resources, and we should endeavor to target making these systems work perfectly at the lowest reasonable end of hardware for the task at hand.

Quality should denote one additional thing, though: support. What we release into the world should have clear paths to getting help, be that documentation, tutorials, or, God forbid, a real flesh-and-blood person.

Agency: The long arc of history makes it clear that computing technology has a conservative streak. Conservative in the sense that it centralizes power, enables greater surveillance, and encourages the homogenization of the world so that it may be rendered machine readable.

We had a brief era where bandwidth costs moved the means of computing into the home. Connectivity meant that we could work and explore privately and share those discoveries on our terms, when we were ready, but every day since dudes got a Dell, the powers that be have been working to claw back any liberation people may have experienced through computers. Any engineer worth their salt should try working with open protocols and ensure that the paths to leaving their software are seamless. We should strive to make our software maximize a person’s ability to express themselves in the domain we are creating it for.

Accountability: Computers, algorithms, and automation are often a way to eschew responsibility. That should not be the case; mechanisms for accountability should exist like they do in other professions. There should be engineering unions that hold their members to standards as part of the craft but also to exert meaningful force when employers want to make decisions that would make our systems worse. Perhaps in addition we could have a board that software engineers can be certified through that functions like the American Bar Association with all the professional and ethical obligations that entails.

This should not exist as a means of gatekeeping but so that there can be a north star for ethics and standards and a meaningful means to adhere to these standards when people seek to undermine them. It may not be necessary for every engineer to hold a board certification or be a member of a specific union, but it would do a world of good if the profession as a whole were concerned with what loosing their software into the world means. Presently, software engineers have no real means to send an email that will make a leader’s blood run cold, in the same way a lawyer sending “This course of action is being taken against the advice of counsel.” Or, “If we continue down this path that could harm people, the workers have voted to authorize a strike.” Either of these means would broaden the accountability within the software industry.

Respect: We must have respect for each other, the work we are doing, and the people who will come to rely on what we build. We can never know how or who will use our software, but we should treat this unknown with a certain solemnness. Iris Meredith captured this sentiment better regarding software than I can:

This means that everything, to a greater or lesser extent, calls for the level of regard given to a situation where life is at stake: you never know when a tool that you make or something that you build might be put into a situation where lives depend on it, after all.

It is not just the reliance on our software that we should have respect for but the impact of it as well. In everything we make, we should take a beat to think through the implications. I would not suggest it is possible to account for every possible abuse of a given software, but we are so far afield of thinking about even the most obvious harms that taking a single second to consider how someone might use software maliciously would immeasurably improve the present.

Respect should extend to our experience. At the highest echelons of this industry, it helps to have gotten a computer science degree from MIT or Dartmouth, but the long time need for technologists has allowed those from non-traditional backgrounds to take the side door into the profession. It is our duty to make sure many paths bring people to the technology trades. Part of keeping those paths viable is recognizing their lived experience not only matters but makes us better technologists.

All these ideas bundled together could be called something else: excellence.** We should strive for excellence from ourselves, within our professions, and we should do this for each other.

Society would benefit across the board from an adherence to excellence. I do not think firms are desirous of these expectations, because the pursuit of excellence eats into margins, but excellence is worth pursuing. Right now you might be an engineer who finds themselves staring down having to work with AI. Maybe you even enjoy it. Maybe it’s doing something for you. I have no real interest in arguing with anyone about this, but I would ask that you meditate on if the tool is making you better at your craft. If you took away the tool, would you still be helpful in a room full of people? As someone who hates whiteboard interviews, I abhor the removal of tools, but if the tool atrophies your muscles through usage, it is probably a cursed object.

*numbgup: a neologism coined by my dear friend Dan to grossly express the idea of “number go up”

** h/t to @GeePawHill@mastodon.social for helping me to make this connection.