Functions reading like a recipe

I find massive functions can be hard to understand and maintain. Although comments can help explain what is happening, this is not the best way.

Often I find when someone puts in comments explaining what each part does, I wonder why they did not just make a function. Coupled with what I talked about above with naming, you can make your large functions read like a nice recipe from a cookbook. For example:

public void SetupEnemyData()
{
   //load the enemy data from the json
   string path = GetEnemyJsonFolder();
   var enemiesJsonData = JsonLoader<List<EnemyData>>(path);
   
   //Create all the ships
   int shipCount = GetShipCountFromSettings();
   for (int i = 0; i < shipCount; ++i)
   ...

   //Apply data
   ...

Is prety unwieldy where as:

public void SetupEnemyData()
{
   LoadEnemyJson();
   CreateEnemyShips();
   InitialiseEnemyShipsFromData();
...

Its much easier to read and maintain.