Ethical Trajectory

Mike Davidson wrote about the consequences of Superhuman’s read receipts complete with possible solutions. This is pure gold:

When a company first forms, there are no norms or principles guiding how its people should make decisions. It’s basically just what’s in the founders’ heads. With each decision a company makes, its “decision genome” is established and subsequently hardened. You’ve decided in your first month that you’re only going to hire engineers from Top 10 engineering schools? That’s now part of your genome and will determine the composition of your company. You’ve decided to forgo extra profits by keeping your prices low for consumers? That’s now part of your genome. You’ve decided to employ a single dark pattern to trick users into adding more things to their shopping cart? Part of your genome.

The reason this matters is that what may seem like small decisions early on become the basis for many more decisions down the road. These decisions affect your ethical trajectory as a company. Let’s use the dark pattern example. Maybe the shopping cart thing was pretty minor and you were able to rationalize it internally in a variety of ways, including the fact that the extra item in the user’s cart was inexpensive and provided value (like a product warranty, for instance). Down the road, when employees want to employ more dark patterns, here is how the conversation would go:

Greg: “Hey, we aren’t getting enough people to opt-into our mailing list when they sign up. Can we try maybe unchecking that box by default but using language such that leaving it unchecked opts people in?”

Desi: “Wouldn’t we be intentionally deceiving users if we did that?”

Greg: “Uhhhh, we already add things to your shopping cart that you don’t even ask for!”

Desi: “True. This seems like less of a big deal than that. I guess I’m OK with it.”

If you’ve never worked at a tech company before, this is how things go. When faced with making a product decision that is even mildly uncomfortable, employees often first look towards expressed company principles like “Always put the customer first”, but the next thing they look for is precedent. What other decisions have we made that look like this one? Designers do this. Engineers do this. Product managers do this. Executives do this. It’s an easy way to inform your current decision, and it’s also an easy way to cover your ass. Imagine the above decision was made by a product manager, and later on the company was called out publicly on it. The CEO or Head of Product marches over to the product manager and says “what were you thinking here?!?” The product manager needs only to point to the shopping cart behavior in order to let him or herself off the hook.

The point here is that companies decide early on what sort of companies they will end up being. The company they may want to be is often written in things like “core values” that are displayed in lunch rooms and employee handbooks, but the company they will be is a product of the actual decisions they make — especially the tough decisions.

Rahul Vohra, founder and CEO of Superhuman, responded with changes to come.


Shopify GraphQL Design Tutorial

It’s based on lessons learned from creating and evolving production schemas at Shopify over almost 3 years. The tutorial has evolved and will continue to change in the future so nothing is set in stone.

We believe these design guidelines work in most cases. They may not all work for you. Even within the company we still question them and have exceptions since most rules can’t apply 100% of the time. So don’t just blindly copy and implement all of them. Pick and choose which ones make sense for you and your use cases.

Shopify GraphQL Design Tutorial

Trick to Resetting My Password on macOS

I have a MacBook running macOS Mojave that had been sitting on a shelf for 6 weeks or so. It was completely dead when I initially opened it to log on again yesterday. Once it was charged, I was having trouble remembering the password to my account (the single administrator account no less). I hadn’t set a hint or written it down in 1Password. After a few failed attempts, macOS displayed a message saying I could restart in recovery mode to reset my password.

I was immediately thankful I would be able to use my Apple ID to reset my password! Once restarted in recovery mode, I entered my Apple ID and password but received an error message saying, “There was an error connecting to Apple ID server.” Doh! I forgot to connect to WiFi so I connected to my home network and received a (confirmation) notification from Eero that a new device had connected (awesome feature). I resubmitted my Apple ID credentials and… same error.

Searching on that error message surfaced mostly results about iOS device problems with a few hints at changing the time zone setting from manual to automatic. Those hints didn’t seem relevant or actionable so I started searching for other ways to reset my password that didn’t involve Apple ID servers. Luckily, I found Bypass and reset the password on any Mac in no time which included instructions on getting into actual Recovery Mode (⌘+r). Up until now, macOS was taking care of launching me into the Reset Password utility because it knew I was failing to log in (I just needed to hold down the power button until it shut off and then press it again without any key combos).

Now that I was in actual Recovery Mode and had access to Terminal, I decided to verify my computer’s clock was in sync using date. My computer still thought it was January 2nd instead of February 20th! StackExchange provided a few quick commands to get it in sync (no sudo necessary thankfully since… you know… I didn’t know my password). I then ran a few ping tests just to double triple check my WiFi was working. I launched resetpassword with my clock synced and WiFi connected. Submitting my Apple ID credentials now worked! After a few 2FA prompts, I was able to set a new password (which I definitely wrote down in 1Password)!

Why did the Apple ID servers require my Mac’s time to be up to date? I assume to prevent replay attacks. Why was my MacBook’s time so out of date? I’m guessing the battery died on January 2nd, and because I couldn’t log in, nothing could run to update the time which is why I had to do it manually through Terminal in Recovery Mode. Could this have been a friendlier experience for the end user (me)? Absolutely! Any sort of hint in the error message would have been appreciated. Maybe the Reset Password utility could have tried to sync my clock and retry behind the scenes. Security is a fine balancing act.

In the end, my MacBook felt very secure, and I was able to regain access. Hopefully this helps someone down the line debug a little faster ❤️

Trick to Resetting My Password on macOS