Author: Dachary Carey

I wrote a… best-selling iOS app?


I wrote a… best-selling iOS app?

Hey! Remember that time I wrote an iOS app to keep track of my Elden Ring and D&D play through details, and released it to the App Store?

Why, I remember it like it was just last week…

Turns out, when you email industry-specific news sources with topical news that has an interesting angle, some of them will write about your stuff.

My little hobby app, Shattered Ring, has been featured on a ton of video game news sites, including:

After the App Store approved my app last week, I spent an hour or two reaching out to 5 video-game-related news sources every night. As far as I can tell, Video Games Chronicle was the first one to write about it on Friday, and then it started showing up everywhere. There are a ton of other websites that credit the original VGC article, but a few also seem to have gone to the Shattered Ring website and actually read up on what the app is and does.

It was Kay who noticed on Friday evening that my app was #7 in its category (Entertainment) on the App Store. And throughout the evening, we watched it slowly climb. The dog woke us up around 6am on Saturday asking to go outside, and I made the mistake of checking the app on my phone. And that’s when I saw it:

Whoa. #1 in its category on the App Store. I. Wrote an app. That climbed to #1 in its category.

Needless to say, I wasn’t getting back to sleep after that. I got up with the dogs and let hubby sleep in.

The problem is, I had never written an app before. I had no idea how many apps sell on the App Store. What did #1 in its category actually mean? And what did people think of my app?

I waited impatiently for Apple to publish its sales data. Eventually, I saw that #1 translated to 184 units sold. Wow! Nearly 200 people had bought my app!

Of course, Apple takes its cut. And I should hold back a share for taxes – I spent enough years as a self-employed writer to know the government has to have its cut. And then there were expenses I incurred in writing the app; things like domains for the website, web hosting, Formspree for the contact form, and some apps I used while writing the app. After expenses, I would net about $80 from my meteoric rise on the App Store. Which Apple would pay me up to 45 days after the last day of the month in which the sale occurred, so something like two months from now. So, not a life-changing experience. But definitely something to be proud of.

And then the reviews and emails started trickling in. Where was all the data? Why wasn’t there a ready-made list of NPCs, game locations, and quests just waiting for people to check off their progress?

Uh oh. Apparently what I thought of as an “RPG task tracker” and what other people thought did not totally line up – at least in some cases. I was thinking of it as a notebook replacement; something that would make it easy to connect NPCs to Locations and Quests, and store notes about each, and even give me a roundup of stats for things like how many quests I had completed and which locations I had cleared versus the ones where I had run away screaming and probably should go back when I was higher level. But some people, it seemed, wanted more than that for their $3.

I apologized to the folks who had expected more, and bookmarked the link to request a refund from Apple – and even added it to a FAQ on the Shattered Ring website. And I responded (nicely, I think) to the folks who posted 1- and 2-star reviews of it on the App Store. I revisited the wording on my site and in the App Store description and tweaked the wording, even though I thought it was clear what the app is and does.

I knew that I wanted to make some navigation improvements to the app, and there were also some features I had wanted to add but didn’t want to wait to ship in v1 – but now I had an app in production with nearly 200 users actually using it. This was the part I hadn’t thought too much about. Now people who had paid me money were relying on my app. I had a responsibility to them. So I didn’t just dive into new features and navigation improvements; I started writing every automated test I could think of to try to make sure that my changes wouldn’t break anything, or if they did, my tests would catch them.

Automated UI tests were slow going. I’ve only done a little bit with UI tests, and I’m still not familiar with how to refer to all of the UI elements for testing purposes, so there was a lot of trial and error. And my app is stateful (and so are my UI tests, at the moment, although I know in principle I need to refactor them to not be) so I have to wait for the entire suite to run every time I iterate, which started out at about ~15 seconds but was up to a minute by the time I went to bed.

Unfortunately, I saw another review before I went to bed that made me worry: a user was reporting a crash. Not a crash! Quirks, I could live with, but crashes are not ok. So I had a semi-stressful night thinking about how to resolve that crash, and how many more tests I had to write before I could go making big changes to the app.

I woke up this morning and started in on tests. But when I saw Apple’s data from Saturday’s sales confirming that more people had bought the app on Saturday – it hovered around #1 or #2 all day – I had a sinking feeling. I couldn’t leave all those people with a buggy app. I had to fix it, even if my automated tests weren’t done yet.

So I shifted gears. I spent some time adding a small tweak that a lot of people were requesting – the ability to edit NPC, Location, and Quest names (apparently iPhone autocorrect is aggressive!) – and finding and fixing the bug. It was a particularly snarly thing for me – I was presenting a sheet during a particular UI flow, and the sheet wasn’t dismissing after creating an object. So if users pressed the “Create” button again trying to get the thing to work, it would crash on them. Although they could swipe down to dismiss, and the object would be created.

I couldn’t figure out why it wasn’t dismissing (I still don’t know) but I thought back to a review that my lead had given me on the SwiftUI app I wrote for work, and his comments about not passing too many @State variables back and forth between views for navigation. So I refactored the navigation to use a different view pattern, instead of presenting a sheet. (I do present a sheet in other parts of the app and use a couple of different ways of dismissing it – using an Environment variable with the dismiss() API, and using @Binding vars to change state. It bugs me that I couldn’t figure out why this one wouldn’t dismiss.)

Anyway. Unfortunately, after refactoring the navigation and adding the name edit functionality, my update touched 28 files in my app. I did my best to manually test all of the flows – repeatedly – since my automated tests still aren’t fully implemented. And then had to figure out how to ship an update to the App Store. (Apple, I love your products, but I do not love your documentation.) And the next thing I knew, it was 7pm on a Sunday and I have lost my entire weekend to app maintenance stuff.

I hope the update I shipped fixes the bugs. I will probably be low-grade stressed about it until I see reviews or get user feedback that I haven’t introduced some horrible new bug. But the whole thing drove home something I hadn’t really thought too much about while I was writing this app – now that I have taken money from people, I have a responsibility to them to make sure the thing I sold them actually works. And, being a people pleaser, I will probably sink way too much of my free time into shipping new features based on requests. I want people to be happy with the thing I made. I want them to like it.

So, yeah. I wrote a best-selling app in its category on the App Store, at least for a little while. And at some point today, it made it all the way up to the #5 top-selling app on the App Store across all categories. That is pretty cool for a little hobby app that I wrote!

But, to quote a great line:

With great power comes great responsibility.

There may be hundreds of people using my app now – but now I owe them something in return. And that is stability, and maybe also an app that gets even better at doing the thing they want to do with it.

I guess now I’m a real developer?

P.S. I am sorry to have disappointed all the folks who want an Android version. I had one angry person on Twitter say: “Why on earth anyone would make an iOS exclusive app is beyond me. Literally 70% of the mobile market is Android. Is this some American thing where the Apple delusion is just accepted?” Nope! Just that I don’t own an Android device, and I don’t know Java or Kotlin, and I’m one person who wrote this app quickly in their free time outside of their full-time job and family/social responsibilities… sorry, Android user, that an Android dev hasn’t done the same by now. Although now that my app is out in the world, and has been splashed across a boatload of video game news sites, maybe some Android or multi-platform dev is out there writing something better!

I wrote an iOS app!


I wrote an iOS app!

I’ve had a handful of iOS app ideas in the past few years that I could never quite figure out how to turn into reality. I found it frustrating, though, because I really want to use the apps I’ve had ideas for. Finally, I’ve had enough practice with smaller projects that I managed to turn an idea into reality: my first iOS app is live on the App Store!

May I present: Shattered Ring, the Elden Ring task tracker you didn’t know you needed.

Yes. I wrote an iOS app to help me keep track of NPCs, locations, and quests in a video game I’m playing. (In my defense, though, I’m used to playing open world RPGs that have quest-tracking systems… and I’m a more casual gamer… and this makes it easy to keep track of threads and dive in and out without having to play 20 hours a week just to remember what I was doing.)

It’s the first app idea I’ve managed to complete. I know it’s just a teeny little hobby app, but I couldn’t be prouder. Now that I’ve gone through the whole process from start to finish with this app, I’m hopeful I’ll have the experience I need to turn some of my other hobby apps from ideas into reality.

If you’re into Elden Ring, check it out and let me know what you think! Or if you play D&D, or any other TTRPG, it also makes a great RPG game tracker. I’m using it in the two D&D games I’m in.

I wrote this in SwiftUI, using some of the Realm DB Swift SDK goodies that they’ve written just for SwiftUI. I’ve complicated my life a little with a data model that means it isn’t just a simple build, but I can still use some of the SwiftUI property wrappers and it’s pretty magical. And of course, I had to spin up a website for it – which I did in Hugo because it’s fast and easy (and not WordPress – really need to migrate this blog).

Hope some folks find it a useful little app! I know I already do.


CLI tool version complications

I’ve been playing around with different versions of the realm-cli for some documentation projects. That means installing and uninstalling various versions via NPM. I kept getting tripped up on this complication so I’m documenting it here in case other folks find it helpful.

NPM uninstall

Using npm uninstall is simple, right? Just run it with the name of the package you want to uninstall, and maybe pass a few flags like -g if needed, and the package is gone.

So here’s what my command line looked like today:

-> npm uninstall -g realm-cli
-> realm-cli --version
realm-cli version 2.0.0-beta.3

Aaand…. that went on for a while. I kept running various permutations of NPM uninstall from different directories with different flags, and every time I checked the realm-cli --version, I kept seeing it sitting there, taunting me.

I did what any good burgeoning developer would do. I started down a StackOverflow rabbit hole. I got my first good clue when I found this hint:

-> npm list -g

Aha! This tells me which global libraries are installed and where they’re located. I’ve got four of them, and they’re at /usr/local/lib:


Now the astute among you will probably spot the problem pretty much immediately. I went a bit further before I figured it out.

I popped into /usr/local/lib. Didn’t see my realm-cli there, but I did see node_modules, so I figured that was where I needed to be. Changed directory into there, did a little ls, and Bob’s your uncle:

