Why do I have to sync all records, and not just a subset that I choose?
This is a very valid question to ask, and one that warrants an explanation. Internally, we have hashed over this many times and always end up back at the same conclusion. There is simply no practical way to sync accounting data in a "partial" manner.
In order to make data synchronization manageable (and scale), we query it by the last modified time stamp. Of course, this is only a valid method to fetch anything that has changed after a full sync has been accomplished. Thereafter, we simply ask for anything that has changed since the last sync.
So what would happen if we did not sync some records, but then later wanted to add all their data? We would have to first go out and query every data element type and the query would need to be specific to that customer only. This would have to be done for each customer, and one at a time, as each request was received from the sync app. As you can see, this would be an enormous amount of IO as the sync process would continuously keep querying records for each data element (customer, invoices, payments, credit, etc) over and over.
Might this change in the future?
At present, we are actually working on a new QB Desktop Sync system. It will have the ability to do more "real-time" queries and feedback to the portal app. We have been experimenting with the ability to pull new data upon request from the app. If we can make it work efficiently, there is a possibility of providing a means of populating only subsets of the data in the future.