Fantastic read.
In terms of connection pool sizing, I highly recommend the work of Toon Koppelaars. (reference: neooug.org/gloc/Presentations/2019/Koopelears_Con…)
which recommends pool sizing as:
min = max = initial.
The TL;DR rationale from the presentation for that recommendation is:
unused pool sessions are idle, they do nothing and consume minimal resources because the last thing pool-based apps do is free their resources when they give back a connection. If they dont, then you've got an app bug not a connection pool config issue.
the max size setting (by definition) is what you are prepared to let your server handle without undue stress, so why would you pick a min/initial less than that, because to do so means yours apps incurring the cost of creating a connection pseudo-randomly. That makes response times variable.