❤️ Heartbeat

Product: Cycle 5

Jeffrey Hardy
Jeffrey Hardy
Hey everyone 👋

Cycle 5 is in the books, officially anyway. We're still finishing things up as I write this, with some features only available to staff and others quietly released. We'll hold off on the Big Announcement until everything is out the door.

Shipping new features is exciting, but the big new this cycle was all the new faces. We doubled in size(!) from five to ten, flexing our atrophied hiring and onboarding muscles in the process. It's the biggest influx of new talent our team has ever seen, and it's cause for celebration.

This was
Michelle Harjani Michelle
's first full cycle. We also welcomed
Dorin Vancea Dorin
, and then
Alberto Fernández-Capel Alberto
. Then last week we were joined by
Anup Narkhede Anup
! It's been wonderful and gratifying to see so many faces on our weekly team calls, to see so much activity in our Campfires and pull requests and deployments. Things are happening. So much so that it's getting hard to keep up. It's a fresh start, in the very best sense, and it feels great.

So before we delve into the details, please join me again in extending a warm welcome to everyone, and a hearty congratulations for a solid first cycle at Basecamp. 💪



🚀 New Stuff!


Repeating To-dos
Scott Upton Scott
,
Dorin Vancea Dorin
,
Pratik Naik Pratik

Of all the longstanding requests, across all versions of Basecamp, repeating to-dos has to be the longstandingest. I'm not sure why we shied away for so long. Some combination of uncertainty and fear most likely. But to quote Jason's kickoff, hell hath frozen over and pigs doth fly because repeating to-dos have arrived.

For all those years of hand-wringing the implementation turned out to be refreshingly simple (see the pull request). We had prior recurrence art from our system for schedule events to lean on, and BC3's delegated type system of recordings and recordables made adding recordable-specific behavior straightforward. For dated to-dos we use a cron process to create the next repetition when due, and for manual completion we just recreate on the spot.

Don't Forget
Jason Zimdars Jason
,
Jamis Buck Jamis

Everyone here is familiar with the unread hack: when you need to remember something, you mark in as unread so it appears in your Hey! menu. The perpetual unread badge will shame you into following through, right? Now you can stash those unforgettables while still keeping them in your periphery. And your unread count will reflect reality.

It's a cool feature that we're already using, but the interesting tale here is one of complexity. This was a deceptively hard project. The Hey! menu is a primary navigation pathway and we've spent an inordinate amount of time making it behave just right with the variety of stuff it can contain. These tweaks have accumulated over time, and the result is an ad hoc set of rules for how "readable" things should be created, propagated, and presented.

Given what we know now, it's possible that starting over from scratch would have been faster than deciphering and adapting a complex, ossified system. The thing is, in order to make that determination you need to understand the system in detail, lest you underestimate. It's also difficult to know how much complexity is intrinsic to the problem domain and how much is incidental. One thing is certain: if we need to touch the menu and reading systems again, a fresh take would be smart.

Closing comments
Michelle Harjani Michelle
,
Alberto Fernández-Capel Alberto

We've had multiple requests for this over the years, and now it's here. Anywhere you can comment (which is almost everywhere), you can now close comments. Like many things, this seemed like a straight shot when we scoped it out, but we forgot about one thing: Boosts. Boosting is a form of commenting, so we decided to disable those too. That expanded the scope, exposing some hidden boost dependencies that needed to be resolved. It took some additional time, but the codebase is cleaner in exchange.

Campfire & Ping editing
Michelle Harjani Michelle
,
Alberto Fernández-Capel Alberto

Another entry in the Finally category. Everyone makes typos in chat. Soon you'll be able to fix them inline, and all will be right with the world. As usual, there were interesting tidbits along the way:
  • Alberto used this opportunity to modernize our chat formatting code and upgrade line editing behavior from bespoke CoffeeScript to vanilla Stimulus 💪
  • Inline editing revealed the perennial weirdness of Campfire's magical auto-quoting behavior and debate ensued as to whether we should drop it, with or without replacement. We decided to leave it as-is for now and address it next cycle by exposing a full rich text toolbar with all the usual formatting options.


🕵️ On-Call Report

In a joint effort with SIP, programmers continue to rotate through weekly on-call shifts, rooting out bugs and reducing operation toil. I can't overstate just how effective this has been at boosting product quality and driving down the general maintenance workload. What used to be a chaotic day requiring the full time attention of two programmers is quickly becoming a one-person job. In fact, that's our intention for 2022.

This isn't just a programmer thing, though. Huge credit goes to Team OMG, 
Tony Giang Tony
,
Sylvia Chong Sylvia
, and
Michael Berger Michael
. Together we've created a much smoother on-call process. We're no longer in and out of HelpScout all day, piecing together case history from assorted notes and losing the trail between shifts. Instead we have a calm, in-Basecamp process for triage and escalation (see the excellent programmer docs too). It's made a huge difference.

You've seen these screenshots before, in Rosa's heartbeat, but they bear repeating. This is a tremendous amount of work. Work that was previously invisible and difficult to quantify.


Look at that! Seriously, it's something to be proud of.

I know that on-call isn't everyone's cup of tea, so I truly appreciate the effort everyone has put in. I'd especially like to call out
Rosa Gutiérrez Rosa
, who we can all agree has done more than her fair share, and also the scheduling. ❤️


🍃 Odds & Ends

As always, there are bunch of random things things we do, between planned projects, during cooldown and on-call. There's too much to write about, but here are some interesting bits:




That's all for now! Thanks again, and until next time,

Alberto Fernández-Capel Alberto
,
Anup Narkhede Anup
,
Dorin Vancea Dorin
,
Jason Zimdars Jason
,
Jamis Buck Jamis
,
Michelle Harjani Michelle
,
Pratik Naik Pratik
,
Scott Upton Scott
, and me ✌️