Handling 3,600+ support tickets per year as a team

Sparer Lilian
Botify Labs
Published in
5 min readOct 25, 2021

--

At Botify, the main tasks of the Technical Support are answering all technical questions (from customers and Botifyers) and setting up customer accounts in order to generate data dashboards.

5 years ago when Botify had few clients, everything could be done manually: run a crawl, retrieve client log files, check that the data is up to date, etc…

But today, with thousands of active log dashboards, this becomes a herculean task!

We are 5 engineers in the support team, all with development and scripting knowledge, so we progressively adapted our processes and tools to cope with the spectacular expansion of Botify.

Our first rule: if you have a question or an action that you perform more than once a day, you should try to create a tool and if possible, have it automated.

Our ticketing system

Let’s start with Zendesk, our main tool for talking to customers. We created custom fields that are mandatory to fill in order to close a ticket (as you can see in the screenshot below). Product Category contains the list of products provided by Botify as well as the main features available on the platform. A Ticket Type helps us qualify the task as:

  • Onboarding
  • Data issue
  • Technical question
  • Account management
  • Bug
  • Question for other teams
Custom Zendesk fields “Product Category” and “Ticket Type”

With all this data, we were able to generate a report to know which points need to be improved and which are recurrent problems. With these insights, we knew which Zendesk macros would save us the most time and what new articles would be added to the Knowledge Base.

A macro is a prepared response or action for support tickets that can be applied with just one click — here is the list of our current macros

A time-consuming recurring action is to track tickets awaiting a response from customers and close those which do not expect an answer.

As our rule advises, we created Automations on Zendesk to avoid doing it manually:

Automated email body

Each customer receives this reminder email if they don’t answer after 7 days.

A week later, we send a last email indicating that the ticket is closed, but that they still have the possibility to answer if needed. It allows us to circle back with the customers automatically and to maintain a clear backlog.

It may happen that the customer cannot respond within 7 days. We created a 1-Month reminder option in the ticket settings, so that the workflow will send a reminder email one month after instead of 7 days:

Automatic 1-Month reminder option

Our internal projects and tools

As our main activity is the configuration of customer projects to generate log dashboards, we naturally focused our efforts on creating internal tools to help us in our daily work with logs.
These tools are released internally and can only be accessed by support members.

Before configuring a log dashboard, the customers provide web server log samples in order to verify the format of the files.

The web offers as many log formats as there are clients (Apache, NGINX, IIS, etc..) and it is complicated to visually verify that all expected fields are present in the file. Thus, we created tools using Python to check and validate log files automatically.

These tools include a log file line checker which validates that all fields are present. It also provides visualizations that give us an estimate of the content of these files.

Here is the result you get when you run the command:

Internal dashboard to verify log file content

Another time-consuming task is to write a pattern to make our log parser understand the format of the client’s logs.

For example, if a customer sends us this line:

66.249.00.00 - - [31/May/2021:22:03:55 +0200] "GET /botify/index.html HTTP/1.1" 200 15301 "-" "Googlebot/2.1(+http://www.google.com/bot.html)"

We need to configure the parser to match the first field to the IP address, ignore the second and third, understand the fourth as the date, etc. but this can be quite annoying to do manually.

This is why we implemented the Pattern Creator to save time on writing patterns. We just need to click on the buttons to generate the pattern and copy/paste it into our internal configuration.

Pattern Creator options

Finally, a considerable part of our job is about monitoring the health of customer’s dashboards. As keeping an eye manually on thousands of dashboards would be cumbersome, and even infeasible, therefore we automated this process too. The team developed a program that detects anomalies during the log file download and sends alerts to Slack:

Slack alert notifying about an anomaly

How does it work? Each time an error is returned in one of our download scripts, a custom Slack hook is called to send a message to a dedicated Slack channel.

How we get organized for internal projects

Our main objective is to answer all customer questions and solve any problems that may arise. We are always on the lookout for new ideas that could improve the customer experience! We spend between 10 and 20% of our time working on internal projects.

To manage our internal project roadmap, we use a Kanban board to record our ideas, plan developments and monitor the progress of our work.

Our dedicated Kanban dashboard

Our team holds an internal meeting every 2 weeks to follow everyone’s progress, to adapt the schedule if needed, and make group decisions regarding how those tools might be integrated in our workflow.

What is our next challenge? To create a new internal feature to automate the troubleshooting of log dashboards that might be missing data. This will be an opportunity to work with our engineering and machine learning teams!

Interested in joining us? We’re hiring! Don’t hesitate to send us a resume if there are no open positions that match your skills, we are always on the lookout for passionate people.

--

--