Lots of updates to Preceden this week:
Improving the UX for the AI Suggestions
When we rolled out the AI Suggestions feature last week, the typical experience for the user would go something like this:
- Maybe notice the new “AI Suggestions” button above your timeline
- Click it, hit Generate
- Watch spinner for a minute and eventually see the suggestions
Lots of UX issues there though:
- No real incentive to click on the AI Suggestions button besides curiosity
- Waiting a minute for suggestions sucks and I’m guessing a lot of users bailed before then (I didn’t set up tracking for it yet so can’t say for sure)
To remedy this, I updated Preceden to automatically kick off a suggestion request when the user loads their timeline and display the suggestion count directly in the AI Suggestions button:
That way when they click the AI Suggestions button, the suggestions are visible immediately and they hopefully get that “aha!” moment and see the value in it.
Also, one reason the suggestions took so long to generate is that it was also figuring out what icons to use for each suggestion before displaying them to the user. And at 1.2 seconds per event to figure out the icon, that winds up adding a lot of extra time. My short-term solution to this was to not figure out the icons before displaying the suggestions to the user, and instead figure out the icons behind the scenes while the user is browsing the suggestions. If the user eventually decides to add the events to their timeline, Preceden will see if it has figured out an icon for it by that point and if so, use it, otherwise just use a default circle. Still plenty of room for improvement there, but not a bad solution for now.
The logic that enabled the automatic icons for the AI suggestions also made it possible to automatically suggest icons for events that users manually add to their timeline:
Some of the automatic icon suggestions are questionable though, so I’m likely going to start tracking what icon is suggested and what icon the user winds up using, and possibly using that to adjust the suggested icons in the future. For example, if Preceden suggests an astronaut for an event, but a lot of users in the past changed the astronaut icon to a spaceship, then maybe Preceden can suggest a spaceship to future users instead of an astronaut.
I did worry before all this that the API costs would be excessive, but thankfully they haven’t been:
While watching user sessions on FullStory (to see how users are interacting with the AI Suggestions tool), I saw a number of spammers sign up and create link-filled events. Here’s an example:
I wound up building an admin tool to help me identify and ban those users:
And later built a script to automatically block them.
All in all, I banned 715 spam accounts yesterday. Banning here means making their timelines private and locking them out of their accounts unless they contact support. Didn’t want to automatically delete anything (timelines or accounts) because this script could misidentify real users as spammers and wanted to make it easy to let them regain access to their accounts if that happens.
Thankfully, these spammers were easy to identify. They almost always created 1 timeline with 1 event and in the event description they added a bunch of backlinks and Vietnamese descriptions (which I used the DetectLanguage Ruby gem to figure out).
I also took some time this week to set up an internal dashboard (in Hex via dbt and Stitch) so monitor usage of the AI Suggestions tool. Here, for example, are the # of suggestions it came up with by day:
The increase is due to the automatic suggestions rolling out.
We’ve made a lot of updates over the last few months to the timeline colors, and some of them wound up conflicting resulting in less-than-ideal icon colors:
Notice how the icons for the darker events are barely noticeable.
Wasn’t too hard to fix though:
No major updates this week.
Milan (Preceden’s front-end engineer and designer) is busy finalizing the redesign. Should ship next week, and then I’ve got a bunch of updates planned for the next phase of its journey.
Thanks as always for reading 👋