This is a fairly simple, soft-ish question.
I understand the definition of products and coproducts in category theory, and if I can guess or look up what the product is in a given category, I can usually see how to show that it is indeed the product.
However, is there a more systematic way? That is, given a category (especially a concrete one where the morphisms are structure-preserving functions), is there a way to determine its product (if it has one) that doesn't involve guessing and cleverness?
I'm asking not for an algorithm that would work in every case, because I assume that doesn't exist. Rather, I'm asking for useful heuristics - how does one go about this in practice? I'm interested in other limits as well of course, besides the product and coproduct, it just seems useful to start somewhere simple.
As a simple example: suppose I consider the category of preorders, where the morphisms are order-preserving functions. If I wasn't able to correctly guess what the product was in this category, how would I go about determining it?
(Note: there's a related question here, but the accepted answer just says "For each of these families of categories [concrete categories, categories of algebras of a monad etc.] there is often a common way to construct (co)limits of a certain shape." I'm asking specifically what this common method is in the case of a concrete category.)


If your category $C$ is related to some other category $X$ (e.g. to $\mathbf{Set}$) via some "forgetful functor" (for this heuristics, it's not necessary to have a precise definition, although "faithful" is often what is suggested) $U:C\to X$, and if you know $X$ very well (e.g. $\mathbf{Set}$), then you can try to go from (co)limits in $X$ to (co)limits in $C$.
For instance, $U$ will often preserve limits (that is the case in monadic situations for instance), and in that situation what you can do, if "$C$-objects are structure $X$-objects", is take the limit in $X$ and then try to find the appropriate structure ("of type $C$") on that limit. In algebraic cases, it will often be uniquely determined by the diagram.
This is even more so the case for the product, where a structure on the product is just the "coordinate-wise" structure (whatever that means)
The above strategy is guaranteed to win if $U$ creates limits, which, again, is the case in monadic situations.
So, let's take preorders as an example. Then we have the forgetful functor $\mathbf{Preord\to Set}$ which just sends a poset to its underlying set.
We can prove it has a left adjoint : this just sends a set to the discrete ordering on it. Therefore $U$ preserves limits, so if $P,Q$ are preordered sets, I know $P\times Q$ will have $UP\times UQ$ as underlying set. Now I have to think a bit : $P\times Q\to P$ is nondecreasing, so for all $p,q,p',q'$, $(p,q)\leq_{P\times Q} (p',q') \implies p\leq_P p'$
Same for $P\times Q\to Q$. So this proves that our preordering is contained in the following preorder : "$(p,q)\leq (p',q') \iff p\leq p'\land p'\leq q'$". Since this one is maximal, it serves as a good candidate for a universal property : you check that it works.
For colimits, the situation should be dual, but it turns out that very often we're interested in a functor to $\mathbf{Set}$ and so we can't dualize everything in practice. In practice, colimits will often look much uglier in concrete categories, and it can be quite challenging to determine a simple one (e.g. the coproduct in $\mathbf{Grp}$ is already very interesting)
One possible reason is that concrete categories (say, of algebras) often have free objects but not cofree objects, and a free object contains a lot of information about the category. Since a free object on $X$ is just the coproduct $X$ times of the free object on $1$, it stands to reason that determining coproducts is already challenging.
There are general results about how certain type of colimits behave (especially in monadic or operadic situations), but nothing too general.