bluehawk m mongodb-realm-cli npm

Oh… wait a minute. I’ve been doing all kinds of permutations of npm uninstall realm-cli. But the name of the thing I’m trying to uninstall is mongodb-realm-cli. Even though the tool is all realm-cli this and realm-cli that, the name of the thing is actually mongodb-realm-cli.

Maybe this is something that a more experienced developer would check right away. But this is the first time I can remember encountering a CLI tool whose name is different than the syntax you use to invoke it. When I do the realm-cli --version and get back realm-cli version 2.0.0-beta.3 instead of mongodb-realm-cli version..., that reinforces my perhaps naive conflation of package name and the syntax you use to invoke it.

Anywho, I ran into this a few weeks ago when changing versions of the CLI, figured out how to fix it, forgot about it between then and now, and went through the whole dang thing again this morning. Documenting it here for myself, so the next time this happens I can hopefully remember how to resolve it more quickly, and for anyone else who runs into something similar.

Why does the name not match the syntax?

I’m doing some inferring here, but here’s my theory.

MongoDB acquired Realm a couple of years ago. I did a little poking around, and NPM has a realm-cli that was last published 4 years ago. My guess is that for some reason, there isn’t access to remove that old realm-cli package, so MongoDB had to append its name to the front of its version of the realm-cli to differentiate it. So if you’re using Realm these days, you want mongodb-realm-cli.

Now I’m curious how often things like this happen with acquisitions…

Docs-as-code workflow: the missing link; a collaboration tool


Docs-as-code workflow: the missing link; a collaboration tool

Docs as code is a technical documentation movement to use the same tools that developers use in the documentation workflow. It’s a great way to enable collaboration with developers, and now that I’ve been doing it for more than a year, I can’t imagine writing documentation for developers, with developers in any other toolchain. But one thing is missing from most docs-as-code workflows: a collaboration tool to easily share the work and solicit feedback.

Why do you need a collaboration tool in a docs-as-code workflow?

One might question why you need a collaboration tool beyond the git provider when you’re writing technical documentation for and with developers. Just commit, push it to your preferred git provider (I mostly use GitHub), make a pull request, and request review.

Sure, fine, that’s all well and good for a simple text change. But what if you’re adding new pages, or entire new sections, to the documentation? What if you’re adding images, callout elements, and other styling? What if you’re changing visual elements on a page? Reading text in GitHub is easy enough, but anything more complex than that, such as clicking through the navigation of a new page or new sections, seeing images in line with text, or really looking at any visual change adds that much more resistance to reviewing a PR.

If it’s not something that parses easily in text, or if it’s a change to linking or navigation that wants human verification, whomever you’re collaborating with must maintain a local version of the documentation site, pull down the branch or check out the PR locally, and then build the site locally in order to view the changes. If the reviewer doesn’t already have a local version installed, how much longer do you think it’ll take them to review your documentation PR? Ugh, now I’ve got to install this web framework, clone down the repo, and then get the whole thing set up just to check out these three new pages… I’ll do it later.

Then you have the issue of whether your reviewer is a non-technical stakeholder. What if you need the product manager to review and sign off on your documentation before it can go live? What if someone in marketing, or someone on the leadership team, wants to see details about how the hot new feature works before you push publish? That person isn’t installing a local and cloning down a git repository just to look at a few pages. That person may not even have access to the git repository.

What you need is a collaboration tool that doesn’t require the reviewer to have a local install of the documentation site at all.

Enter Tugboat, the missing link

So how do you solve this problem? There are a number of ways you might approach it, but I think the best case scenario is to add a continuous integration tool that can build your site before you push the changes live. Unfortunately, for many technical writers, setting up that tech stack is a bit beyond us.

Setting up a CI solution requires adding services, having access to servers where the site can be deployed, etc. The organization may not have the appetite for that kind of infrastructure investment just for documentation. Even if it does, you’ll need a developer to set it up and maintain it. But even if you can get a developer’s time to set it up, that’s the kind of project people wander away from, and when it inevitably breaks at some future point, good luck getting a developer’s time again to debug it.

This is where Tugboat comes in. It’s a git pull request builder that automatically generates a working version of the website for every pull request/merge request. (This is also a developer tool that developers use when building websites, so it’s a good match for the docs-as-code workflow. And who among us doesn’t love introducing developers to a good tool they’re going to love?)

How Tugboat works

Using Tugboat involves a few steps: set up a project in Tugboat, link it to the git repository where your documentation site lives, and commit a config.yml file that lives in a .tugboat folder at the root of your directory.

The config gives Tugboat the instructions it needs to build your site. The documentation site (that I write!) offers starter configs for some common static site builders, as well as things like building a WordPress or Drupal website, with more configs and tutorials added as they’re requested.

While the sample config files are helpful, you probably don’t need one that’s specific to your static site builder. I made the Hugo and MkDocs files myself by working from the old config for our deprecated GitBook legacy documentation site. If you do get stuck, I’m happy to help, or Tugboat has a Support Slack that anyone can join to ask questions.

With Tugboat configured, there are a couple of ways to view the website previews; either directly in the Tugboat UI:

Or you can configure Tugboat to post the website preview right to your pull request in your git provider, either as a deploy environment or as a link in the comments on your PR:

At this point, anyone with access to the git PR can click on the Tugboat link and view a live preview of the site. You could also copy the URL and send it to any non-technical stakeholder who wants to review the site – be it a product manager or a member of the leadership team. Anyone you send the link to can view the site, with no need to have a git or Tugboat account. For a docs-as-code project, developers who are reviewing your PRs can do it in Tugboat, without checking out the PRs and building them locally.

This is the Tugboat preview for this site (just an example site for testing):

That’s a fully working version of the site, with clickable links and everything, just as if I had built it locally. It’s hosted at a temporary URL at Tugboat, and when I merge the PR, the Tugboat preview gets deleted automatically – no need for me to do any cleanup. If I make changes to the PR, the Tugboat preview can be rebuilt to include those changes.

Conduct simultaneous reviews easily

With this collaboration tool in my pocket, I can have anyone I want review changes to the documentation site before it goes live. I don’t have to worry about maintaining a staging or QA server for the documentation site, or getting stuck with review bottlenecks while I wait for a developer to deploy changes so someone can look at my work.

Even cooler is the ability to conduct simultaneous reviews easily. Say, for example, my company has a new user admin feature coming, so I update the docs and make a PR. A Tugboat preview gets generated, and I can share it with the product manager and/or developers responsible for that feature for review.

Separately, there’s a new tool being added to my company’s app. As long as I’m using a proper branching workflow and branching from master, I can create those docs independent of the user admin feature above. Make a PR for that documentation, and a different Tugboat preview gets generated. I can send those docs to a different product manager and development team for review. That review can be happening simultaneous to the one above, and whichever review is completed first can get merged into the documentation.

I don’t have to worry about the user admin review being done, so I can then get the documentation for the new tool loaded to the staging server for sharing with relevant stakeholders, etc. And if the documentation for the new tool gets approved first, I can merge that PR and the Tugboat preview goes away, while the link to the user admin documentation change persists.

I’ve been super happy with having this tool in my technical documentation workflow, and I wish I’d had it at prior jobs. Now that I do, I can’t imagine working in a docs-as-code workflow without it.

Learning to code: redux


Learning to code: redux

A little over a year ago, I wrote here about how I was learning Swift because there are a couple of apps I want to write. I’ve gone through a few courses online, and had started working through an Everyone Can Code book: AP Computer Science Principles with Swift. I was making good progress, had done the data modeling for my “main” app, but then got a little overwhelmed with the idea of actually starting it. Like, how does a n00b sit down and begin writing an app for the first time?

Then came some health issues last fall, and then Christmas, and then this spring the whole world has turned upside down…

So here we are a year later, and I haven’t written my apps, although I’ve been getting cozier with the code needed to modify the functionality in the static site generators we use for work (Jekyll and Hugo) and my Git foo has gotten to be second nature. But the actual proper “learning to code” I had wanted to do has been nagging away at me. So when one of my co-workers posted that Stanford University’s Engineering department was offering a free intro to coding class, Code in Place, I jumped at the chance to sign up.

Fast forward to six weeks later. I was one of 10,000 interested geeks-in-training who got accepted in this massive international experiment of teaching a diverse student base how to code in Python, entirely online.

I attended all the “sessions” – video chat classes, of sorts, consisting of a group of 10 students working under a “section leader” to practice solving various problems with code. I’ve watched 14 recorded lectures via YouTube, led by Stanford instructors, and have worked through all of the slides and code from each lecture. I’ve learned about decomposition, control flow, images, graphics, and animation – in addition to things like variables, expressions, functions, lists, and dictionaries – all the fundamentals to build a solid coding foundation.

My “deliverables” for class have included three assignments, which I uploaded to an autograder to see if they functioned and passed various tests. I also did a “diagnostic” to help determine which concepts I understood thoroughly, and where I needed additional help. (That was supposed to take an hour, but it took me an hour and 40 minutes – but I worked through the whole dang thing, without bothering my husband the experienced web dev for help, until I got it all done and it all worked.)

Now, we’ve arrived at the final week of class, and I’m doing a final project. For this final project, I’m writing an app! Finally. Not one of the apps I had planned to write a year ago; this is a new idea, which is based on a recent experience I had at work and seems well-suited to be a Python project.

Here’s the premise: the technical documentation I write at work contains screenshots. The screenshots are images taken on various pages of our app. When we make changes to the app’s UI, I need to update the screenshots to reflect the new UI. Sometimes that’s easy, like when the User Profile options change, I know I need to update docs around the user profile. But what about things like adding a git provider, or changing the API key, which are options that you get to through the User Profile menu? It might not be obvious to me that I need to update those screenshots in seemingly unrelated sections of the documentation.

For my Code in Place final project, I’ve decided to write an app to solve this issue: a screenshot inventory tool, which can call out to a visual diffing tool, and then return to me a list of screenshots I need to update based on pages that have visual diffs.

