We run Hack Days every so often here at GoSquared – they’re a great opportunity for everyone on the team to have a go at experimenting or building something we might not otherwise have time for.
Here are some of the highlights from our most recent hack day:
Tag your teammates in conversations
One of the most highly requested features for GoSquared Live Chat is the ability to tag another team member from a not within Inbox, if you need to draw their attention to a conversation, or request their assistance.
Building this feature requires a few moving parts. The note composition input needs to understand what a Mention looks like, and suggest which teammates to tag. The messaging backend then needs to receive and understand these mentions and pass them off to our notification system, which can take care of delivering an email or mobile push notification to whoever has been tagged, along with permissions and access-control checks to make sure you can only tag the people you’re supposed to, rather than any GoSquared user.
On hack day, JT decided to see how much of this system he could build. The prototype version includes support for selecting and tagging teammates in Notes, and automatically sending them an email once the note is saved.
We’ve been trialling this prototype internally for a while now and have found it really helpful for our productivity. There’s more that we still need to build before making this available as a proper feature to all GoSquared users, such as mobile push notifications and the ability to configure which notifications you receive – if this is something you want and you have suggestions for how we can make this feature great, then reach out and let us know!
Automatically suggesting profiles to merge in Inbox
Matt decided to focus on the client experience of dealing with Merging profiles. While you can manually merge profiles, it would be ideal for a user to have a continuous constant profile of their interaction and usage with the data – even if they are not signed in, and they use chat from their device.
We have to think about security. We could automatically merge profiles together the moment someone provides an email address – but we should not trust the personal identifying data given to us by an anonymous user. This could load in all the previous conversational history – you shouldn’t be able to put in email@example.com and access all of that user’s chat history without verification.
The simplest way to go about this was to automatically search when a supposedly unique user starts a chat.
It is then still up to the person handling the conversation to decide whether it’s safe to merge two profiles together, but suggested merge helps make it significantly easier to discover potential profiles to merge together.
- Provides a human decision to merge for security
- Have a full history and context of your interaction with a user.
- Saves you from having to proactively check if new user could be existing.
A suggestion of design refinement for the future directly in the inbox interface could be something like this…
Improving our backend logging infrastructure
For hack day, Geoff set about improving our logging setup for our backend apps. Amazon CloudWatch Logs has come a long way over the years, and their new Insights feature is much faster at crunching through vast amounts of logs. He wanted to get more of our logs in there so worked to create a logging module, which is based on an open-source module for CloudWatch Logs called lawgs.
The idea is to provide a set of logging methods to the application (e.g. logger.log) to log to a particular Log Group on Cloudwatch Logs. The module captures the machine’s hostname and sets it as the log stream name, so you get logs for each machine neatly organised in the log group.
logger.log(message, data) provides a message and data to the log, data being a regular object that can be used when searching logs, since any of its contents can be queried by CloudWatch Insights.
This module will help us centralise more application logs making them easier to monitor, search, and use for debugging.
James spent his hack day tackling one of our internal challenges – how we store and update customer data in Notion.
If you have seen or used any of our public Notion templates, you may have noticed that we do a weekly “kickoff” meeting with the team, where we communicate new customers, upgrades, and any cancellations we’ve had in a given week.
One of the frustrations has been that we have a lot of duplicate data in Notion. In addition, we have a lot of manual data entry to do because unfortunately we can’t (at this time) connect Notion to any tools which are our source of truth for customer data.
To make the laborious process of data entry in Notion slightly easier, and to centralise our customer data better within Notion, James overhauled several separate databases and connected them together to one centralised “Accounts” database.
So now, in Notion, we have a single record for an account, and for a contact, meaning we can reference key headline information in kickoff meetings much more easily than before.
While it’s not the complete solution just yet, it’s a step in the right direction, and that’s sometimes all that matters on a hack day!
Better Import Notifications
Importing contacts into GoSquared is a really important step when a user moves to GoSquared from another tool. One of the things we were keen to improve was to be able to send better notification emails when a user had successfully imported contacts. Not just notifying them that the import had been successful but also how you were able use those contacts with features GoSquared. For example, tracking their usage across your website or using our Automation features to send them better messages and emails.
Previously notification emails would have been sent via our backend, which really limited the team members who could edit and improve the notifications.
However being able to our own features, like Automated Messages, would allow the whole team to create and test notifications.
From an engineering perspective, when a user imports contacts via a tool like our CSV importer or Intercom Contact Importer, for performance and reliability, we break that import into multiple background jobs. In order to be able to trigger an Automated Message in GoSquared we need to track an event in GoSquared when all jobs are done.
For each import job we now create a Redis set for that particular import job, where we SADD in all of the items and then SREM them once they’re done. Then we do a SCARD to check to see the remaining job. When cardinality === 0, we know our total job is done, and we then track the event.
In GoSquared that event will trigger an Automated Message that will send an email to let a user know the job is done and how they can go about getting more value using the contact in.
A better job all around!