> I see why this is called `update`, but it's doing multiple roles: it's a public method updating attributes from the controller, an internal method of setting attributes internally, and a validator for the attribute keys which are passed to it.

I don’t see this part of it as a problem: I see a method that checks its arguments (as any method would) and updates the model’s internal state; the fact that this is also useful from the `initialize` method is a nice bonus.

From another point of view, it makes sense to me that `Need.new(a)` and `Need.new({}).update(a)` should be equivalent.