WWDC 2021 wish list

To an Apple nerd like me, the WWDC keynote day is kind of my Christmas. Pound for pound, the WWDC keynote contains the largest number of interesting announcements and since they have such a huge software focus, they have a tendency to be very surprising since there aren’t any supply chain leaks.

I thought I’d share a little mind dump of things I’m hoping to see this year. With the exception of iPadOS, all of Apple’s platforms are quite mature and so my feature requests are getting kind of boring and specific. But at the same time, this platform maturity is a real opportunity for Apple to polish the shit out of its OSes, which there is absolutely room for them to do.


WWDC is mostly about software and developers, but Apple has a tendency to release new hardware at these events. Here’s what I’m hoping to see:

  • At least one Pro Apple Silicon Mac! Probably the MacBook Pro. It seems like Apple will settle on having 2 different Mac chips, an entry level one, and a pro-level one. Given that the M1 is so tightly integrated and similar in architecture to iPhones and iPads, I really am interested to see how similar the pro SoC is architecturally.
  • I want Apple to get back into the market of making its own displays. Apple is the only computer maker where 5K displays are commonplace, and they recently went into making a 6K display with the Pro Display XDR. I love the idea of that much screen real estate, but I don’t need the XDR tech. The display I most want to see is a non-XDR version of Apple’s $5000 Pro Display XDR. Ideally it comes in sizes of up to 32 inches with the same pixel density as the XDR display. 27 inches has been the upper bound for awhile; it’s time the biggest display got bigger. Ideally this “mass market” version of the display brings back features like a built in webcam (the XDR display doesn’t have one because the pros that would primarily need these displays actually can’t have a built-in webcam)
  • I think it’d be cool to see Apple drop a completely unexpected device! Before HomePod was released people speculated that Apple might be making a home assistant with a built-in screen which would have been much less underwhelming than the HomePod that Apple actually released. And with the core technologies Apple has at its disposal, it would be relatively easy for them to spin up a new specialized iOS variant made specifically for a home assistant like this.


  • on iPhone, PIP should have the option of a vertical split view where the video is on the top part of the screen and the rest of the UI slides down and is shortened. It’s a really specific feature but a floating PIP window is kind of useless on an iPhone and this is a really simple way to solve that.
  • Make Messages history search actually work, especially now that we lost Chatology on the Mac. Seriously, have you ever tried scrolling back through one of your conversations with someone to find a thing you talked about a few weeks ago? It’s maddening.
  • Fix that bug where I often can’t react to a message when I pull down the notification; it’s so annoying!
  • ramp up privacy features in Safari. Make things work damn well with password managers. Put the neural engine in the iPhone to use with an AI-powered Reader mode that is uncannily smart at de-cluttering web pages
  • A lot of advertisers will track your activity across multiple apps because they’ll see you’re using the same internet connection. iOS should allow you to direct all of a particular app’s network traffic through a VPN or proxy of sorts (iOS could let you do the same with private mode tabs, or automatically mark specific domains as getting this treatment). Bonus points if Apple offered their own free proxy that ran super fast in their cloud and worked transparently with the OS. This would severely limit advertisers’ ability to track you across different apps just because you share a network connection.
  • In light of all the work Apple is doing to limit tracking and the ecosystem around that, I’d like to see Apple bake in support for something like Scroll but on a wider scale. Scroll (recently acquired by Twitter) is a subscription service that lets you pay a monthly fee to eliminate ads on dozens of web sites, and the web sites get money directly from you in lieu of the ad revenue.


