April 27, 2021
A recent blog post by Basecamp chief executive, Jason Fried, has been causing quite the stir on both social and traditional media the past couple days. In it, Fried describes some recent policy changes enacted at the company, the most notable or at least controversial being that “societal and political discussions” are no longer welcome at work, at least in the corporate chat spaces:
we’re done with it on our company Basecamp account where the work happens. People can take the conversations with willing co-workers to Signal, Whatsapp, or even a personal Basecamp account, but it can’t happen where the work happens anymore.
And Fried isn’t the first to express this kind of view, the CEO of Coinbase recently posted a similar blog post about staying “mission focused” while at work. It seems that a lot of people are echoing these sentiments that politics and social issues, and especially people discussing them, simply don’t have any place in the workplace.
Personally, I find this more than slightly hypocritical.
American workplaces, especially in the tech sector, have for decades been progressively blurring the line between an employee’s work life and their social life. By providing at-work benefits like cafeterias, showers, gym facilities, dedicated social spaces like basketball courts, encouraging social activities like “beer Fridays” and wine or scotch tasting, and even building entire shopping malls on company grounds; companies have been encouraging employees to spend more of their social time at the workplace. I documented in my post Office Perks are There to Keep You at Work, that this is a trend that has been going on in Silicon Valley since at least the late 1980s. And it isn’t a secret, at least to the heads of these titanic corporations, that the motivation for this isn’t employees “living their best lives at work,” it’s simple profitability. If an employee spends more time in work spaces or with coworkers, they’re going to get more work done than if they only put in their eight hours and go home to their families and social circles completely divorced from the workplace.
Companies that are “remote work friendly” or entirely remote companies like Basecamp have their own ways to encourage this same kind of pattern. Most companies have special interest groups, also called “affinity groups”, that form around activities like sports, motorcycles, cars, chess, video games, knitting, dad jokes, or parenting. Where brick-and-mortar-oriented companies give physical space to those groups, remote work companies do things like encourage people to set up chat channels or email lists for these groups using company resources.
A lot of companies in the tech sector talk about and have slogans around “being a family” or “bringing your authentic self to work.” These slogans are specifically designed to encourage employees to, at best, see their work at the company being an extension of their social life or their personal identity and, at worst, buy into a modern-day reimagining of the company town where one can spend all day and all night on company property and guided by company policy.
Yet now it appears that some of the corporate elite are starting to get tired of people’s “authentic selves.” They feel that:
It’s become too much. It’s a major distraction. It saps our energy, and redirects our dialog towards dark places. It’s not healthy, it hasn’t served us well.
In short, all this social stuff is getting in the way of getting “real work” done, so you should all stop that non-work stuff at work … because this is a workplace, understand?
You made your bed tech CEOs, lie in it.
November 14, 2020
Through the help of @robrix, I recently learned there’s a term for a concept that I’d run up against time and time again in maintaining open source projects: Chesterton’s Fence. The short definition is that you should always completely understand why something is the way it is before you make a change. This is because, too often, when we don’t understand the reasons why something exists, we assume that the reasons were worthless, unreasonable, nonexistent, or are now outdated.
We see this in open source over and over and over again. Someone comes along and proposes a change because a particular feature doesn’t work the way they expect it to. On small open source projects, the maintainers may have plenty of time to explain the reasoning behind the current implementation of the feature, the tradeoffs that were considered, and other requirements that factored into the decision. On medium or large sized open source projects, having that available time is less and less often the case, leading to conflicts where now not only does the person advocating for change assume that the feature was implemented poorly but that additionally the maintainer is giving them the runaround because they are incompetent morons that simply can’t grasp the flawless wisdom of the proposed change.
I’ve seen various open source projects attempt to combat this tendency through the use of pull request templates with sections that ask the change author to explain things like the tradeoffs or pros and cons between the current and the proposed implementation. Unfortunately, these often go unfilled or insufficiently filled in because the change author still hasn’t taken the time to understand the reasoning behind the original design. So of course every change is 100% benefit and 0% drawback, how could it be otherwise?
I’m going to start introducing the concept of Chesterton’s Fence into the open source projects that I work with, even going so far as to reference it in pull request templates or responses to insufficiently researched pull requests to see how it might improve understanding and cooperation between maintainers and potential contributors. If I’m able to gather data on how it works, I’ll report back!
July 23, 2020
For the first twelve years of my life, I was not named “Lee”. Technically, I was. But for the first twelve years of my life I was called “Chuck” by family, friends, and really anyone who knew me. The full name on my birth certificate is “Chuck Lee Charles Dohm III”. Yes, my legal “nickname” is Chuck and my legal first name is Lee. My father was Lee Charles Dohm Jr. and his father was Lee Charles Dohm Sr. When it came time to name me, my parents skipped over all the cool names they could have given me with a last name like Dohm (pronounced just like “dome”), such as King Dohm, Astro Dohm, or even Half Dohm. They went with tradition and wanted to name me Lee Dohm III. But my mom had a couple problems with that …
The first of which was that she didn’t want me to be called “Lee Three”. But more importantly to my mom, my dad was the love of my mom’s life (her words), and she wanted him to be the only “Lee” in her life. And if she had ever worded that slightly differently, like that she wanted each of us to have a special place in her heart and a special name all their own, I might have understood. But that’s not how she described it. She didn’t want me sharing my dad’s special name. So they gave me the nickname of “Chuck”, a traditional shortening of my middle name “Charles”. And that’s the name that I went by for the first several years of my life.
But of course, children are little monsters until they grow up a bit and learn some empathy. And where lots of kids were teased for wearing glasses, being too skinny, too fat, too smart, too dumb, or what-have-you … I was teased for the name Chuck. Over the years the name simply became less associated with me and my identity and more associated with discomfort and ostracization.
So I decided I was going to pick another name for myself, one that I liked and one that I thought made sense for me. I experimented with “Charlie” and “Charles”, but those never felt like they were really me either. And then I settled on simply going by “Lee”. I really looked up to my dad then (and now) and the name traditionally has connotations of strength and peace. It didn’t hurt that Lee Majors was a big name actor at the time. And it also helped that it was already my legal first name, on my birth certificate and everything.
But when I announced to the family that I was going to change my name and this wasn’t just a phase like the other ones was when my mom told me about how she wanted to keep “Lee” special for my dad and she wouldn’t call me by that name. So my family and many of the people who had known me before called me “Chuck” but everyone else called me “Lee”. So for a couple years I was in this weird transition phase where I felt like my real name was “Lee” but lots of people called me “Chuck” anyway and I just didn’t think it was possible to fight that.
But one of the most profound and lasting gifts that’s ever been given to me was a by a young couple involved with the summer swim team I was on. They had heard different people calling me by the different names but when I introduced myself to them I had said my name was Lee. So they asked me what I wanted to be called. I told them whatever was easiest for them to remember, that I didn’t care, they could call me either one. We went back and forth like that a couple times until the man put his hand on my shoulder, stopped me, made me look him in the eye and said, “No really, what do you want us to call you?”
Nobody had ever done that before. Nobody had ever asked me how I felt about it. Before that moment, even though I had been fighting it for years, deep down I felt that a name was something that someone else gave you and your opinion didn’t matter. I was simply using a loophole that my parents had put Lee on my birth certificate that nobody could really argue with. So, I seriously thought about it for a bit and told them that I wanted them to call me Lee. And that has been my name from that moment onward. Most people that know me now or even have known me for many, many years don’t even know that I ever had any other name.
But this brings me around to the concept of deadnames, most commonly associated with trans people who very often change their name along with their gender identity, and names in general. A “deadname” is the name someone was born with or was given to them before the name they chose for themselves. There’s a reason why the phrase “calling someone names” is always an insult. When someone engages in name-calling, they are attempting to apply a label to someone that they didn’t choose for themselves and they almost certainly don’t want to be associated with. At the very least, it is disrespectful. At worst, it’s malicious and intended to be humiliating and dehumanizing. And using someone’s deadname in reference to them when you know they don’t want to be called that is the same as calling them any other name they don’t want to be called like “doody head”, “butt munch”, or “stupid face”, except far more insulting, but still just as childish.
I do my very best to always call someone by the name they want to be called. And if I’m not sure, I ask them to teach me how to pronounce it the way they do and endeavor to do so to the best of my ability. It is a small thing, but it’s the least one can do to show someone they matter and that you respect them. Since it is such a small thing, there is no excuse to not do it.
February 28, 2020
On Reddit, /u/fruitynutter asks about burnout in the Seattle tech industry. And /u/non-member responds claiming:
Microsoft takes pretty good care of their folks… cafeterias with excellent food that’s super cheap, free coffee/soda/juice/etc, and carts with free beer at the end of the week.
None of these things are things that a company does to “take care of” their employees. These are all things that companies do to keep you at work longer. The more that the company’s facilities can be the center of your social life as well as your work life, the more work you will incidentally do while you’re “not working”.
INT. CAFETERIA - EVENING
Employee 1 is having dinner at the company cafeteria after work before
going home for the evening because they haven't had time to do any
Employee 1 notices Employee 2 entering the cafeteria seating area with
their own tray of food for dinner. Employee 1 waves to Employee 2,
inviting them to join.
Employee 2 smiles and walks over, sitting across the table from
**Employee 1:** Hey, how was your day? I didn't see you because I was
in back-to-back meetings most of the day.
**Employee 2:** It was LONG. I was in a marathon pair debugging session
with a teammate. We JUST finished and pushed the code to CI. I was just
going to grab something quick to eat, but I'm glad you're here to chat
**Employee 1:** I know exactly what you mean ...
The two employees exchange weary, understanding glances while eating
quickly like starved hyenas because they didn't have a chance to have
a real lunch due to their respective obligations.
**Employee 1:** Hey, while I've got you here ... I've been meaning to
ask you about what you think about the latest feature proposal ...
Startups are also a huge source of burnout, to be certain. But even though places like Microsoft, Amazon, Google, and Facebook do it slower, burnout is still happening.
I worked at Intel in the late 90s in the Information Technology group. The Vice President of IT was a woman named Carlene Ellis. This is a picture of her and Andy Grove celebrating the opening of the first showers for employees at Intel in 1988:
She worked in Human Resources at that time and eventually became VP of HR in 1990 at least partially because she sold the idea of exercise facilities, showers, and eventually cafeterias at Intel offices and facilities as a way to keep people at work longer and thereby get them to do more work. How do I know this? Because she told me that’s why they did it when I was working for her in the late 90s. Before there was a cafeteria at the office, people would take 15 minutes to go someplace to eat off site, take their one hour lunch break, then take another 15 minutes to get back to their desk. With a cafeteria, they’d take five minutes to go to the cafeteria, take 30 minutes eating, probably with coworkers talking about work, then five minutes getting back to their desk. Even with the extra expense of the cafeteria space, the people they had to hire to staff the cafeteria, and so on, they made more profit with the cafeterias than without.
Companies don’t offer you these perks to make you happier as a person. They offer these perks to make you happier to keep working because it is easier to stay at work than to take real breaks, go home to spend time with family or friends, or pursue non-work hobbies.
Companies that actually take care of their employees do things like pay their employees a truly living wage, have generous sick, vacation, and leave policies, have truly flexible work schedules by facilitating asynchronous and remote work, have generous mental and physical health benefits, and more. Notice that these are all benefits that affect or improve your non-work life, not your time at work.
Please keep these things in mind when looking for work in any industry but especially the tech industry.
October 11, 2019
When macOS Catalina was released the other day, I set about backing up my main machine in preparation. Talking about it with coworkers, I mentioned the various layers of backups I have for my computers. They mentioned to me that they were impressed and confessed that they didn’t have a similar system. The thing is, having the recommended system of backups isn’t nearly as hard as it used to be and it can be, for the most part, completely automated.
Let’s start with what the recommended set of backups is:
Three copies of any piece of data
- On two different devices or media locally
- And one copy off-site
For example, if you have a file
test.txt on your computer then you could:
- Back it up with macOS Time Machine to an external drive
- Back it up to the cloud with a service like Backblaze
This would give you three copies: the primary one, the Time Machine backup, and the Backblaze backup. The primary copy and the Time Machine copy would be on two separate devices, so if your computer dies, the external drive should still be good. But if your house burns down, you still have a copy on Backblaze.
I go one extra step further because I not only want to protect my data, but also get back up-and-running as quickly as possible if my computer dies. So my setup is:
- Time Machine to an external drive
SuperDuper! to create a clone of the entire drive to a different external drive
- Backblaze to back everything up offsite (including the SuperDuper clone)
Backblaze and Time Machine are automated by default. And SuperDuper has a scheduling system that I use to schedule a complete backup starting at 3am on Saturday mornings.
In this way, I have everything backed up automatically so that I don’t have to worry about it. The only time I have to do anything is when one of my backup systems notifies me of a problem, which is quite rare.
I hope this helps you keep your data safe!
August 28, 2019
I was talking with a friend last night about the new game Control, from the makers of Alan Wake and Quantum Break. Alan Wake is a horror- or thriller-themed action-adventure game, depending on where your personal dividing line is between the two, and Control is a game in a very similar vein. In both of these games, there are whispering voices that are hard to make out that I find to be very unnerving. What was interesting to me was that these whispered voices are more unnerving for me than the disembodied voices from the game Hellblade: Senua’s Sacrifice.
Hellblade has received a lot of praise for its depiction of psychosis, including auditory hallucinations. These auditory hallucinations take the form, mostly, of voices in the main character’s head, some of them supporting her and others discouraging her or plotting against her. The game studio behind Hellblade worked closely with neuroscientists, mental health specialists, and people suffering from psychosis to properly depict it in the game.
So why the difference in how the two sets of voices affect me? The best I can figure out is that, specifically, it is hard to make out what the indistinct, whispered voices in Control are saying, whereas the auditory hallucinations from Hellblade are mostly clear and understandable. Apparently, I’m much more able to cope with someone openly and honestly plotting my downfall than someone who is whispering vaguely malevolent things that I can’t quite make out.
I’m pretty certain this isn’t a universal thing but I thought it was interesting to note in case I ever decide to make a game or movie of the horror or thriller variety
August 18, 2019
Since the dawn of computers, there have been message boards. Whether they were called “bulletin board systems”, “forums”, or “message boards”; it was obvious that people wanted to be able to communicate with others who shared their interests no matter where they live in the world. As a matter of fact, innovation in the space of message boards continues even now: Facebook, Twitter, and even services like Instagram or Snapchat are iterations on the concept of message boards. But I want to talk mostly about the standard message board where people come to congregate around an interest, a group, a product, or some other subject; there are topics of discussion, and posts on topics.
Over the decades, there have been a great number of systems for posting information in message boards. We first started with plain text, because that’s all computers could display. But as things became more advanced and especially with the advent of the web, forum participants clamored for the ability to control the format of the posts they were authoring.
The earliest systems that offered this were ones that allowed you to add in snippets of HTML in your post. Originally, this was fine because most of the people writing in those early web forums were Internet enthusiasts who probably knew at least a little HTML. But as Ma and Pa, and eventually Grandma, started to explore, HTML was simply too complex, too obscure, too hard to type, and definitely too hard to read while you were composing for it to be usable for someone who didn’t want to be at least a part-time web-developer. And it also didn’t help that HTML could be used to do bad things to message boards or their participants if it wasn’t scrubbed clean before displaying in a never-ending arms race.
After HTML, there were a few different efforts that fell into two broad categories: HTML-lite and rich-text editing. The systems that fall into the HTML-lite category are things like BBCode that essentially “fix” one or two of HTML’s drawbacks but are simply reimaginings of HTML intended to make it easier for normal people. The rich-text editing systems are essentially simplified word processors in a box on a website. They allow you to compose your post in a WYSIWYG manner, formatting the text as you input it.
Most people would say that the rich-text editing systems solved the problem of making posting formatted text approachable for everyone. Unfortunately, it introduced at least a couple more: bad formatting, both intentionally and unintentionally. Essentially, because everyone can format their text any way they want they can, either intentionally or unintentionally, make their content hard or even annoying to read. Think of gigantic blinking red text calling the previous poster a loser.
So, to sum up, the various systems in the past exposed the following requirements for a system of easily formatting message board posts:
- Understandable to non-web-developers
- Memorable even when used occasionally
- Easy to type
- Can’t be used to assault the eyes of other people, even accidentally
Why is Markdown the answer?
Given these requirements, why do I say that all message boards should use Markdown? If you’re not familiar with Markdown, it is:
… a text-to-HTML conversion tool for web writers. Markdown allows you to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid [HTML for display].
How does it do this? Well, it uses long-established conventions that have been used in plain text situations like email, chat rooms, and message boards. For example, this Markdown text:
Let's _emphasize_ an idea. Or should we make a **bold** statement? Or we could quote someone smart:
> May the forces of evil become confused on the way to your house.
> -- _George Carlin_
We can even make a list:
* Thing one
* Thing two
Let’s emphasize an idea. Or should we make a bold statement? Or we could quote someone smart:
May the forces of evil become confused on the way to your house.
– George Carlin
We can even make a list:
These conventions became standardized because they were conceived of by people who were trying to convey the idea of formatted text in a plain text world. And it was John Gruber’s brilliant idea to take a pave the cow path approach to the problem of making composing HTML-compatible formatted text memorable, understandable, and easy-to-type even for non-technical people.
And while that is enough to make Markdown pretty special already, what convinces me that Markdown should be the lingua franca of formatted forum text is that while it makes the most common formatting tasks easy, it restricts people to a “sensible subset” of choices. With Markdown, you can’t change the color of the text, you can’t change the typeface, you can’t change the size of the text arbitrarily, and because Markdown works very much like a well-designed word processor or desktop publishing style sheet, everyone’s text looks pretty much the same.
Why is it important that everyone’s text look the same? On a message board, you want everyone’s posts to be on an equal footing, to give everyone a voice. Giving people the tools, through formatting, to distract attention away from others, to shout others down, contravenes the mission of message boards, which is to allow people from all around the world to communicate with each other. Additionally, it makes your message board a more pleasant place to visit because everything that the participants post looks like it belongs on the site since it shares the same cohesive visual style.
And like a well-designed style sheet, Markdown makes it easy to do standardized formatting that requires multiple steps in many rich-text editors. For example, headings, subheadings, sub-subheadings, and etc are often rendered in a different typeface, at different sizes, and using different weights than regular text. So what might be three separate steps in a rich text editor is achieved with the addition of a single character in Markdown:
# This is a Level One Header
And moreover, that level one header will look like everyone else’s level one header with no effort expended on the part of forum participants.
Giving people the tools to communicate better, by making it easy and approachable to convey their idea in a way that others will understand and is a pleasure to read, that is what makes message boards even better and more effective. And Markdown makes it easy.
July 23, 2019
Interesting post describing the process of mirroring Git repositories and some challenges. Includes a script to make the process simple and reliable.
July 20, 2019
Maintaining an open source project is an exercise in balancing a number of different priorities and the tensions between a few different groups. There are:
- People who want the project changed
- People who want the project to remain as it is
- People who want to know what the maintainers plan to do or are in the process of doing
- People who want to contribute themselves
- And many others
In any non-trivial project, there is never enough time or enough people to do everything that everyone wants, even if what people want isn’t diametrically opposed to some other group of people. So maintaining an open source project is, at its very core, about making decisions. Whether it is a decision about how time will be spent or how it won’t be spent, any time one makes a decision, it is likely that someone is going to disagree with it.
Disagreements and Productivity
When I worked at a previous job, many years ago, they had a class that everyone had to take as part of their onboarding called “Effective Meetings”. One of the things that was taught in this class was that there are three productive courses of action that one can take when a decision is made:
- Agree — agree with the decision and move forward
- Disagree and Commit — disagree with the decision, but commit to the decided course of action anyway
- Disagree and Don’t Commit — disagree with the decision and recuse yourself from further participation in the project or activity
Unfortunately, what some people do when they disagree with a decision is they disagree and refuse to let it go. They keep bringing it up, preventing the project from moving forward, preventing productive actions from being taken. The discussion comes up again and again, and often the same decision is made because nothing has changed. All this does is consume a bunch of time, time that could be better spent making forward progress rather than rehashing a decision that has already been made.
Explanations and Obligations
Sometimes when people disagree with a decision that is made, it is because they don’t see the full picture. If you take the time to explain it to them, they may understand and be able to accept the decision was the right one, even if it is not the one they would prefer. Other times, you may explain the full reasoning, context, and rationale behind the decision, and they will still disagree but they will disagree and commit. Sometimes, you will spend a bunch of time explaining everything, giving them the benefit of perspective that is gained only from spending years of your life devoted to a project, and they will disagree and not commit, leaving the project to contribute somewhere else. And finally, sometimes you will spend all that time, painstakingly laying out all of the things that were considered, opening everything up for debate, and it will all be ignored because the person wants what they want and will attempt to argue you into submission, browbeat you and harass you until you acquiesce so they get what they want.
But even making the decision to spend that time has to be weighed against the other things that could be achieved spending that time in some other way. It is hard to teach someone everything that you know about a subject, even if the person you’re attempting to mentor is receptive to what you’re trying to teach. It is doubly hard if they are combative, hostile, or simply don’t care what you have to say and only want you to agree with them. Would open source be a better place if we could always take the time to explain everything to everyone who wanted or needed something explained? Undoubtedly. But as I said before, there is never enough time to do everything. So sometimes, it is ultimately better for the project to not explain things and spend that time making a positive contribution in some other way. Sometimes it is better to ignore a confrontational person and hope they get the message, because you simply don’t have the spoons to deal with them in a constructive way right now. And it is definitely better to ignore a confrontational person than to deal with them in a harsh or destructive manner.
To be clear, the open source world would definitely benefit from people with more information, perspective, context, or expertise sharing it with those who have less of those things. But an open source maintainer is not obligated to share what they have with everyone who wants it, let alone those who believe they have the right to demand it. Personally, I spend a lot of time and energy sharing everything that I can with people that I believe will benefit from it and use what I know to make things better for others. And I feel no guilt withholding my time, knowledge, and energy from those that I believe will squander or ignore it. Moreover, I believe that withholding these things from that kind of person is the right thing to do for myself, my mental health, the projects that I maintain, and the community surrounding them.
Do I make incorrect decisions? Absolutely. I do my best to examine all of my decisions, to learn from the ones that succeed and the ones that fail. Do I have the time or energy to do everything that would be beneficial? No, I do not. I do my best to spend the time and emotional energy I have every day wisely, or at least in the best way that I know how. Am I obligated to give something to someone simply because they want it, feel they deserve it, or even if it would be a objectively good thing to do? No, I am not. Do I feel guilty for being a limited and fallible being, what some might call “human”? Sometimes, I do. But I’m doing my best to fix that about myself.
August 12, 2018
The previous posts I’ve written about non-consensual PvP are probably overly complex and don’t really make my point well. This morning, while playing some other games, I struck upon what I feel is the perfect illustration.
Let’s say that you’re tasked with designing a park. You can design and build it however you want, with a nearly unlimited budget. You do a wonderful job with large nature spaces, basketball courts, tennis courts, an area with tables where people can play chess or go against each other, even places specially designed for people who want to cooperate to build things, and more. The entire neighborhood comes to your park and really enjoys it.
That is until someone decides they want to play dodgeball. There’s a dodgeball group that comes in every so often and plays with each other. But when one of them shows up and none of the others are there, they just go around the park hitting people in the head to “start impromptu games of dodgeball”. People tell them to stop, they’re not there to play dodgeball, but rather want to play basketball or chess, or just want to have a pleasant walk in the park. In response, the dodgeball people yell, “Git gud!” or “Stop being such a carebear!” while continuing to pelt the non-dodgeball players as painfully as they’re able.
So the people who don’t want to play dodgeball but still want to enjoy your park come to you and ask you to fix things. What is the correct answer?
- Do nothing
- Create an elaborate system where if someone hits others with a dodgeball who doesn’t want to be, third parties are given bribes to hit the original offender with dodgeballs
- Create a special place in the park where dodgeball can be played and prevent it from being played anywhere else
Option one, obviously, does absolutely nothing for the people that just want to enjoy your park without the risk of being hit in the head with a ball. Eventually, the only people who can enjoy your park are the people who want to play dodgeball.
Option two creates a system where the person who bothers people and hurts people is rewarded by helping them to achieve their goal, in other words it helps the harasser to find people to play dodgeball with them. This does nothing to solve the problem for the people who want to enjoy your park without being forced to dodge balls. Eventually, the only people who can enjoy your park are the people who want to play dodgeball.
Option three makes it so that everyone can reliably enjoy your park, no matter what they want to do there. Well, except for the people that just want to go around hitting random passersby in the head with dodgeballs.
But, please, let’s stop claiming that options one and two are valid choices for park designers to create parks that everyone can enjoy, even the ones that don’t want to play dodgeball. Just put up a sign that says, “Dodgeball Park” and be done with it.
Find older posts