Journal
Cleaning up the cobwebs
Lately, I’ve felt the need to be proactive about cleaning up parts of Cushion that either no longer serve a purpose, slow the app down, or both. Top on this list for a while sits a feature that I actually never released out of a (very) private beta—only five-ish users were trying it out and this was years ago. The feature was a swing-for-the-fences to potentially grow Cushion exponentially through what folks call “network effect” in the startup biz. It didn’t work out for a number of reasons—and I’m glad it didn’t—but its footprint touched so much of the app that by the time I was ready to remove it, I knew it’d be a significant undertaking. The feature is what I call “collaboration”.
Collaboration in Cushion was like “teams for freelancers”, but there were no dedicated teams. Any user could invite any other user to a project. Or they could invite a non-Cushion user to a project solely to track their time, like a subcontractor. Then when it came time to create an invoice, they could include their own tracked time along with the subcontractors’. The original user would simply pay extra for “seats” for their collaborators, and that would be an extra $5 per seat per month or so. By inviting subcontractors to a project, this would potentially encourage more non-Cushion users to start using Cushion. This is that “network effect” I mentioned, combined with a way to get more monthly recurring revenue out of a user—especially since a handful of folks have begged for multiple users in the past.
On paper, it sounded like a great idea that makes complete sense. In the implementation, I think we went about it the wrong way both on the backend and on the frontend. Instead of taking the straightforward approach of introducing a separate parent “team” model that could have many users and be the owner of the shared projects, we decided to shoehorn the database associations for collaboration into the existing user model. With this approach, a user could have “members” (users) and “readable” and “editable” datasets for anything that’s shared. Then for anything created, like time tracking entries or workloads, the user ID for these would be the member, but model would also be tied to the parent user. This led to an entire layer of complexity added to almost every database query that involved these models. And that led to slower database queries for everyone in the app—not only folks using collaboration.
On the frontend, “collaboration” was its entirely own section with subsections for all the existing top-level sections—scheduling, time-tracking, etc. This essentially doubled the footprint of the app, but in a way that felt duplicated instead of built-in or well-thought-out. Again, if I had only followed the straight-forward approach of a team-like model where you could view different workspaces, ala Slack, it would be much more straightforward—especially if one of those workspaces is your own personal one.
In hindsight, the correct solution seems so simple, but I need to remember that six years of time and experience has accumulated since then. Of course, it seems simple now, but it didn’t then—especially in the stressful situation of needing a home run. I can’t knock myself for that, but on the glass-half-full perspective, at least I didn’t actually launch collaboration, get loads of folks to rely on it, then realize it wasn’t right for the app. And, if I ever wanted to revisit the concept with a more straightforward approach, I now have the wherewithal to do it in steps. First, I’d introduce the concept of workspaces for individual users, so they could have multiple businesses. Then, I could introduce the ability to invite other users to those workspaces. That would be the correct approach.
As much as I want to give it another shot, I first need to make Cushion perfect for the individual. Then I could reconsider collaboration. With this in mind, I’m determined to be much more consistent with user research going forward, so I could polish all the rough spots that nag folks on a regular basis. If you’re eager to share your thoughts, I’ve re-enabled chat in the app. Hit me up!