So far, I’ve got the screenshot inventory piece working; I can create a list of all the screenshots in my technical documentation, and associate those screenshots with URLs in the app (dictionaries are awesome). I added some fun calculations to tell me how much coverage I’ve got in this screenshot inventory; for example, I’ve got 181 screenshots in my documentation, but have only inventoried 14 of them so far, so roughly 7% of my screenshots have been inventoried. I’ll work toward 100% coverage, because that becomes more important when I get the second piece working: the visual diffing element.

For the visual diffing element, I’m learning how to make API calls to a visual regression tool, Diffy, that can generate visual diffs of pages across environments. So I can have it diff production and staging, for example, and tell me which of the pages that I’m tracking contain changes in staging. Then my app will give me a list of the screenshots associated with that page, so I’ll know which screenshots I need to update when there are changes to the app.

Bonus: the process of making these associations has made me realize there are some nearly duplicate screenshots in my technical docs, which could be streamlined a bit. So hopefully this exercise will help me tighten up my documentation images and maintain fewer assets. Bonus win!

I’m handling a lot of this data storage and processing in JSON. Code in Place didn’t cover writing to files, so I don’t have databases and am trying to keep the scope small enough to finish a final project in a week (while also working a full-time job and prepping my veggie garden for spring). Fortunately, my data storage needs are simple, and JSON lends itself well to API calls, so that helps.

API calls are also out of scope of what we learned in Code in Place, but I’ve documented APIs before and am familiar enough with the basic functionality that I’m hopeful I can get that part working before the final project is due. If not, I’ve got the screenshot inventory part working, and can always keep working toward the visual diffing processing after class is “over.”

At this point, though, I think I can finally check off the box that says: “learning to code.” I’ve written an app that does a thing, and it’s a step beyond the Hello World type stuff I’ve done so far in Swift. I’m enjoying the problem solving; I spend a couple of hours every evening working on code, and go to sleep with code in my head and wake up with problems solved. I might eventually pick up a Python web framework and give it a web UI, or maybe I’ll leave it a command-line tool and change gears back to Swift now that I’ve actually started and written a thing.

Or maybe I’ll go even deeper down the rabbit hole, because learning is fun, and poke the Python/Swift interoperability stuff and give it an iOS app. Why not? The sky’s the limit once you’re well and truly started down the path of programming.

What does coffee taste like?

Lifestyle Personal

What does coffee taste like?

Or why I love good coffee, and how you can learn to love it, too.

TL;DR: Check out this coffee tasting wheel from Counter Culture Coffee – there’s more than bitter/burnt in coffee flavors!


I’m a coffee lover. It’s the second fact I put in my about page, after “I write stuff.” It’s a big part of my core identity.

I didn’t start out liking coffee. My grandma let me take a sip of her black Folgers instant coffee when I was a wee lass, and I hated it. I went through my teens and early twenties convinced I’d hate it forever; I’d try it every now and again, but it just tasted bitter and gross to me. Ugh. No way.

Then came a holiday gift from my employer in 2005: a $25 Starbucks gift card. “What am I supposed to do with this?” I asked myself. “I hate coffee.”

Well, fortunately for me, 2006 was the year I started shifting my mental paradigm to try to view things I didn’t enjoy as opportunities for growth. So instead of focusing on how I didn’t like coffee, I’d take the opportunity to try a bunch of sugary latte drinks from Starbucks – for free – to see if I might find something I liked.

Surprise! If you put enough sugar and milk in a thing, my mid-20s self was all over it. Cinnamon dolce latte became my go-to, but I tried a variety of hot and iced coffee drinks and found I actually enjoyed several of them. Yay! I became a regular Starbucks visitor. You might say it was my gateway coffee.

In 2007, I attended Camp Unleashed in the Berkshires with my dog, Ben. It happened to fall on an unseasonably cold and rainy autumn weekend, and I was under-dressed and under-prepared to stay in a cabin with no electricity and no heat. I had to buy a pair of sweats from the camp store, and I was cold for most of the weekend. One morning, in a desperate attempt to get warmer, I poured myself a cup of coffee.

At this point, I was still convinced I didn’t actually like coffee. I knew that the sugary Starbucks drinks weren’t representative of “real” coffee, and the time or two I’d tried it at a restaurant, I did not enjoy it. So without even tasting it, I doctored the coffee at camp with a ton of sugar packets and cream. But when I took a sip, it wasn’t the unpleasant, too-bitter drink I expected. It was tasty. Aside from having too much sugar. Huh.

I poured myself another cup a little later in the afternoon, and this time, I put in less sugar. Expecting to cringe, I took a sip… and it was tasty. How was this possible? What had happened?

By the end of that weekend, I was looking forward to every cup of coffee I poured. I’d completely gotten rid of the sugar, and had even enjoyed a cup of coffee black, but found I liked it best with a splash of cream or half-and-half. How was this possible? I remarked upon it to the woman who ran the camp, and she told me the name of the coffee company in New York that supplied the roast.

A little Internet research later, I found a website for a roaster that talked a lot about their roasting methods, their beans, and even recommended some brewing options. This was a whole new world for me. Coffee could taste good? Good coffee was tasty?

Thus began my slippery slope into coffee snobbery.

At this point, I’ve worked my way through basically every home brewing method. I’ve settled on the AeroPress with a metal filter as my preferred brew technique, although I like a good French press, too. I temp the water, brew using an inverted technique favored by baristas for optimal extraction, and have upgraded my coffee grinder repeatedly over the years to get to a good burr grinder.

When paired with good coffee beans, this setup gets me deeply flavorful coffee with all kinds of different tasting notes, depending on the bean. This right here is why I’m writing an app. Not to give too many details, but I want to figure out (and keep a record) of what I like, which will also hopefully help me figure out what to buy when I’m considering something new.

What does coffee taste like?

My entire slide into coffee snobbery started because of the revelation that coffee actually tasted like something, other than burnt or bitter. It wasn’t just a vehicle for caffeine delivery, acceptable only when heavily adulterated by sugar and milk. Coffee, on its own, has all kinds of different tasting notes, depending on the bean, where and how it’s grown, how it’s processed, how it’s roasted, and how you handle it at home.

I’ve been pondering this for years, and have slowly learned more about what I like (largely due to Counter Culture Coffee’s excellent tasting notes, info about the beans, and the occasional limited edition set of beans processed in different ways). I’ve learned that I prefer washed beans over honeyed or sundried beans. I’ve learned that I prefer light roasts, because I enjoy tasting more of the natural flavor of the beans. I prefer citrus or chocolate tasting notes, although I enjoy trying a wide range of coffees.

In other words, it turns out coffee has a diverse range of tasting notes, just like wine tasting, when you start with a high-quality bean that has been roasted and brewed well.

This is why I was super psyched to see Counter Culture Coffee’s Coffee Tasting Wheel when I browsed their site recently for some new beans. I love that it gives coffee enthusiasts language to help identify and discuss what they’re tasting. It’s a great tool to start figuring out what you like.

In thinking about coffee tasting notes as you drink it, you also get a more mindful coffee drinking experience. That was my biggest revelation when coming back to coffee after my caffeine detox a few years ago: mindful coffee drinking was amazing. Actually thinking about the taste, enjoying it, savoring it – that got me into the moment like few things do. I don’t know about you, but I definitely need more things in my life like that; things that inspire me to stop thinking about my to-do list, or what’s going on at work, or that book I’ve been reading, and just be present in the moment.

So yeah, if you’re at all interested in coffee, I encourage you to take a look at the tasting wheel and start thinking about – and enjoying – the coffee you drink. And the next time I talk about how I love coffee, maybe now you’ll understand better how I got there, and what loving coffee means to me.

My social media withdrawal experiment

Lifestyle Personal

My social media withdrawal experiment

In the past few years, I’ve gradually trimmed down my social media exposure. In the past month, I’ve eliminated social media almost entirely. Why take such a drastic step, and how do I feel about it now?

Making the easy cut

It started with Twitter. Every time I opened it, I ran across posts that made me feel depressed or angry or frustrated; usually some combination of the above. Not only was I wasting time there, but it was making me feel some very unpleasant emotions.

Seemed like a no-brainer to quit. At this point, I still have an account there, but very rarely use it. I no longer have the app installed anywhere, and am not logged in from any of my browsers. Aside from occasionally checking there for updates from some of my favorite content creators, whose Twitter handles I have memorized and browse to directly, I don’t really interact with it.

You know something? I don’t miss it.

Waffling over Facebook

The other social media site where I spent time regularly was Facebook. I was super torn about my time there. I’m really unhappy with Facebook as a company. I feel that the org does a lot of harm, in a variety of ways. I’ve wanted to stop using Facebook for years.

On the flip side, I’ve also felt compelled to maintain an account there. It’s where I do a lot of interacting with IRL friends. I’ve used it to stay in touch with a lot of family members who I don’t regularly talk with. I’ve used it to connect with and stay connected with interesting people I’ve met at various events. I’ve reconnected with some of the folks I knew in high school, and it’s been fun to be in touch with them again.

I’ve also used it to stay in touch with local and special-interest events and communities. There are several local groups I’ve been a member of in Facebook, as well as a group of folks who are doing ambulance-to-RV conversions, a motorcycling group where I was once an active member, and groups formed around events and classes I’ve attended.

I use it to discover local events here in Vermont. Many local small businesses don’t even have their own websites; they create Facebook pages, and that’s where you have to go to find out about hours, daily specials, and events. I really enjoy attending local events as a way to connect with my community, and I want to support local small businesses – so I’ve felt like I need that touchstone with them, and the only place I can get it is Facebook.

Finally, I’ve used Facebook for work. My publishing empire has pumped a lot of money into Facebook ads, which drove a majority of my sales and newsletter signups. When I was advertising regularly, Amazon’s ad platform was not as robust and not nearly as effective; I don’t know if that has changed in the past few years. I stopped advertising when I fell behind schedule in publishing new books, but I’ve always intended to get back to that when I have the time, so I rationalized that keeping Facebook was required.

