En mi opinión, las variables de instancia solo son necesarias cuando los datos se utilizarán en todas las llamadas.
He aquí un ejemplo:
myCircle = myDrawing.drawCircle(center, radius);
Ahora permite que la imagen de la clase myDrawing use 15 funciones auxiliares para crear el objeto myCircle y cada una de esas funciones necesitará el centro y el radio. Todavía no deben establecerse como variables de instancia de la clase myDrawing. Porque nunca más serán necesarios.
Por otro lado, la clase myCircle necesitará almacenar tanto el centro como el radio como variables de instancia.
myCircle.move(newCenter);
myCircle.resize(newRadius);
Para que el objeto myCircle sepa cuál es su radio y centro cuando se realizan estas nuevas llamadas, deben almacenarse como variables de instancia, no solo pasarse a las funciones que las necesitan.
Básicamente, las variables de instancia son una forma de guardar el "estado" de un objeto. Si una variable no es necesaria para conocer el estado de un objeto, entonces no debería ser una variable de instancia.
Y en cuanto a hacer público todo. Podría hacerte la vida más fácil en este momento. Pero volverá a perseguirte. Por favor, no lo hagas.