I mentioned iPadOS as the one platform of Apple’s that isn’t mature, and that’s kind of a half truth; iPadOS and iOS are basically the same OS, but it appears to me that when Apple announced iPadOS forking from iOS in 2019, it was because Apple’s intent is for iPadOS to seriously start diverging from iOS, and I am seriously hoping that 2021 is the year that we start to see this separation bear fruit.

  • Completely rethink drag and drop. Literally 90% of the time I invoke drag and drop on my iPad it’s accidental. When I intentionally invoke it the other 10% of the time, the drag and drop succeeds maybe 25% of the time. It’s abysmal.
  • Take major UI elements that used to be exclusive to desktop and bring them to iPadOS, in a way that’s touch optimized. Some want full macOS on their iPads. I don’t necessarily want that; macOS has too much UI baggage. Instead, I want iPadOS to gain UI elements like windows that can be arbitrary sizes and positions and can overlap. I want app menus. I want standardized interfaces/conventions that make things like context menus accessible. These would all of course be touch-first, but the mouse and keyboard would also have first class support as an optional way to use things more efficiently.
  • Replace the springboard with something new. Given that iPadOS didn’t get the App Library last year that iOS got, I’m guessing this was because Apple had bigger things in store for the iPad, and wasn’t just a side effect of iPadOS forking off of iOS.
  • Proper multi-monitor support is long due on iPad, especially now that you can buy an iPad Pro with a Thunderbolt port
  • A target display mode that works over the Thunderbolt port. This is a nitpick on my part but if you’ve ever used Sidecar you’ll notice that your iPad’s rendering your Mac’s screen as an H.264 stream. Even with a cable it looks atrocious. There’s no way that this isn’t a bee in some Apple engineer’s bonnet, and I hope that engineer took a chance to throw this feature in.
  • a Terminal app that uses containers/virtualization for developers. Ideally the containers can be shared or be accessed with multiple shells, and ideally these containers are accessible to apps. This could allow for someone, for instance, to make a programming text editor for iPad that has integrated terminals that let you run your code, and also would allow you to run servers and other background stuff. Bonus points if we can lock these containers to only run on the efficiency cores. Because all these UNIX-y things would be running inside of containers, they’d be safely sandboxed off and isolated from the rest of the OS, and you’d be able to do pretty much anything you want inside the containers.
  • I want enough APIs to exist that a tool like Alfred could exist on iPad. That would include things like global keyboard shortcuts, ability to bring up floating panels, an app having the ability to index a bunch of things in the background, and ability to run certain scripts that kick off automations of stuff.
  • Make Files app actually work, make it closer to a Finder app for iPadOS. I recently was trying to do some work with the Files app and it’s just pathetic. It makes me seriously question people like Federico Viticci who use iPad as their full-time computing platform; it’s just terrible to use and it’s really only useful to grab a single file quick.


  • Add ability to have workouts based on sustaining target heart rate for a period of time
  • Apple Workouts app should add workouts for elliptical
  • Ability to launch shortcuts from the watch by holding it up to an NFC tag
  • Keep speeding things up! Some things I know are just slow because the transition animations are purposefully slow. I think a lot of those nowadays can probably be eliminated.
  • Complications that can update reliably! Right now it’s a total crapshoot and if you have complications that are meant to display important and current information (like your blood glucose) you can’t glance at the complication and count on it being current.
  • APIs for custom watch faces. Come on, it’s time.


  • Above all I hope that engineers have swept through and just fixed a ton of bugs. I have personally reported several Big Sur bugs that haven’t been touched as of 11.4.
  • make the PIP window have buttons to skip ahead and backwards, giving it feature parity with the iOS PIP window
  • Streamline the security permissions dialog system. The current system makes it cumbersome to give apps necessary permissions to do things. I get why they do this, but when I’m walking a non-expert Mac user through this process I cringe.
  • macOS apps are full of permission dialogs that prompt you for your password, but aren’t ones that I trust. I think some actually might be capturing my login password from me and storing it without me knowing, instead of actually using the appropriate APIs to request an escalation of privileges. That, to me, is a huge security issue. There should be system-backed passwordless dialogs that can only come from macOS and that can’t be faked.

APIs/Services/Cross Platform

  • let merchants send the receipt to your Apple Card without the need to know who you are
  • Solution to let you put your ID/drivers license in Wallet app
  • I want to see better background APIs for iOS and iPadOS. Support for apps to do arbitrary things in the background has been around for years but when that happened, iPhones were substantially less powerful and as of right now I don’t think I know of a single third party app that is using background APIs to load things in the background and doing it well. I want to see newer, more robust versions of these APIs that can make better use of more powerful hardware but without being huge resource drains (for instance, maybe making use of efficiency cores)
  • Streaming video push notifications for security devices. My Ring notifications would be 100x more useful if I could just swipe down and immediately see a preview of the motion event inline
  • iCloud data should become fully end-to-end encrypted. Frankly, it’s ridiculous how hard Apple is beating the privacy drums of things like iMessages knowing full well that it doesn’t matter since your iCloud backup likely contains a lot of that same data and is fully accessible to Apple.