The rise of Slack

While also maintaining my Facebook account, I’ve been gradually joining more and more Slack groups. I’m currently a member of eight Slack workspaces, which have a combined membership of over 20,000 people. That’s a lot of conversations.

  1. It started with a Slack workspace for work in 2016.
  2. Then, one of the folks at work spun off a Slack for an open-source project he started, which I joined to help with that project, and also to stay in touch with friends there.
  3. I got involved with another project with this friend – a volunteer emergency management association group – which has another Slack workspace.
  4. I heard about a leadership Slack from another person at work, who said that’s where stays in touch with his friends, and thought I’d find a lot of interesting conversations there.
  5. From there, I found out about a women-in-tech Slack in one of the hidden backchannels.
  6. One of my friends on Facebook pointed me at a Slack group for technical writing.
  7. In addition to the Slack workspace my current gig has, they also have a Support Slack where I’m a member.
  8. Kay and I started our own Slack for collaborating on projects among ourselves, and with our friends.

All told, that’s a lot of conversations to follow. I’m in a handful of channels in most of those Slack groups; as many as 10 to 12 in one or two. That’s a whole lot of information for one person to consume, while also working a regular 40-hour work week and trying to have a personal and social life. I hate to say this, but it’s almost enough to make me miss Facebook’s helpful algorithms that attempt to surface the content I’ll find most interesting.

A lot of these Slacks are of interest to me, personally and professionally, so I’ve been drowning in trying to keep up with them. I’d remove one or another from some device, but end up adding it back, or just looking at it on another device.

Acknowledging the problem

I was checking in on these social platforms several times per day. I’d attempt to keep the check-ins to a few minutes each time, but sometimes I’d get sucked into longer conversations – that seemed really interesting and important – and then realize I’d lost a half hour or an hour at a time. Gone.

After my rafting incident, I was really struggling to figure out what I was doing with my life, where my place was in the world, and whether I was doing what I really wanted to be doing with my work and my time. All of this deep, heavy thinking, combined with poking around these social platforms as I flailed and indulged in some escapism, meant lost productivity. As I bill hourly, and saw fewer hours logged per day, I began to realize this was becoming an issue.

The proverbial nail in the coffin was a rather innocuous point of crotchety-old-woman ranting that raised a startling awareness. Someone in one of my Slack groups posted in the Main channel one afternoon: “Just wanted to shout out that it’s my birthday today, whoop whoop!”

This is hugely poor Slack etiquette; pretty much all of the members of a Slack are in the Main (or General) channel. It’s meant to be used for things that might be of interest to the entire Slack, or to ask about where to discuss things if you’re uncertain which channels are appropriate (depending on the Slack – some Slack groups have a separate channel for that). So this person was basically blasting out to 6,200 people some totally self-indulgent and uninteresting fact in what was a blatant attention grab.

I was not amused by this, but was amused by my own observation that it was an attention grab, so I went and posted about it on Facebook. And as I was writing the post, realized that my post about this person’s post was essentially the same thing, but on a much smaller scale. “Hey, I made this pithy observation about human hubris, look at me.”

I did call myself out in the post as I was writing it, but posted it anyway to demonstrate the irony. (And because I try not to self-edit when I realize unflattering things about myself… we all have those things, and sometimes it helps to connect to someone else’s humanity through them, and/or realize similar things about yourself.)

When I realized that, though, I started thinking more about the performative aspect of social media. I regularly post about what I’m up to, or experiences I have, because (I think) the people I’m friends with want to know what’s going on with me and enjoy hearing/reading it. But there’s certainly a performative/attention-seeking aspect to it that made me uncomfortable. And then I realized that if I’m truly friends with those people, I’ll talk with them outside of social media, and can share updates in a more one-on-one way. And if I’m not truly friends with those people, then what am I doing wasting my time performing to them/reading about them?

I know there’s a lot more complexity and value to social media, but this series of realizations, combined with the fact that I was demonstrably losing productivity by billing fewer hours, meant it was time for me to take a serious look at my social platform usage.

Going cold-turkey

Right, then. It was clearly time to curtail my use of these social platforms; at least, temporarily. I decided on an experiment: I would deactivate (but not delete!) my Facebook account, and remove several of the non-work Slacks from my devices.

I’m down to four Slack groups on my main computer – the two work Slack groups, the one with my friend’s open source project (where I interact with those friends for a weekly meetup, and otherwise the traffic is non-existent, because it’s only about 50 people), and the Slack that Kay and I set up for ourselves/our friends on projects. We regularly use that one to share code and work-related tips and tricks, so keeping it alive seemed useful, even when we also have Messenger to communicate (and our offices are literally next to each other).

I have two additional Slacks on my phone; the one for the volunteer emergency management association, and the one for tech writers. Shortly before I started this experiment, I volunteered to help set up and run remote meetups for the tech writing group, so I still need to be available there when the other organizers ping me. I’m set to “Away” there, have notifications other than direct messages turned off, and try to only check it outside of work hours; maybe while drinking my morning coffee, or during the evening while waiting for the dogs to come inside.

My laptop still has all of the Slack groups, but I basically don’t use Slack on it anymore; it’s the machine that sits next to my chair in the living room, so I can use it if I want to poke a project in the evening. I don’t pick it up unless I’m doing something specific, which does not include random Slack browsing.

My initial thought was to try this for a few days, or maybe a week, to see how well it worked out. I wanted to see if I could regain some productivity, and maybe some free time in the evenings. I wanted to see if I could live without Facebook, which would mean being more disconnected from my local community.

It has now been about five weeks since I pruned my social platforms and deactivated my Facebook account. I have not, even once, been tempted to reactivate my Facebook account. I have not felt like I was missing some form of enrichment by not participating in conversations in my pruned Slack groups.

Aside from the initial compulsion to check the things in the first few days after removing them – which made me realize how habitual it had become to poke Facebook and these Slack groups – I haven’t really noticed it being gone, except that I now have more time to myself. I couldn’t even remember how long it had been since I removed them; I had to look up an event that was happening around that time to figure out when it was.

My one – slight – regret has been that I didn’t announce my intent to deactivate Facebook prior to doing it, and leave it active for a few days, so my friends would know what happened and could reach out to me in some other way. I didn’t want to do the whole dramatic “I’m leaving Facebook” thing if it didn’t stick, and I really thought at the time it would be an experiment I’d try for a few days or a week, but I’d then reactivate Facebook. A few friends have noticed my absence and reached out to me, and I felt bad that they were worried or that I hadn’t clued them in.

At this point, I’m leaning toward making this the new normal. I like the extra free time. I like not having to worry about whether I’m missing an important or interesting conversation. I like not having to remind myself that differing political views do not inherently make someone less worthy of respect. And I like not feeling like I’m someone’s product, and knowing I’m not silently condoning Facebook’s moral bankruptcy and commoditization of its users’ personal information by continuing to use it in spite of my reservations.

Still “leaning toward,” though… not quite ready to go all-in and actually delete my Facebook account, versus its current deactivated state. Leaving it sitting there, deactivated, is kind of like a safety blanket. I know I can go back if I change my mind. I don’t want to now, but I don’t know what might happen in the future.

What if I want to reach out to the people there again? What if my husband dies, for example, and I feel isolated living here in a small community in Vermont and want to reach out to my friends across the U.S. as a way of coping? Or what if I decide to change jobs, or career trajectories entirely, and want to reach out to my personal network to find out about opportunities or share new business ventures?

FOMO is what has kept me connected to these social networks, and FOMO is what’s preventing me from making the break entirely and deleting the Facebook account. Maybe some more distance from this break that started as an experiment will make it easier to pull the trigger and make it permanent.

How home automation has made me a more productive remote employee

Business Personal

How home automation has made me a more productive remote employee

I’ve been working remotely since 2007. Along the way, I’ve learned a few things about how my workspace impacts my productivity. Home automation has enabled subtle improvements to my life and productivity as a remote employee – and subtle improvements can have big impacts.


When I first started out working remotely, I was in my mid-20s and every day was a hustle. I didn’t have any family obligations, and my social life was slow at the time. I worked from anywhere, anytime. I’d work from my couch at 2am. I’d work from my desk during the day. I’d wake up and check/respond to email from bed. I’d walk to a coffee shop and work.

I was just starting out freelancing, and it seemed important to me to do as much work as possible, and to be as responsive as possible to clients. I worked ridiculous hours to complete projects on fast turnarounds; I distinctly remember times even a few years into my freelance life where I’d literally work all night, walk up the street to Dunkin’ Donuts at 6am for some fresh donuts and coffee, and work some more.

Fast forward a few years; my social life gets busier, I wreck my hands typing thousands of words per day on my very non-ergonomic laptop keyboard, and I realize I’m getting too old to be pulling all-nighters for a few hundred dollars. Things have to change.

I set up an office, which was separate from my living space. The purpose of the office was work. The purpose of the living space was living. When I lived with roommates, my room had to do both, but I clearly defined those separate spaces. When I wasn’t living with roommates, I gave my office a dedicated room; it was my office. That’s where I went to work. And when I wasn’t in the office, I wouldn’t work. Simple, right?

Making my spaces work for me

Dedicated office space is great, but only if you go there and work. Sometimes, in winter in New England especially, my office would be cold and dark, and I just couldn’t pry myself from the warm, cozy, well-lit couch, where I’d huddle under a blanket and think about how I should be getting to work. Those days were a struggle.

When I lived with a partner who left the house for work, I’d have him go to the office and turn on a space heater and some lights for me, so it could warm up a bit; and then I’d force myself off the couch to say farewell to him at the door, and use the momentum of being up to head off to my office. That helped, but even that wasn’t always a foolproof method.


