Keith's string diagram [#18](https://forum.azimuthproject.org/discussion/comment/19760/#Comment_19760) is epiphanic! And huge thanks to @John ([#15](https://forum.azimuthproject.org/discussion/comment/19757/#Comment_19757) [#16](https://forum.azimuthproject.org/discussion/comment/19758/#Comment_19758)) and @Chritopher ([#10](https://forum.azimuthproject.org/discussion/comment/19744/#Comment_19744)) for the methodological clarifications! :-bd Now that I (think I) have a better understanding, I'll write down some tips in case other beginners might find them useful.

First, \\(\mathrm{hom}(c,c')\\) and \\(\mathrm{hom}(d,d')\\) are objects in \\(\mathbf{Set}\\) which should be diagrammatically dots, so the squares in this lecture are _not_ diagrams in \\(\mathbf{Set}\\). They are not diagrams in \\(\mathcal{C} \times \mathcal{C}\\) or \\(\mathcal{C}^{op} \times \mathcal{C}\\) either, for objects in those categories should be pairs. In fact, those squares we have been using are more likely still residing in \\(\mathcal{C}\\) (realizing this swept away a lot of my puzzles!). That is, we are talking about \\(\mathcal{C}^{op} \times \mathcal{C} \to \mathbf{Set}\\) directly via diagrams in \\(\mathcal{C}\\) rather than by illustrating new diagrams in \\(\mathcal{C}^{op} \times \mathcal{C}\\) or \\(\mathbf{Set}\\). As such, I find it easier to conceive the hom-functor dynamically as a particular *perspective* (i.e. the \\(\mathbf{Set}\\)-perspective) to \\(\mathcal{C}\\) which helps us establish a certain configuration (like the one in Keith's string diagram).

Second, since now we are in \\(\mathcal{C}\\) (which is any category), if we forget about the hom-functor temporarily and only think about \\(\mathcal{C}\\), there may well exist various independently defined arrows \\(d \to d'\\), for \\(d\\) and \\(d'\\) are merely two random objects after all. But once we put on the hom-functor spectacles, we are taken into a different (and more restricted) scenery, where the possibly independently existing \\(d \to d'\\) arrows are no longer important (or even visible), because the hom-functor – which must map/preserve morphisms – needs to establish an _100% secure input-output relation_ in the \\(\mathbf{Set}\\)-perspective between \\(\mathrm{hom}(c,c')\\) and \\(\mathrm{hom}(d,d')\\), hence @John's words in the lecture:

>This function should take any morphism \\(h \in \mathrm{hom}(c,c')\\) and give a morphism in \\(\mathrm{hom}(d,d')\\).

Thus, the question is *not* whether there might be \\(d \to d'\\) arrows in \\(\mathcal{C}\\) or not (which is a valid question for its own sake but simply uninteresting in our hom-functor discourse), but more restrictively given any \\(c \to c'\\) arrow as input (together with the relevant morphisms \\(f, g\\)), whether or not we can _confidently guarantee_ at least _one_ such arrow as output. If we _can_ have such a guarantee, then it means our hom-functor at hand successfully preserves morphisms and qualifies as a true functor. The obvious way to achieve this is (like everyone above has pointed out) via the composition \\(d \to c\to c' \to d'\\) (i.e. \\(g∘h∘f\\)), which in turn requires the additional \\(op\\)-trick on the first component of the \\(\mathcal{C}\\)-morphism pair \\(\langle f, g\rangle\\) (I find the angle bracket notation easier as otherwise I might mistake \\(f, g\\) for weirdly named \\(\mathcal{C}\\)-objects).

What Keith's string diagram helped me realize (by completely omitting the bottom-side of the square) is precisely the point that we do not care whether or not there exist independent \\(d \to d'\\) arrows but merely want to _determine a dependent one_ via manipulating \\(f\\), \\(h\\), and \\(g\\).