A frequent question about using CommCare is "how many cases is too many cases?"

There are lot of dimensions to this question, and this page is intended to help you think through them.


Reasonable Case Loads

The acceptable case load varies depending upon several factors:

  • how big the case is
  • the device/phone
  • the complexity of what you are doing in your app
  • how long your users can wait for a case list load or for a sync

In general, for a single case type, we find the following case loads to be technically feasible:

  • CommCare for Android: 1000
  • CommCare for Feature Phones: 200

However it is important to test a realistic load of cases on your phone if you will be approaching these numbers. A rough rule of thumb for an "average" case is that every 25 cases or so will add an additional second to the sync process.

Furthermore, just because it is technically possible to have 1000 cases on your phone may not mean it is operationally feasible - for example, if you are using case sharing and need to frequently sync data it may take close to a minute each time, which may not be acceptable in some workflows.

Closed cases are not synced to the phone and do not count against these numbers.

Performance Issues

Slow loading of the Case List

The phone is great at filtering cases for a case list based on case type or based on parent-child case relationships. For example, if you have 500 mothers with 10 children each, the case list for the mothers can load in a reasonable amount of time. Displaying a mother's 10 child cases should be even faster. However, showing all children would take an order of magnitude more time. 
Case list load time is negatively affected by how much case data gets displayed on the case list or used in sorting. Additional filtering based on case properties will also negatively affect how long it takes to load a case list. Basically, you want the smallest number of case properties to be accessed when building the case list as is possible, if performance is your primary concern.

Slow Sync with Server

The sync time with the server is affected by the total number of cases on the phone. The first sync may time out; subsequent syncs should succeed. To understand what's happening, the server is calculating what needs to be sent to the phone during the first sync request and will cache it for subsequent requests even if the first sync times out. There's ongoing work to improve this experience.

How to Test

In general, our recommendation is to test out your particular scenario with cases created using the Excel importer tool.