In 2015, after visiting a friend who had installed some Philips Hue lights behind her TV that provided some interesting mood lighting, we did the same. I thought it was a novelty; I could make it change colors depending on what I was watching, and it provided some additional lighting in a part of the room that wasn’t well-lit. And hey, how fun – the Hue app for my iPhone would let me set up Routines, so I could have the lights do different things on an automated schedule.

I set the lights to come on in the morning, while we were puttering around and waking up in the living room. When I noticed that my husband was leaving slightly later and later for work every day, I set the lights to turn off a few minutes before he ought to leave for work.

The first time this happened, he was amused. It was a subtle difference; the Hue bulbs were providing some nice mood lighting, but standing lamps provided the room lighting. We still had plenty of light, but it was enough of a reminder that he ought to leave – that he left. And I went to my office.

This trick worked so well, I did the same thing at night; I set the Hue lights to come on when it got dark, and turn off again when we really should be in bed. Voila, subtle bedtime reminder that works.

In time, we started switching more and more light bulbs to Hue lights. Today, we have Hue workspace lights in both of our offices (over our desks; the main room lights aren’t Hue – yet), Hue lights in the gym, Hue lights in the living room stand lamps, and Hue lights in the bedroom. And of course, we still have the behind-the-TV lights that kicked the whole thing off.

My automation has gotten more sophisticated. In the winter, the living room lights come on about 10 minutes after our alarms go off. The TV lights come on year-round, because the mood lighting is still nice; and when those turn off, it’s still our subtle reminder to go to work. There’s a 15-minute delay between when the TV lights go off and when the room lights go off; time for us to get on our way, but if we linger, the room lights turning off are a last call of sorts.

Our office workspace lights are set to turn off at 6pm. Again, they’re not room lights, so we still have light in the space, but the subtle change in light is enough to remind us “Hey, it’s time to stop working for the day! Wrap up your tasks and leave the office.”

The living room lights come on automatically when it gets dark, so we never have to come into a dark living room and fumble around. And they turn off again when we should have really gone to bed by now, serving as a subtle reminder to get to sleep if we haven’t already done it.

Color temperature and brightness matters, too. The bedroom lights are set to “relax” – a dim, warm mode. The living room lights are also warm, and we can make them dimmer closer to bed to optimize for sleepiness. The Hue light in the gym is set to “energize” – a bright daylight. This winter, I’m going to upgrade my office Hue lighting to give me a bright daylight during the morning, but switch to a warm, dimmer light later in the afternoon as evening approaches.

My favorite thing of all, now that everything is integrated with Apple Home Kit, is telling Siri on my iPhone to turn off the lights, and having all the Hue lights in the house go off (usually the bedroom and living room lights, but sometimes we’ve gone back up to our offices and may have forgotten to turn one of those lights off, too).


Lights were a big part of the equation in getting us to move from one area of our house to another when we should be starting/stopping work – but they weren’t the only answer. In that example I gave above, my office was cold and dark; lights solved the dark issue, but temperature was still a problem. A problem that moving to an ~84-year-old house in Vermont exacerbated.

Our bedroom is an addition to the first floor of the house, and we didn’t know this when we bought the place on a sunny summer day, but the addition is not well-insulated. In the winter, it’s regularly 5 to 10 degrees cooler than the rest of the house; in the summer, it’s that much warmer. The offices, being upstairs, are regularly warmer than the first floor.

All this translates to me really not wanting to get out of bed on a winter morning when it’s cold in the bedroom. Or setting the heat to a temperature – say 68 degrees – that’s fine in the living room where the thermostat is located, but makes our offices upstairs so hot I have to open a window, while the bedroom addition is still too cold.

It didn’t take long in our first winter in this house – November, to be exact – for me to start investigating smart thermostats. After some research, I landed on the Ecobee4 smart thermostat, which supported extra (wireless) sensors you could place in various rooms around the house.

The way we have the Ecobee configured, it attempts to provide the set temperature for the rooms that are occupied. This means that if we’re in the bedroom, it tries to heat the bedroom to whatever temperature we set (which typically means the living room and offices, where the other sensors are located, are too warm). If we’re in the offices, which tend to be the warmest rooms in the house, the Ecobee attempts to provide the set temperature there, which means the living room is cool, but the offices aren’t roasting us out.

This smart feature, combined with a very stepped series of temperature changes that are made much easier by home automation web interfaces, gets us to ideal temperatures to make it easier to move through the house on those cold winter days.

Around a half hour before it’s time to get up, the Ecobee starts warming the house from 58 to 64. That’s just enough to get me out of bed, and not make it too toasty in the rest of the house.

When we get up, it warms the house to 68, which is typically going by the living room sensor at that point as we’ve left the bedroom. When we get up to our offices, it’s around 70 degrees, which is a smidge warm for me in the winter, but it cools to the set 68 once the sensors figure out that the offices are the occupied rooms and the living room is no longer occupied.

In the evening, I like to snuggle up in my chair under a blanket and watch TV, read a book, or work on a project, so I have the temperature going back down to 64. An hour or two before bed, it drops to 62. Then, at bedtime, 58. That’s really too cold to linger in the rest of the house, although it’s the perfect temperature for sleeping under a nice thick comforter, so the temperatures – combined with the lighting cues – lead us to bed.

Good sleep, downtime leads to productive work time

Bottom line: home automation has made it easier to set and adhere to boundaries in a life where I work and live at home.

Getting enough sleep, and sleeping well, makes it possible to be more productive at work. My brain works better, and I’ve got more stamina to get through the afternoon slump. (I very rarely drink afternoon coffee these days, but I was doing it religiously in the bad old days when my work/home life was less structured.)

Good downtime is essential to avoiding burnout, or even just a slow-building, lingering resentment that gradually erodes work productivity. Stopping work at a set time and going off to do other things gives me protected downtime, which makes it easier to work during work time and enjoy downtime when it’s time for that.

Having a house that is optimized to give me exactly what I want where I want it – appropriate lighting and comfortable temperatures – makes it easier to move through the day, and be more productive.

My vacation rafting misadventure

Personal Travel

My vacation rafting misadventure

Or that time I accidentally body-surfed a Class V rapid on the Penobscot River in Maine.

Trigger warning: discussion of near-drowning, death.

The day so far…

My husband and I were spending the week with four friends at a rented lake house in Lincoln, Maine. The friends and I had done a rafting trip the prior year on the Androscoggin River in New Hampshire with ELC Outdoors, and had really enjoyed it – in all it’s mild Class I-II glory. It was mostly a float/paddle down the river, with a few mild rapid sections to get us wet and get the heart rate up. I had been bummed that the hubby missed that trip, and looked forward to getting him into rafting on this outing.

For this outing, we arrived at NEOC’s HQ bright and early for our all-day rafting trip, and everyone in our group – indeed, everyone on the entire trip, about two busloads of people – opted to rent wet suits. Except me. I tend to run hot, and if you’ve ever been overweight, you know how fraught outdoor apparel shopping can be – apparently fat people never go outside or do anything – so I didn’t want to deal with potentially not finding something that would fit, or being wrapped up like a sausage in an overly-tight wet suit. Ugh. No thanks.

After everyone was geared up, we had to stand around while a rafting guide gave us a safety briefing that felt like it went on far too long, and included too many attempts at humor that did not jive with my own sense of humor.

The things I remember from that safety briefing are: if you end up in the water, try to get your feet/toes up, because it’s better to encounter underwater rocks with a padded butt vs. fragile limbs; and if you end up in the water, one of the guides will shout out “Rope!” and you need to look for a rope being thrown to you, and try to grab it.

(What I forgot, which one of my friends helpfully pointed out later, was that you are supposed to try to point your feet downstream, so they’re the first thing to encounter rocks vs. your fragile helmeted head. Minor but important detail.)

The morning was a relatively tame float down the “lower Penobscot.” (An area below Abol Bridge Campground and Store, maybe? I’m not sure exactly where it was, but we passed Abol’s on the way to our morning landing, and then again when we were going to the afternoon landing.)

There were a couple of rapids up to a Class IV, but you could more-or-less opt out of the Class IV which was mainly a drop down a “12-foot waterfall” at the beginning of the day, and then a little bit at the end of the trip. It was a good way to get our feet wet, build up some confidence, practice paddling at our guide’s command, and hear a lot of dad jokes. In short, it whetted our appetite for a slightly more adventurous afternoon.

We had a riverside lunch, in which I literally stood around getting eaten alive by mosquitoes, and then another short excursion toward our take-out. At the take-out, we had to decide if we wanted to do the afternoon portion of the trip, with more intense rapids, and our group decided we were in! Into the bus, and off we go.

Ripogenus Gorge

Our afternoon landing took us to Ripogenus Gorge, to a hydroelectric dam. Right away, it was obvious that this was a different beast. We passed several warning signs: “Warning: the Upper Gorge is hazardous, proceed at your own risk” – and signs warning about danger when the siren sounds. The group was much smaller; only four rafts; and the terrain we had to portage the raft across was much rockier to get down to the river.

The first big rapid we had to navigate in the afternoon was the colorfully-named Exterminator, a Class-IV “hole.” When we hit the hole, the amount of water that flooded over the front of the raft – because of course I wanted to be in the front of the raft – was enormous, almost sucking me out of the raft right then. I felt myself being pulled from my perch on the side of the raft, and tried to dig my feet harder into the footholds; one pocket in the floor, and the other foot wedged between the edge of the raft and the raft floor, willing my core muscles to engage and keep me on that raft. Fortunately, it was a brief moment, and I managed to stay in.

Afterward, our guide Caleb remarked to me: “I saw you almost come out of the raft!” I laughed and replied: “I know! I felt myself being sucked out and hung on; I told myself: ‘you are not coming out of this raft!'” But it had been an unnerving experience, and I asked how that compared to other rapids we’d encounter in the Upper Gorge. “Is that about as bad as it gets, in terms of potentially being swept out, or are there more treacherous rapids to come?”

He thought for a moment, and then replied: “That’s about as bad as it gets. The Exterminator is the one that keeps me up at night.”

