Incident Library

IL-0300 37signals · 2018-11-09database

Basecamp 3 went read-only for almost five hours when its events table reached the ceiling of 2,147,483,647

Basecamp 3 records almost every user activity, such as posting a message, updating a to-do list or applauding a comment, in its events table. On November 9th, 2018 that table reached the ceiling of 2,147,483,647, the database could not write new events, and practically every action in Basecamp 3 stopped. Basecamp 3 stayed in read-only mode from 7:21am to 12:11pm CST, almost five hours. The fix raised the ceiling of the tables from 2,147,483,647 to 9,223,372,036,854,775,807.

The team had been working on expanding the capacity of the events table in the days before the outage, but had not accounted for how fast the remaining headroom was running out. Ruby on Rails 5.1, released in 2017, had already changed its default for database tables in the same way, raising the ceiling for records from 2,147,483,647 to 9,223,372,036,854,775,807. Basecamp's CTO, who created Rails, wrote that he should have checked Basecamp's own schema when Rails 5.1 announced the new default. It was the worst Basecamp outage in probably ten years, and it took Basecamp 3's uptime record since launch from 99.998% to 99.978%.

Severity
–
Scope
Basecamp 3 was read-only: existing messages, to-do lists and files could be read, but nothing could be added or changed
Users affected
Basecamp 3 users
Region
–
Time to detect
–
Time to resolve
4h 50m

Symptoms

On November 9th, 2018, from 7:21am to 12:11pm CST, Basecamp 3 was in read-only mode. Users could open existing messages, to-do lists and files, but could not add anything new or change anything that was already there.

The database could no longer write new rows to the events table, which had reached its ceiling of 2,147,483,647. Basecamp records almost every activity in this table, such as posting a message, updating a to-do list or applauding a comment, so practically every action in Basecamp 3 stopped once new events could not be written.

Symptom Writes rejected

Root cause

Root cause Capacity exhaustion

Component Database
Contributing factor No capacity planning
Trigger
The busy events table, which records almost every activity in Basecamp 3, reached its ceiling of 2,147,483,647, and new events could not be written.

Detection

–

Remediation

Action items

–

Lessons

The outage was avoidable. The team did not account for how quickly the events table was running out of headroom while it was already working on the problem, and it should have reviewed its own database schema when Rails 5.1 announced the new default in 2017.

Sources

Related cases

Check your cluster for this

kubegap audits a Kubernetes cluster for conditions like the ones in this case, Database among them, read-only, from Claude Code or Codex. Its checks cite public reports like this one.

For AI tools and scripts

The API needs no key. The MCP server offers search_incidents, get_incident, list_incidents, get_topic and vocab; both are explained on API and MCP.