To be clear, these aren’t predictions, they’re just a wish list. If 30% of these come true on Monday, I’ll be pretty delighted. If over 2/3 of these come true, you might say I’ll be on iCloud nine.


Reflections From the Void

When I moved to Portland, I developed a new hobby.

Before the big move, Ben and I came up to visit our new empty house for a few days around the 4th of July to scope it out and just get a few preparation things done. I randomly encountered an ad for some chair that marketed itself as being made to feel like floating on water in a sensory deprivation tank. I found this claim to be kind of dubious and then, feeling prone to distraction, I decided I’d like to actually try out using a sensory deprivation tank. After all, sensory deprivation tanks are exactly the kind of weird thing you would expect to find in Portland, right?

And in fact, you sure can! I found a little place called Float On, not far from our house, and I decided to book myself a session.

(side note: I never did try this bean bag chair thing but I can pretty well guarantee you that it does not provide an experience comparable to using a sensory deprivation tank)

Stepping inside the building, I immediately got relaxing vibes. It was spa-like. Quiet and peaceful, with a lobby full of comfy furniture. When it was my turn, one of the staffers walked me into the room. The room was very warm and had a blue color to the lighting. The staffer walked me through what to expect and how to prepare myself, and left.

I got undressed, showered, then climbed into the tank, closed the door, and shut the light off.

For the first few minutes, my sentiment was “okay, now what?” I was literally lying in a tank of water saturated with epsom salt, kept at a temperature of about 93 degrees Fahrenheit. Initially my back muscles felt kind of tense, like when I first get into bed, but gradually my muscles felt completely relaxed. After that happened, my mind started to relax too.

I’ve come to realize that the trick to having a good float is not to try to have a good float. I had heard stories of people starting to visually hallucinate things in the tank, or getting into these deep states of relaxation or meditation, and of course I wanted to experience that too.

But you can’t just make yourself experience that. It’s meditation-like (and in fact, if you want to start a meditation practice, floating would be a perfect way to get into it since it forces all other environmental distractions out). I’ve had good float sessions and bad ones. The bad ones for me are the ones where I feel too antsy to properly relax. When I’m having a good float, my mind just gets away from me. I don’t think I’ve fallen asleep floating, but I will often end up in a state close to it. My thoughts will start to wander aimlessly and 10 or 15 minutes later I’ll catch myself.

I floated most recently last Friday. Last year I had gotten in one last float in March, then a few days later Float On announced they were closing indefinitely. When I first got my vaccine appointment, I knew one of the very first things I wanted to do once I was fully protected by the vaccine was go for a float. It was the self-care I knew I needed.

When I went to float last Friday, I resolved to not expect anything of myself while floating. I knew I’d probably be kind of excited, and I didn’t want to build up the experience in my head and then just find myself bored half way through. I told myself that if my mind kept racing the whole time, that would be just fine. If nothing else, my muscles would be getting great relaxation from a long epsom salt soak. And by not putting that pressure on myself, the float was great and I was surprised when my 90 minutes were up and the music started to gently play to indicate it was time for me to get out.

Sensory deprivation tanks are pretty popular; if you live in a decent sized city you probably have a place available near you. My local floating place has six different rooms, each with different kinds of tanks in them. If you’re the claustrophobic type, this probably isn’t going to be a good experience for you. But it’s one of my favorite things to do regularly, and when I come out of it, I feel a level of relaxation that nothing compares to.



a building with a sign that says 'museum of whimsy'. Never have I been so disappointed for a museum to be closed.

It’s early Friday afternoon and I have an entire weekend ahead of me as I write this but I already feel like I’m at the point where my vacation is winding down and the responsibilities of going back to work are already staring me in the face.

Last week I celebrated two fun milestones: I became fully protected by my COVID vaccines, and I celebrated my birthday. It was a busy work week for me. I decided to schedule some vacation time to celebrate both.