Alright. If that’s as bad as it gets, I can handle this. Onward! Down the river through Staircase (IV), Fist of God, Big Heater, Little Heater, Troublemaker Hole (III+) – plenty of paddling and work to get my heart pounding – and plenty of water to completely drench me over and over – but nothing like almost getting pulled out of the raft at Exterminator.

Then, we approached the Cribworks. Our guide told us this was a longer, more technical section; this is a place where we’d need to use finesse to steer the best line through the rapids, vs. simply pulling hard to get out of a hole or avoid some rocks. I either didn’t know, or had forgotten, that this was a Class V rapid – the only one on the trip? I blithely had it in my head that nothing was worse than Exterminator where I’d almost come out, and the stretch of river ahead of us didn’t look too bad – so I figured we’d just follow the guide’s instructions and do some tricky navigating, but it would be fun.

Spoiler alert: this is where it stopped being fun.

Body-surfing the Cribworks Class V rapid

The sun had finally come out from behind the clouds. The Upper Gorge so far had had a few challenging moments, but mostly it was beautiful and a lot of fun. I had forgotten all about my mosquito bites, and my not wearing a wet suit was kind of awesome, because the water was cool and refreshing in the warm sun. I was ready for this more technical section, so when the instructor said “All ahead 2!” – we paddled!

Because this was one of the biggest rapids of the trip, there was a photographer nearby waiting to capture photos of this section… so I’ll let a few photos describe what happened next.

That’s me in the front-left – the one not wearing a wetsuit!
And the raft goes into a massive wall of water…
Note a missing blue helmet in the front left of the raft?
Aaand there’s my arm and helmet in the water behind the raft…
Bodysurfing the rapid.

What it felt like

One minute, I was paddling – the next minute, this massive wall of whitewater came rushing over the front of the raft, and pullllled me right out. I felt myself going, but there was nothing I could do about it. My hands seemed too far from a rope to grab it as I went by, and couldn’t really see what was around me as the cool water tugged me overboard. I hung onto my paddle as I plunged into the water, and started kicking.

Initially, I was pushing through a mass of aerated water where it felt like I wasn’t making much progress. I kicked harder and felt my head pop above water. I took a breath. I knew I was in the water, but it was in my eyes and everywhere – I couldn’t really see what was around me, and it felt like I got pulled under again right away. I kicked some more, trying to get to air again and get oriented, but I felt like I had no control as the river swept me along.

I kicked for the surface. I hit a deeper stretch, where it felt like I kicked for a long time and the river wasn’t letting me up for air. The water was pulling me down – I felt my swim shorts being dragged down and grabbed for them, as I realized I was in some serious suction – so I kicked harder, and tried to use my paddle to help push me up toward the surface.

After four or five strong kicks, I broke the river’s surface again, and took a gulp of air into my lungs before being pulled back under.

By this point, I was completely disoriented. I got pulled underwater over and over again. Even when my head popped up, I wasn’t able to see anything through the splashing whitewater, so I kept my eyes closed, hung onto my paddle and kicked.

The water made a tremendous roar as it tumbled me down the rapids. When I went under, it gurgled and bubbled angrily as I progressed through the rapids. When my head popped up, all I could hear was the loud splashing of water thundering over the rocks.

The river shifted me to the right, and my left leg and knee crashed into a rock. I remembered I was supposed to try to get my feet up, and it felt like I succeeded for a moment, but the water kept sucking me under and I instinctively shifted to kick for the surface again. My left wrist whacked against a rock. I might have tried to hold my paddle in front of me to fend off of rocks – but the river kept tumbling me along, and I’m pretty sure I went down most of the rapids backward, leading with my fragile helmeted head.

I have no idea how long I was actually in the rapid, but it felt like about 40 to 60 seconds. In reality, it was probably half that? No idea. But when I started crashing into rocks, and felt myself getting tossed around like a piece of flotsam in the river current, gasping for air when I popped to the surface but feeling that it was happening less and less often… I started to realize that maybe I was not going to be alright. In my mental map of this experience, this was around 15-20 seconds into my swim down the rapids.

An article I’d read once flashed into my head; a woman had come out of a raft and had been battered by the rocks, breaking bones and almost drowning as she was tossed down the river, waiting to be rescued. She’d had to be airlifted out of a gorge and suffered long-lasting injuries, and was bitter about the experience. She reported thinking about how stupid it was that she had voluntarily and blithely put herself in that situation and now she was about to die.

I thought it sucked that I might get broken on the rocks, and I wasn’t a big fan of this not being able to breathe when I wanted to breathe thing… but on the whole, drowning didn’t seem so bad. I stopped struggling so much and let the river take me, hoping I’d pop up for air again but resigning myself to the fact that this might be IT. Like, seriously. I might be done.

I thought about my husband and dogs. I hoped that none of my friends had come out of the raft, and were now going through the same thing I was. I worried for my friend who’d been more timid about the higher-intensity rapids, and how much it must suck for him to see me get pulled out of the raft and now be fighting his way down the rapids in the raft. I worried he’d freeze up instead of paddling, or that he’d get pulled out, too – I felt like it would have been way more traumatic for him than it was for me.

As I felt the world around me get darker – it seemed like a while since my head had cleared the surface – I took mental inventory of my life, quickly scanning through things I might have left unresolved. I had no big personal projects in the works, or that would require my husband to deal with if I was gone – so that was good. I didn’t feel like there was something I’d “missed out” on doing, so that was good.

I felt a brief twinge of regret that I hadn’t yet finished the new documentation site I was working on for a client, and thought about whether my husband would think to let them know what had happened, and that I felt bad I hadn’t gotten it done – they’re good people, and I didn’t want to leave them hanging. Not bad for my only regret.

Mostly, I was glad I wasn’t leaving something big and unresolved for my husband to deal with.

Up. Take a breath. Back underwater, the thunder of passing through the rapids surrounding me, the water tumbling me wherever it will.

As I continued to get tossed about in the rapids, my mental process narrowed to a few key thoughts on endless loop.

“Try to keep feet up. Just keep hanging in. Just keep going. Breathe when you can. Conserve energy when you can’t. Don’t struggle unless you feel like you’re not moving forward. Eventually the rapids will end. Hopefully, you’ll still be conscious and able to help the rescuers get you out of the water.”

The rescue

After what felt like a very long time, but my mental timeline tells me was around 40 seconds, my head popped up again and I heard a voice shout: “Rope!” I opened my eyes for the first time in a while, and saw a strand of rope unfurling above me, flying through the air. I reached up and grabbed for it, letting go of the paddle I’d been hanging onto for so long. Blessedly, my hands caught the rope, and I held it up into the air, trying to show whomever threw it that I had it.

I closed my eyes again as I was pulled back underwater, but this time it was the force of the rope being pulled toward my rescuer that pulled me under, not the river tumbling me to and fro. I hung on.

I heard a voice telling me to let go of the rope. I really didn’t want to let go of that rope; I felt like it was the only thing keeping the river from sweeping me away again. The voice said I needed to open my eyes and let go of the rope, and I obeyed. I grabbed for the rope on the side of the raft, remembering another element from the safety briefing at the beginning of the day, and hung on.

My rescuer told me that he needed my help to get me out of the water, and asked me to jump and kick. I had no idea what I was doing at this point; I was in shock, and everything from this point is a fuzzy patchwork of moments.

He told me to jump and kick. I feel like it didn’t work the first time, and thought to myself that this was why I hadn’t gotten out of the raft in our earlier float for some swimming – getting back on was never going to work, because I’m so heavy. But somehow, he got me over the side of that boat and flopped on top of his legs in the bottom of it, panting for air. My chest hurt.

“I can’t breathe, I need to get up,” I remember saying to him. But he wouldn’t let me move right away, telling me: “Take your time, lovie. You’re safe. Just lie there and catch your breath. Don’t move yet. Just take your time.” So I did.

Eventually, I became aware that I could still hear the rapids around me, and my legs were still dangling off the side of the raft, and I was probably crushing his legs. I still couldn’t breathe right, and my chest hurt. I wanted up. He helped me struggle farther into the boat, and the other members of the raft moved to make way for me to sit in the middle. It wasn’t my boat; it was one of the other rafts that had been with us. The people around me gave me small, encouraging smiles. One woman said: “You were so brave!”

I sat there gasping for air, and looked around for my boat. I saw them downstream, with one of the other rafts, pulled up along the side, and it looked like everyone else was there. I couldn’t tell how well they saw me; I hoped they could see me sit up and could tell that I was ok.

With a start, I realized there was a small section of rapids still below us that we’d have to traverse before I could think about getting out of the raft. I didn’t want to move to the side of the raft and paddle. I just wanted to sit in the middle and hang on to the ropes and not get swept away again. The guide had moored the raft on a rock to try to pull me out of the water, and now we had to get off the rock and finish going down the rapids.

“Well, shit,” I thought to myself.

I wanted nothing more than to get off the river at that point.

The guide asked how I was doing. I said: “I’m alive. I’m breathing.” The people on the raft gave me small smiles, and I could tell the whole thing unnerved them. My voice was thick and hard to understand, even to myself, and I felt my words slurring.

“Well, shit,” I thought to myself again, wondering if I’d hit my head and if I had a concussion.

I don’t remember the exact series of exchanges that followed, but I communicated that I would like to get off the river when possible. The guide said we’d have to go a little farther down before we could make landing, so I sat in the middle of the boat and hung on grimly as we traversed a small rapid.

Our guide signaled, and the rafts ahead of us moved off. Show over, it was back to the business of rafting. “All ahead left” and “right back” as we worked our way off the rock, and then took a line hither and thither. The guide went back to his patois, interposed with the occasional dad joke, and the people in the raft kept giving me encouraging smiles or asking how I was doing.

Meanwhile, as I adjusted to life back above water, I worried about how slurred and thick my speech was… and realized how thirsty I felt, all of a sudden. It seemed ridiculous, given the volume of water that had just been sloshing me around – and how much of it I’d probably swallowed – but I needed a drink.

