Kayako was used at a past organization for support tickets via email. We restricted use to email in most cases and did not expose the Kayako interface to our customers. We wanted a simple email address they could send support requests to that would allow us to track and distribute work to employees. Kayako provided this. We purchased and hosted Kayako in-house so there were not any 3rd party dependencies..
Kayako has an API that allowed us to build tools to interface and expand Kayako's functionality. We used the API to build a website that would show how many tickets were in queue and would alert the help desk to new tickets from a large display with an audible noise that had the website up 24x7. This allowed for us to have very quick response times to new tickets that came in as they had to be acknowledged to make the loud beeping alert stop.
Since Kayako runs on an open source database (mysql) and we had control of the infrastructure that it was hosted on, it allowed us to directly interface the database to further expand functionality. We built a billing module outside of what Kayako offers for billing that allowed us to pull the specific data we needed to bill our customers. This gave us the capability to apply different rules to customers and how they were billed based on defined rules we setup. The custom interface also put data in a format that was easier to work with for our billing department.
From a technical standpoint Kayako is versatile, but there are some oddities to the way they track certain things that may require internal business rules. For instance, they have the time worked and time billed as separate fields on a ticket. This can be very nice if used correctly, but seemed redundant to employees and sometimes they would not input data correctly. This was another reason we elected to write our own billing module so that we could have more insight into what data was pulled and highlight areas that may have been worked but not billed so that the differences could be investigated.
Kayako stores almost everything in the database. This is very nice for modifying things and not needing permissions on a bunch of directories for configurations and file uploads. For our organization (less than 10 users) this worked great and we never had any problems. I did worry about what response times would be from the database and if it would slow down in the event we were to have a large number of concurrent users. Every page load had numerous queries to the database. I would think it could benefit from memcached to assist in scaling to larger environments.
File attachment storage location was a configurable option as to whether they were stored in the database or on the file system, so that gave the option of keeping the database footprint much smaller.
Backups of Kayako were very straight forward. We backed up the directory for the webserver with rsync every hour, and the database was backed up daily with mysqldump and we also stored incremental backups every 15 minutes from mysql's binary logs.
Overall we were happy with how Kayako performed. It is not the cheapest system we evaluated, but it did work better than many of the open source solutions we evaluated.