On Friday after work I went and floated in a sensory deprivation tank for 90 minutes, the first time I was able to do so since the initial lockdowns of the pandemic last March. I’m a huge fan of sensory deprivation tanks and I’ll post about it shortly!

On Saturday I had (vaccinated) friends over for a barbecue that also served as a birthday get together. We got to enjoy each other’s company unmasked for the first time in ages, and the experience was therapeutic. We had DQ ice cream cake and I am pleased to say it tastes pretty much just like I remember it as a child (side note: Dunkaroos are also back in stores now and they are similarly amazing).

Since then I’ve spent the week living my best life. I took a couple of road trips: one to Astoria, and another to Eugene. I dined indoors. I did some gardening. I took multiple trips to Home Depot and finally fixed our drip irrigation system. I spent a lot of time outside. I entered a grocery store for the first time since last March. I spent a lot of time purposefully appreciating simple and relaxing moments.

Although I’ve got lots of fun projects I want to do on my computer, I spent surprisingly little time using it. I just wasn’t drawn to it that much. I do have a soldering project that I might do this weekend though.

I accomplished just about all the things I wanted to accomplish, and I still have the weekend ahead of me. I would have liked to have dove back into the habit of practicing learning the piano with my Lumikeys keyboard, but that’s just something to save for the future, I suppose.

I kind of knew in the back of my head that I needed a break. I hadn’t really taken any time off since the holidays, and that break was somewhat dampened by not being able to see family (and also emergency surgery the cat needed). The newfound freedom and vanishing stresses of the pandemic allowed me to properly enjoy this week off. Not only that, but even as this little vacation winds down, it isn’t even Memorial Day yet, and the whole summer is ahead of us.

I knew I needed this time off, but actually experiencing it, I now realize the extent to which I needed it.

100 Posts for 2021

I am happy to say that as of yesterday, I am back on schedule to have published 100 posts by the end of this year.

The hiatus of posts earlier in the year wasn’t from me not writing anything; in fact, I was writing a lot! But most of the posts were in the My Sweet Setup series, and I had unresolved Mac Pro issues, and it didn’t feel right to post that series until I had that issue resolved (since I consider my Mac Pro to be the lynchpin of my setup).

I’ve had a solid posting streak recently as well! This marks either 20 or 21 days of at least one post per day.

I’ve also pushed myself to publish more things, and hit that Post (or schedule) button more quickly without trying to polish each post to within an inch of its life.

I’m also just trying to post more random stuff that comes to my head. Not everything I post has to be a life-changing epiphany, and if I always hold back on posting stuff because I’m waiting for the perfect thing, I won’t be refining my own writing skills in the meantime.

Anyway, I hope this has been engaging filler content, and this gets me 1% closer to my goal, and it keeps my writing streak going!


Standing for Something

I want to see more companies start to actually take a stand on issues.

That’s one of the things I respected about Basecamp. Until their cofounders kind of revealed themselves to have some serious issues, they had a track record of striving to be good citizens.

For the most part, companies love to seem like they’re taking a stand on issues. They love to put out commercials paying lip service to how they believe immigrants make America great, or they’ll talk about how much they value the LGBT community, only to not really act like it when push comes to shove.

I know plenty of tech companies that love to talk a big game about their values, but their political donations paint a different picture. Plenty of tech companies get the opportunity to stand up for the vulnerable, but they don’t bother.

The businesses that are going to win in the next decade are going to be the ones that take being principled to the next level. These are going to be the businesses that won’t just put out feel-good statements; they’ll have policies both internally and externally facing about what constitutes good conduct. They’ll be proud to be vendors to green energy makers, and they’ll turn down the lucrative contract for the oil company.

These winning businesses will win because they’ll be authentic. And traditional companies will try to brand themselves as authentic, but it won’t work for the same reason that millennials killed Applebee’s; authenticity inherently can’t just be the suit you put on. It has to be who you are.

April 28, 1995

homer simpson sitting on the hood of his car staring at the stars
Today marks 26 years since I said goodbye to my mom for the last time as I walked out the door to wait for the bus. Later that day, she and my brother Brandon died in a car accident on the way to go shopping.

It’s so weird, too. With every year that passes, the memories grow increasingly distant overall, but it’s interesting what sticks.

