When creating clients, best practice is to keep the clients as very light, and to place most of the data, as well as most of the functionality, into components.
- https://github.com/reelrbtx/SMACC/tree/master/smacc_client_library/move_base_z_client
- https://github.com/reelrbtx/SMACC/tree/master/smacc_client_library/move_group_interface_client
You should also start with some limited set of client behaviors, which have a lifetime scoped to the state, and should contain most of the interesting code.