❤️ Heartbeat
Product: Cycle 5
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 's first full cycle. We also welcomed , and then . Then last week we were joined by ! 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. 💪
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
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
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
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
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
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, , , and . 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.
This isn't just a programmer thing, though. Huge credit goes to Team OMG,
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
🍃 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:
put the finishing touches on the Basecamp Product Blog, removed the password protection, and released to the world. performed some serious nailcare on Basecamp's time picker widget, improving keyboard navigation and fixing longstanding bugs. released new versions of the HEY and Basecamp desktop apps with fresh icons for macOS in the style of Big Sur. fixed that messages would lose their category when moved or copied, a longstanding bug that we didn't notice until multi-tool shipped. fixed that Basecamp's Chatbot configuration instructions assumed a single Campfire, which is no longer true with multiple tools. fixed that Basecamp's category configuration screen assumed a single message board, which is also no longer true. fixed that the Hombrew package for Elastic Search was busted on M1 macs. helpfully created some realistic Ping conversations for Basecamp's collection of local seed data. increased the amount of preview content we show in todolist cards now that there's more room after last cycle's visual refresh. - We fixed that you couldn't re-send HEY's outbound forwarding verification email if you missed it, nor did we make it obvious whether verification was still pending, resulting in missed forwardings.
fixed that Basecamp's schedule preview cards were displayed incorrectly when only one event was visible. breathed freshened up Trix by updating development dependencies, moving the build system to rollup, and eliminating the Trix global in favour of ES6 import & export. worked with to stay on top of revenue and tax reporting obligations, and continued the slow march of winding down the check payment program by removing the check option from BCX. cleaned up all the remnants of HEY's "Work" version, which was rebranded as HEY for Domains prior to launch. & attended the Modern CSS Workshop by Stephanie Eckles and learned that you can teach an old dog new tricks. cleaned the BC3 campsite by removing unnecessary JavaScript polyfills. fixed that it wasn't possible to export the mail of deleted HEY for Work users, despite the documentation saying that it was. - We improved the way HEY sorts contact search results, favoring name prefix matches and recently-addressed contacts so you're more likely to find who you're looking for.
pitched in to make the CSS work for Basecamp's new turbo-powered project cards. - We started on a project to bring Basecamp's rich text color-formatting tool to HEY.
created some amazingly enterprisey Enormicom logos that and can use in the BC4 Demo Data project. has barely been here a week and he's already fixed that invitation notes weren't being included when inviting a Basecamp client, fixed that checkbox elements would persist their checked state in Firefox after reloading instead of respecting the state declared in the DOM, and gotten familiar with the Basecamp Electron desktop app by bumping its dependencies.
That's all for now! Thanks again, and until next time,
–