Her name was Shelly, and we were very close. I was kind of atypical as a kid, not into sports, more into reading books and playing indoors, and she understood me.

My memories are of oddly specific things. When she would chat on the phone she would always twirl her hair in her finger, something I later did in grade school (my dad insists that she actually would idly tie her hair in a slip knot with her fingers while talking on the phone and that he once snuck up to her and pulled it down into a knot). Before I was in school we’d watch daytime TV together, like talk shows and The Golden Girls. Maybe some occasional Supermarket Sweep in there too.

I remember her playing a Tetris clone called Emlith on our Windows 3.1 computer back in the day.

The memories are all unique and special to me, but inconsequential. I think I remember what her voice sounded like, but I’m less and less confident (I can remember what her yelling voice sounded like for sure; she was routinely yelling at either me or more likely my brother).

I can’t even imagine what life would be like if she hadn’t died anymore; it’s kind of impossible. I’m not sure I’d even be able to recognize that life. I don’t know if that would be a better or worse life than I have right now, but it would have been the life where I would still have my mom, and it was stolen.

Sometimes I wish I could take a glimpse at what that life would have been. Just a glimpse, though. I don’t want to trade realities because that would probably force me to trade most of my friends and loved ones I have today.

If you’re wondering about the Simpsons image, it’s from the end of the episode Mother Simpson, after Homer is forced to say goodbye to his mother again. Instead of fading to black, the episode ends with Homer sitting on the hood of his car, looking off into the distance as the sun sets, and the music that plays is just perfect for the moment.

You don’t see Homer’s face, and he doesn’t say anything, but every time I watch this episode I know exactly how he’s feeling. It’s impossible for me to watch without getting a little teary-eyed.


Basecamp and Leadership

So, Basecamp announced some internal changes this week for how they are going to run their company.

Over the years, Basecamp has built up a reputation for resisting some of the hustle culture associated with so many startups, and for working smarter, not harder. Among other things, they invented Ruby on Rails, they have been big proponents of remote work since long before the COVID pandemic, and being incredibly transparent with the world about how they operate, selling books and workshops about how they work, and even sharing policy changes on their blogs.

Which brings us to Jason’s post this week.

His bullet points (parenthesized parts are mine):

  • No more societal and political discussions on our company Basecamp account
  • No more paternalistic benefits (referring to some of the allowances they offered for fitness and wellness and buying from farmer’s markets)
  • No more committees (which includes shuttering a recently spun-up DEI committee)
  • No more lingering or dwelling on past decisions
  • No more 360 reviews
  • No forgetting what we do here

It gives off some serious white dude entrepreneur energy.

These are fucking stupid decisions. Some are even contradictory. For instance, if you’re getting rid of benefits because they’re paternalistic, why would you add a policy as paternalistic as “you can’t talk politics at work”?

Twitter has weighed in on these and has articulated the issues better than I could have:

This has prompted Basecamp employees to speak up as well. Jane Yang posted about the struggles of David and Jason’s reluctance to get on board with protecting Basecamp’s most vulnerable users, and their disappointing retreat into making decisions unilaterally for the entire company. The employees that put on Basecamp’s Rework podcast put out a somber message announcing they are putting the podcast on hiatus (a disappointment given that Rework routinely features businesses that are challenging the status quo of traditional ways businesses are run and govern themselves).

Ironically, if Jason and David had a committee filled with diverse people who were empowered with making decisions of this nature for the company, this committee likely would have pushed them to understand the folly of their reasoning.

Instead, they have doubled down on this decision. DHH posted a follow-up of sorts that seems to imply that the issue isn’t that his decision is bad, but that there was nuance to how it was announced that we must have missed out on.

And I’m sure there are plenty of other white dudes that feel that Jason and David should stay the course (case in point), and plenty are likening this to a Twitter mob to try to paint it as a frivolous thing that the public gets up in arms over for a minute (another case in point, also from John Gruber). This isn’t a Twitter “hate machine;” it’s the public very quickly coming to terms with the fact that two revered leaders in the community have revealed themselves to have some really toxic characteristics and they’re holding Jason and David accountable for it.