When we got to a smoother section, I turned my head and asked the guide if he had any water. He pulled out a bottle, and I drank some, swallowing carefully. My chest hurt, and I felt nauseous; I wasn’t sure I wouldn’t just throw it all up, along with a metric ton of river water.

I decided it was better not to chance it, and stopped there, carefully putting the lid back on the bottle and fumbling with the carabiner to re-clip it where he’d had it secured before. He saw me having trouble, and told me to just set it down in the back compartment of the raft and let it float there; he’d probably have some himself in a minute. I knew he was humoring me, but didn’t care; the medically-trained part of me was busy noting that my hands were shaky with shock, or adrenaline wearing off, and worried about the potential concussion.

We approached my former raft, and I tried to smile for my friends. They mostly looked very concerned, but happy to see me sitting up. Our rafting guide pulled alongside my rescue raft, and asked if I’d like to climb on across back to my raft – and I apologetically said: “I’d rather not, if that’s ok. I’d like to just sit right here until I can get off the river, if I could.” Both guides nodded, and I looked back to my friends. “Sorry, guys – I love you, but I really don’t want to fumble my way across and potentially end up back in the river again.” They made understanding noises, and paddled away again, and we continued down the river.

We passed a riverside camp, which I looked at longingly and wondered how difficult it would be to get a ride out of there if I asked them to drop me off there. But I kept my mouth shut, and focused on keeping it together just a little longer. Just until I could get off the river.

It felt like a while, but probably wasn’t that long before we reached a point where they could drop me off. My former raft and my rescue raft both pulled over to the side of the river, and I could see my husband climbing out of the raft containing my friends as I pondered disembarking myself. The river was very calm where we were, and not deep, but I really didn’t want to get back into the water, and was concerned I’d be so shaky I’d fall as I tried to get out of the raft again.

The guide helped me out of the raft, and my husband was there to offer me a hand, so I sternly told myself not to be a baby about having to step back into the water so I could wade in to shore. The guide who’d rescued me waded in to shore with us, and handed us off to one of the other people from NEOC who was standing there waiting as we disembarked.

I turned again to my friends, and apologized for bailing. And apologized to the guide for coming out of the raft just as we headed into the rapid. Everyone was a good sport about it, but I really just wanted to be off the river now to deal with whatever physical ailments I’d suffered in my adventure.

After the rescue

The guys from NEOC were very solicitous as I carefully walked away from the river. The gent who was waiting for us explained that I’d have to wait for about 10 minutes while he took his truck to get the bus driver, who would bring the bus here to pick me up. I nodded assent and sank down onto a nearby flat stone; I was feeling weak and just wanted to sit down before I fell down. Now that I was off the river, it was time to take stock of my physical condition.

He drove off in the truck, and my husband held my hand very tightly as we talked about what had happened.

I explained that I was worried about a possible concussion, and that my speech was thick and slurry when I got pulled out of the river; we’re both trained emergency medical responders, so I wanted to make sure I brain dumped my physical condition to him in case I deteriorated and he needed important details to pass on to medical providers. Even then, probably 10 or more minutes after I’d been pulled out of the river, my speech was still a bit thick and slurry; I made a concentrated effort to enunciate clearly so he could understand me. I also felt a headache forming, and while I didn’t remember hitting my head on any rocks, I worried that I might have.

I looked down at my left knee; there were abrasions on the side of my left calf, and my left knee hurt and was starting to swell, but nothing was broken. I had some bruises and abrasions on the inside of my right calf, too, and on my inner thigh above my right knee, but I didn’t remember hitting that leg on anything. I noticed that my Apple Watch screen was cracked, and as I lifted it up to check the time, it started glitching and then died. Apparently I’d hit the back of my left wrist on something, too, but didn’t remember that, either.

Most concerning to me was chest pain; pressure and the occasional stabbing pain if I moved a certain way. I was concerned that I might have aspirated some water, but I wasn’t coughing. I also felt nauseous, but I couldn’t tell whether that might be from shock, or adrenaline wearing off, or potentially hitting my head, or swallowing half the river, or aspirating water. I mostly sat still, and waited to see whether I was going to throw up or not, and felt grateful that I was sitting on a rock beside the river with my husband instead of… not.

When the bus driver arrived, he was also very solicitous; they offered me warm sweaters and blankets, which I rejected because I wasn’t cold, and a granola bar, which I accepted because I had in my head that helped with the post-adrenaline crash.

We explained to him that we were trained medical responders, and were concerned about a potential head injury, and asked if he had a flashlight so my husband could check for pupillary response. He offered his cell phone flashlight, so my husband took a look – not an easy task because I’ve got very dark irises, and in the semi-dim light of a forested campground, both my husband and the bus driver had a difficult time making out my pupils. My husband eventually concluded that the pupils seemed smaller than he liked, and seemed sluggish in responding to the light – a worrying sign. I told him that he should check me every few minutes to see how things were progressing, and then climbed into the bus.

It’s a weird feeling to be a trained medical responder and recognize that things are likely affecting your body, but knowing you have to rely on other people to deal with them. I was grateful that I was “with it” enough to help my husband remember what to look out for, but was worried about how he’d deal if I deteriorated, and how long it might take to get me to medical care.

I still felt nauseous and didn’t really want to eat, but I forced myself to consume a quarter of the granola bar. I asked the bus driver if he had any water, and he was surprised to find there wasn’t any on the bus. I was still thirsty, and wanted to drink, but also didn’t want to throw up, so I drank enough of the morning coffee still left in my travel mug to wash down the dry granola, but stopped there to see if it would stay down.

Time passed. I made sure to chitchat casually so my husband could monitor my neurological condition. I was beginning to feel exhausted, and the headache was getting worse, and I was also starting to feel the other aches and pains from getting banged against rocks. My chest felt tight and painful, and there was a lingering feeling of “can’t breathe” that got worse after we crammed everyone else into the bus, and I had to huddle into a side of the seat to fit everyone while we traversed the rutted roads back to NEOC’s base.

When we got back and everyone was putting equipment away, one of the women from my raft came to check on me. She and her friend had wound up on the raft with my group of six, and she’d watched things unfold firsthand. She told me that she’d been rafting with this group every year for the past four years, and that her guides knew she was a bit more adventurous so they’d let her and some of the other folks in her raft swim down some rapids before. (It wasn’t clear to me at the time if it was the same rapid I’d accidentally bodysurfed, or if it was another rapid on the river – and I didn’t think to ask.) She said that she had felt concerned for me, but also a little envious.

Envious! Imagine my surprise, readers. I was feeling lucky to be alive, and also concerned about a potential head injury, and bummed about skipping out on the remainder of the rafting trip while my friends went on down the river without me, but completely unable to conceive of joining them. And she had been envious of my unexpected plunge!

She also asked me if anyone had talked with me about secondary drowning. Say what now? I told her no, so she told me about how people who aspirate water can develop infections, pneumonia, and potentially die – relatively quickly – after near-drowning experiences. She seemed a little surprised that no-one from NEOC had talked with me about it, but I thanked her for the info, let her know that my husband and I were trained EMRs (turns out she’s a trained EMS who hasn’t done her ride alongs yet), and assured her we’d keep a lookout for symptoms.

And then, as I walked down the hill and my chest pain became much more pronounced with my effort, I wondered if this was what secondary drowning felt like. Also, my head hurt.

Somehow, I managed to fumble my way through a shower, which in retrospect probably wasn’t super wise. I probably should have just sat down and stayed near people who could keep an eye on me… but it did feel good to wash the river off and put on some dry clothes. And as I took a shower, I was able to get a closer look at the contusions and bruises that were starting to form… and discover a few more.

Clean and dry, I looked around for my husband but saw no sign of him. I wondered if he’d gone back up to the car, so I braved my way up the hill, in spite of my misgivings – the chest pain got much worse with the effort. In retrospect, I really wasn’t thinking clearly. He wasn’t at the car, either, so I had to go back down the hill again to try to find him.

My sinuses felt painfully full of river water. Sound around me was muffled, and I could still hear water in my ears. When I spoke, my voice had lost the slurry thickness from when I’d been pulled from the water, but it sounded like I was stuffy with a heavy cold or allergy reaction.

My chest hurt, my head hurt, I was exhausted, and I just wanted to lie down – but worried that I shouldn’t, because I might have a head injury. Lending more credence to the idea that I’d hit my head, I’d discovered when I showered that my forehead above my left eye was tender to the touch; roughly where the helmet strap had been sitting.

Back down at NEOC’s base, I flopped on a couch and waited for my husband to find me. He did, shortly later, and I asked him to get me a bottle of water. I drank it carefully while watching the slide show of photos from the day; and first saw what it looked like to other people while I was in the water in those pictures I posted above.

One of my friends asked me if I’d seen that I was rushing toward big rocks, and had avoided them on purpose; I hadn’t. The river kept pulling me under and I was very disoriented, and couldn’t really see much when I did pop up. He told me that it seemed like I was mouthing something and seemed in distress at one point when my head was above water; I told him as far as I knew, I hadn’t been trying to communicate anything, but had just been trying to breathe.

Someone told me that the guide said I’d gone down the “safer” route that the rafts take, instead of the route that the river naturally wanted to use – the one that would dash me against more rocks – and asked if I’d gone that way on purpose. Nope! I had basically no control over where I was going or what I was doing; I went where the river wanted to take me, and breathed when the river let me breathe. I felt fortunate the river took me down the “safer” path.

Someone else told me that they’d thrown the rope for me three or four times before I finally grabbed it, but when I popped up and heard “Rope!” and saw it flying over me, it was the first time I was aware that someone was throwing a rope. I hadn’t heard anything over the noise of the rapids, and hadn’t been able to see anything because I’d been down in the whitewater or constantly being pulled under.

Lingering medical concerns

When we left NEOC, I was still worried about a head injury; my pupillary response was still sluggish, and my pupils were constricted more than they should have been based on the level of light. My headache was getting worse, and I just wanted to sleep it off, but was afraid I shouldn’t.

