First I thought that as `areAllComplete` is just a derived state (the ground truth is in `allTodos` which is carried along in any case) it would be more functional to get rid of that variable, but I see your point that in a way it goes against separation of concerns even if the computation is quite simple, if the computation is then done in multiple places. I was not thinking so much about perf optimization but just simplifying the state that needs to be managed and relayed to components.