This is where I had several paragraphs about how its time for companies to start being leaders and start actually taking stances on social issues (I’ll write about that later I guess!) but actually, it turned out there was more to this story: these policy changes appear to be in response to a lot of internal push from employees after it was discovered that employees were circulating a list of customer names they thought were funny (source: The Verge).

And that’s where the decision went from seeming somewhat boneheaded to demonstrating full-on terrible leadership on Jason and David’s part, and this is being confirmed by multiple Basecamp employees. The sting is greater given how Basecamp have painted themselves as leaders in terms of how they run their business. David especially has been a vocal critic of Big Tech, even going so far as to publicly decry Jeff Bezos, who actually co-owns Basecamp with them.

But now that the shoe’s on the other foot, David and Jason are behaving pretty much exactly like the kinds of people they insisted they didn’t want to be.

I’m pretty sure Jason and David might be too far gone at this point on the matter, and they seem to want to keep digging their heels on the issue. To that effect, I feel for the Basecamp employees that are probably having a really bad week at work and are faced with a pretty ugly decision.

Bring this up in your next 1–1 with your boss. Let them know this isn’t acceptable and that you expect far better from your company. Make sure your boss understands the importance of meaningfully being able to bring your whole self to work, and make sure your boss understands the weight that comes with a white founder weighing in on a serious issue and being dismissive of the idea that there might be some racism behind it.

And although the overwhelming sentiment on my Twitter feed is one of disappointment toward Basecamp’s founders, I’m keeping a close eye on the people who quietly (or not-so-quietly) are cheering on this decision and think it’s a refreshing change of pace. Because I’m seriously worried that the people in tech with power are walking away from this incident with the entirely wrong message.


My Sweet Setup: Carbon Copy Cloner

screenshot of the Carbon Copy Cloner app
Carbon Copy Cloner is one of those tools that focused on doing one particular thing, but it does it incredibly well.

The thing: copying everything from one drive on a Mac to another, and copying it so well that if you boot your startup disk, you could boot up straight from the clone disk and not miss a beat.

Thanks to things like automatic iCloud backups of phones and people putting stuff in the cloud, most computer users nowadays are more likely to have some kind of backup, and if they lose their device or it dies, they probably won’t lose much data.

But if you consider your Mac to be mission-critical, and you want to be able to not just survive your hard drive dying suddenly, but be back up and running right where you left off in a single reboot, Carbon Copy Cloner is perfect.

If you want to do an OS upgrade but you want some assurance that if it gets bungled, you can put your computer in the exact state it was in before you did the upgrade, Carbon Copy Cloner is perfect.

If a friend comes to you with an old Mac and asks “can you get the data off of it?”, Carbon Copy Cloner is perfect.

If you’re taking your computer to the Apple Store for repair and you don’t want to manually re-install everything when you get your computer back with a wiped drive (and this is super common now), Carbon Copy Cloner is perfect.

Carbon Copy Cloner is the only tool I reach to for cloning drives; it’s written by an ex-Apple engineer who has great attention to all the little details involved with cloning a Mac disk. And nowadays, between APFS containers and volume groups and macOS recovery volumes, you’ll want to use a dedicated tool like Carbon Copy Cloner to make sure you are making a true copy of everything.

It sounds a little nerdy, but I recommend it for the non-nerds out there too, because it’s such an easy-to-understand way to back up. You set up CCC to clone your boot disk automatically a few times a day, and you’re all set. If you accidentally delete a big folder of stuff, it’s not at all hard to restore the files; just open up the clone drive, find the folder you deleted, and copy it right back.

They say that if you’re backing up regularly but you never try to restore from the backup, you don’t really have a backup; you just think you have a backup. With CCC, verifying that your backup is good is a breeze; you just have to boot from the clone drive and make sure everything looks okay.

My only recommendation: for your backup drive, pick an SSD, not a spinning disk. You might spend a couple hundred bucks more on an SSD, but the SSD is easily 10–100x faster at file transfer.

Using CCC is a little nerdy, but it’s not difficult to pick up, it’s mostly a “set it and forget it” kind of tool, and sooner or later, it’s going to save your bacon.


Constant naming and lookup in Ruby