To add to that, my chest still felt tight and I still worried that I’d aspirated some water, so I was worried about secondary drowning. I told my husband what the lady from our raft had told me, and he agreed that it sounded like a concern.

We had planned to have dinner with our friends post-rafting, but when we arrived at the restaurant, it was just too noisy for my now-throbbing head. I wanted to be somewhere quiet and semi-dark and keep an eye on my symptoms. Fortunately, we didn’t all fit in one car, and hubby and I had driven separately, so we were able to drive back toward the rented lakehouse in Lincoln – conveniently just four miles from a hospital we passed as we drove to the house.

We hit a Rite Aid that was still open, and grabbed a pulse oximeter to measure my blood oxygen saturation level. A little Googling while we drove told me that keeping my eye on my oxygen levels was a good way to measure whether we should be concerned about secondary drowning. It also reminded me of something I’d forgotten – that I should not take Ibuprofen for a headache if I have a potential head injury – because it could cause a brain bleed, so I had him grab some acetaminophin for me.

Fortified with medical supplies, we got a bite to eat at the only place in town that was still open at 8:30pm on a Sunday that wasn’t McDonalds; a blessedly quiet and not-too-bright place with decent poutine and very disappointing nachos. Fortunately, my nausea had abated – I hadn’t thrown up after all – and I was able to keep some food down.

The pulse ox showed my oxygen levels a little low, but not so low we should worry. My speech was more-or-less back to normal, and the ~6-7 hours since I potentially whacked my head meant I was probably past needing emergency medical care and just needed rest, so it was safe enough to sleep.

After returning to the lake house and debriefing with friends, I was off to bed and slept the sleep of the dead. Except when I rolled onto my left side; my left calf and knee were very tender to the touch, and I cried out involuntarily when I rolled onto that side.

In the week that followed, I took it very easy; I had headaches off-and-on in the days that followed (and even now, 10 days later, am still having periodic headaches). I’m tired and want to nap almost daily, when normally I’m not a nap person. Signs point to a definite head injury. Sadly, this isn’t my first rodeo; I’ve been concussed before, so I know what to look for – and I also know head injuries are worse if you’ve previously had one. Bah.

My left knee was visibly swollen for a few days, and even now it’s achy and doesn’t want to support my full weight. I still can barely get up and down from the floor, and sleeping on my left side is still uncomfortable on my left calf where it’s still tender. I want to get back to a regular exercise regimen, but am worried about potentially prolonging a knee injury. I probably should get that checked out at this point…

The mental effects

Did I almost die? Probably not. The rapids had to end eventually. But if I’d hit my head hard enough to knock me unconscious, I could have drowned. I definitely worried that I might drown once I realized I was at the river’s mercy. And I certainly could have gotten a lot more banged up on the rocks.

However, I could have died… and that kind of experience leaves a mark. I know it worried and upset my husband and friends, and I definitely have some sorting out to do about my feelings around the whole thing. Part of that is writing this down, and beginning to untangle the knots.

Do I want to go rafting again? Yes. We had another trip planned for Labor Day Weekend in which we were planning to go rafting with the same friends, and I was onboard for another rafting adventure… but maybe not a Class IV – V level of adventure. Alas, we’re not able to go now, but I’ll look for the next chance to do it.

I did not go into the lake during the remainder of our week in the lake house. I think I’m not quite ready to be in water where I can’t see the bottom just yet, even though I can swim, I have a good PFD for kayaking, and the lakes where I tend to spend time don’t have strong currents.

I took a bath in our deep bathtub when we got home, and had a moment of anxiety submerging myself in that before I was able to relax. So yes, my rational mind is willing, but my animal instinct knows some stuff went down and my body is still triggering a flight reaction. I’m going to have to work on that.

In terms of the potential head injury, I am finding it a bit more difficult to focus than before, and am tired a lot. Writing this post took more time than I expected it would, and I struggled for words more often than I typically would, so I’m definitely noting some cognitive effects. Concussions suck for everyone, but it feels worse as a knowledge worker who has to use her brain intensely in the course of her job. I know from my last concussion that these things should fade, in time… but I need to work now and have to figure out an effective way to do that.

Emotionally… an experience like that raises the same old questions about what you’re doing with life, and whether you’re doing the work you should be doing, whether you’re surrounded by the people and experiences you want in your life – all that stuff. I grapple with this stuff semi-regularly anyway, but a reminder of mortality makes answering these questions seem more urgent. So back to the gristmill for me.

I guess I’ll leave you with the parting words I had for my rescuer when he asked how I was doing: “I’m alive. I’m breathing.” And that’s a pretty good place to be, all told.

Investing in good equipment

Business Coding Lifestyle Personal Writing

Investing in good equipment

A younger, more innocent me bought a 13″ mid-2014 MacBook Pro on closeout in early 2015. My main tasks for my computer at that time were writing documents in word processors (Pages) and using CMSs to create and publish content. I thought I might do some light video editing of travel videos for Corporate Runaways, but didn’t have much need or desire for a powerhouse machine. I had an external monitor for additional screen real estate, and mostly used the laptop screen for reference material.

Fast forward to 2019. In the past few years, I’ve started doing docs-as-code in conjunction with a few open source projects. From the open source project side, this has involved setting up local development environments on my machine, and running apps locally so I can document them. From the documentation side, this has involved using static site generators to create doc sites from files (markdown, mostly). My work needs have definitely gotten more intensive.

Then, this spring, I dove into Swift. When I decided to learn to code so I could write an app I want to use, I took a gradual approach. I worked through some Swift Playgrounds stuff on my iPad, and then read a book or two about coding and Swift. I brainstormed the data structure for my app, and made UML diagrams. Eventually, I took a couple of online classes on Xcode and Swift.

Between my technical writing work and my app development, my 13″ laptop + external monitor had begun to feel cramped. What had once felt sufficient for doing marketing writing in a single window, with maybe a reference window alongside, had now become a nightmare of overlapping windows and constant swapping. I wanted more screen real estate so I could have multiple windows open for reference and working simultaneously, and I wanted those windows to be bigger.

But mostly, I wanted Xcode to not just laugh at me when I attempted to compile things, or – even worse – not have Xcode sputter when I attempt to Auto Run a Playground so I can see how things are working as I code.

One of the classes I took involved working in Playground files on my machine as I followed the instructor’s videos. I had to keep pausing the instruction video to wait for my local Playground to respond to my inputs, while the instructor did the exact same thing in the video and then happily chugged along with his much more powerful machine.

It was clear. Xcode was a memory/processor hog, and I had too little of both. I’d been bumping up against those limits for a while now with my other work, but the app development pushed me over the edge. So it was time… time to upgrade my equipment.

(Don’t get me wrong – that little 13″ mid-2014 MBP did well to get me into mid-2019 without a hitch, and is still chugging along happily with less intensive tasks; it’s my “couch computer” now.)

I looked around at the options. I could get a newer, more powerful MacBook Pro. But I’d still have limited screen real estate, and that was chafing more and more. Also, I essentially never use my laptop as a laptop these days; I work exclusively at my desk, with my Kinesis Advantage2 keyboard and my external monitor setup. Could it be time to go back to a desktop, when I still remembered fondly the liberating joy of going from a PC tower to my first laptop back in the mid-2000s? It seemed like such a step back, it was hard to fathom.

But the more I thought about it, the more it seemed to make sense to get a desktop again. I never use the laptop as a laptop. I could get better CPU/more RAM significantly cheaper with a desktop. And then I could have another big monitor, giving me the screen real estate I’ve been craving.

I decided to go back to a desktop. I clearly didn’t need a powerhouse like the newly-announced Mac Pro, so I wasn’t going that route. I looked at the Mac mini; a capable little machine. I looked at the iMac, with its beautiful monitor. I looked at the iMac Pro – nope, that’s more than I need.

Waffle. Research external monitors. Waffle. Spec out both machines to a level that would support my current needs, plus some future-proofing. Cringe at the price tag. Waffle some more. Deal with some stupid imposter BS because my husband is the experienced web dev, and how could I justify spending that much on a setup for my less-intensive work + dabbling in Swift development; an entirely self-driven project that may never make me a penny?

Eventually, I drove the hour to the nearest Apple store to see an iMac in person. And then I sat myself down and gave myself a pep talk about giving myself permission to invest in my skill development. Maybe I’ll get more heavily into coding as a tech writer. Maybe I’ll love developing in Swift so much that I’ll pivot to Mac app development. Or maybe I’ll write this app, but then decide that coding isn’t something I want to pursue beyond that. I won’t know unless I give myself the room to develop those skills and see what happens, but it is 100% OK to invest in my career potential.

So I pulled the trigger, and got a beautiful 27″ iMac. And it isn’t the entry-level iMac, either; it’s closer to the top tier, to give myself room for growth.

And you know what? It is frigging delightful. It’s so fast. And the screen is so beautiful. It’s a little painful to use it right next to my old external monitor, which isn’t even 4k; the resolution drop and seeing visible pixels is a little jarring looking back and forth. I expect I’ll upgrade that, too, soon. But my tech writing work has been much more hassle-free with the extra screen real estate, and staring at text on a retina-resolution screen is delightfully enjoyable.

So here’s a reminder, if you need one, too: investing in good equipment is an important part of taking your professional life seriously. This is mission critical for remote workers who don’t have office-supplied equipment. I see a lot of remote workers sitting on their couch and typing on a laptop keyboard; that’s a good way to ruin your hands, your back, your posture, and reduce your efficiency and output. (Trust me, that’s how I started out with my remote work back in 2007.)

Yes, I am extremely privileged to be able to spend the money on an Apple device; I know you pay a big premium for their products. And I know that not everyone has the financial freedom to invest in big, splashy monitors and professional-quality office equipment; especially for folks who are the sole breadwinners, or supporting family members. But it is worthwhile to put money aside and invest in the equipment you need for your career, in whatever form you’re able and whatever that equipment looks like for you.

I am very much enjoying my new setup.