I've done an object pooling tutorial in the past, but that one was focused on teaching how to create an object pool using Unity's Pool namespace.
This tutorial is a more practical tutorial, as I needed something similar for my commercial game, Samurado.
I use this object pooling manager to handle spawning enemies, projectiles, particles, visual effects, and literally EVERYTHING that CAN be pooled in our game.
I'll also show you how to keep your hierarchy from getting cluttered with 100s or 1000s of gameObjects due to your pool.