I thought I had a pretty good understanding of how constant lookup worked in Ruby, but I encountered a surprising piece of behavior recently and I wanted to share it.

We had a god model at work that contains thousands of lines of code, much of which is in methods that aren’t truly core to the model. In a long-term attempt to clean this up, we started by moving some of the methods in this model into dependency mixins, like so:

class User
  include User::LoginDependency
  #lots of methods
module User::LoginDependency
  #login-specific methods go in this file

My pair and I started moving methods over, and it all started out easy enough.

Then we encountered something surprising: a method in one of the mixins referenced a constant from the god model, and we got the error uninitialized constant User::LoginDependency::CONSTANT.

This, to me, was surprising to see. Ruby, after all, is a dynamic language with late binding, and I expect things like this to be figured out at runtime. My first hand-wavy assumption was that constant lookup works in a manner similar to sending messages to objects, which made me expect that to work.

Turns out, how you name something makes a difference. If I want to have a module called User::LoginDependency, there are two ways I can define it:

module User
  module LoginDependency

module User::LoginDependency

I can get to both by typing User::LoginDependency, but the key difference is that in the first case, Ruby understands it as “a module LoginDependency nested inside of the module User,” and in the second case, it’s “the module User::LoginDependency”.

For the nested version of User::LoginDependency, if Ruby doesn’t find the constant inside of LoginDependency, Ruby will work its way up the namespace chain and look for the constant in User. but in the latter case, there isn’t a next level up that you can look, because User::LoginDependency is a top-level defined constant.

For this refactoring, my pair and I made the decision that if the new module’s methods were the only ones to reference a given constant we’d move the constant over too, otherwise we’d leave the constant in the original model and update the new dependency mixin to reference the constant’s fully qualified name; e.g. User::CONSTANT instead of just CONSTANT.

Alternatively, we could have switched these mixins over to being defined with a nested namespace, but in our case User is a class and we didn’t want to be re-opening that class just to add these modules that would later be included. Besides, our approach seemed more appropriate, because it keeps the mixin-specific constants private to that mixin, and the shared stuff is all together in the model that those mixins are all included in.


Knowledge Work Is Different

Every now and then, I’ll be feeling out of it and I’ll step away from work. Maybe I’m feeling sick or fatigued, or maybe I heard a gutting piece of bad news going on in the world. Whatever it is, I know I don’t have it in me to keep doing my work, and I’ll step away.

Afterwards, I might go do some dishes or simple chores around the house and then the guilt sets in: wow, was I really tired or sick, or just lazy?

In jobs where I primarily worked with my hands, it was easier to be resilient to these kinds of things. I could sling sandwiches in high school just as effectively when I was depressed, or dead tired from being up till 3am the night before for prom and stuck working anyway because my coworkers were all assholes and never covered for me even though I covered for them constantly (not that I’m bitter about that or anything).

But I don’t work in a sandwich shop anymore; I do knowledge work. And knowledge work is a whole different beast.

I can’t expect my brain to work at its peak performance with distractions and fatigue and sickness. When I’m doing my most complex work it requires my brain working at its full capability.

I also have situations where the opposite is true, and I wouldn’t have been able to go in and make sandwiches, but I can get some stuff done anyway. Maybe I’m contagious but feeling sharp, so I get my work done from home without getting others sick. Or I can stick around my house while an electrician comes to fix something.

And sometimes, I just need to remind myself that my brain doesn’t think in solid eight-hour chunks of time. When I know my brain isn’t up for deep work, I’ll grab something else off my plate that’s lower mental energy but needs to get done anyway.

Hell, maybe it’s 3PM on a beautiful sunny afternoon and I decide I’d rather spend that daylight enjoying the weather and getting some fresh air, and after dark I’ll come back to my office and knock out that task (and I’ll probably do it better because I’ll have spent my walk idly thinking about how I’ll approach the problem).

In knowledge work, your brain isn’t just a dial that can be cranked up on demand. If it were, your boss’s job would be super easy:

homer asking his Globex employees if they're working
homer's employee responding 'yes sir, mr simpson!'
Homer: Could you, um, work any harder than this?
Employee: Sure thing, Boss
employees suddenly typing faster
Homer: Hey, call me Homer.