If you ever find yourself wondering whether your design is good enough, remember that because the Golang developers opposed generics so adamantly the Kubernetes community ended up with a code generation script (which has the templates defined as string literals and only seems to run in $GOPATH) that is being used to provide type safe client objects for every single API resource. Yikes!
The worst part about this is that it makes it quite difficult to treat custom resources that you might define in the same way you treat core Kubernetes resources.