GoProject team
Why GoProject has no reindex button
Every Jira administrator has a reindex story. We decided the best way to make the button reliable was to make it unnecessary.
The button and the war stories
Search in Jira runs on a Lucene index next to the database. When the two disagree, and they do, the fix is a full reindex. On a large instance that is hours, sometimes a weekend, and the queue that backs up behind it.
A different bet
GoProject queries PostgreSQL directly. Work items, custom field values in JSONB, comments and links live in one place, and every search clause becomes an indexed SQL condition. There is no second copy of the data to fall out of step.
What that costs
It costs discipline in the schema. Counters that used to be computed on read are denormalised and maintained on write. Pagination is keyset, never offset. Every API call has a budget of 300 milliseconds at the 95th percentile, and the test suite fails when a query plan stops using its index.
What you get
- No reindex, ever, in any operational runbook
- Search results that reflect the write that just happened
- One database to back up, restore and reason about
The board you are looking at is the database. That is the whole idea.