How to choose Terraform provider/API-client domain boundary

The documentation for extending Terraform recommends that even in the case when we are maintaining the managed system, we seggregate the code in Terraform agnostic client, and keep the provider thin, integrating the client to implement the CRUDE methods.

But then, we find that TF provides a httpclient (we went with Resty), retry and timeout facility (we baked that in the client), etc.

Can we have a quick and dirty rule of thumb how to decide what belongs in the provider and what in the client lib?

In our case:

  • Does it make any sense switching away from Resty (we don’t use any advanced features).
  • Does TF’s retry/timeout provide any benefits over a naive implementation?