As a general principle, we try and minimise the amount of data that we store, and keep as much as possible in Slack. The majority of what we do is then built on top of Slack, dynamically pulling information on demand to provide a “view” on top of that.
💡Let's walk through how we store chat messages.
We don't store any chat message content on incident.io servers — we store the ID of the message.
When a request is made to view the timeline of the incident (which displays the content of the message) we ask Slack for the message content when serialising our response, and pass it to the dashboard. It is also cached in-memory for a few minutes to avoid hitting Slack's rate limits.
There are a few pieces of information and entities that we can’t realistically store or power directly with Slack, as they are specific to the application we have built. Examples include actions, the summary of the incident and incident.io account settings.
For these use cases, we store a minimal amount of data in our primary datastore (Postgres). All data is encrypted at rest and in transit throughout our system.