Trying to make my code pause using coroutines, what am i doing wrong?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(Rigidbody2D))]

public class Movement : MonoBehaviour
{
    //storage for the object's rigidbody
    public Rigidbody2D rb2D;
    //the public modifier for speed so i can edit from outside
    public float speed;
    //reliably take movements each second in an even, reliable manner. 
    void FixedUpdate()
    {
        //i move left and right if  i use "a" or "d or "left" or "right" 
        float moveX = Input.GetAxis("Horizontal");
        //I move up and down if i use "w" or "s" or "up" or "down"
        float moveY = Input.GetAxis("Vertical");
        //Vector inputs the move directions into a vector2 so i can move
        Vector2 move = new Vector2(moveX, moveY);
        rb2D.velocity = move * speed;
    }
    //following two methods are for the respective spikey builds
    public void slow()
    {
        print("Shit, spike's got me!");
        speed = .3f;
        StartCoroutine(PauseTheSlowdown(2.1f));
        speed = 1;
    }
    public void Bigslow()
    {
        print("HOLY CRAP THAT HURT");
        speed = 0f;
        StartCoroutine(PauseTheSlowdown(3.7f));
        speed = 1;
    }

    IEnumerator PauseTheSlowdown(float seconds)
    {
        print("Pause this crap");
        yield return new WaitForSecondsRealtime(seconds);
    }

}

What am I doing wrong? It all looks like it should run, i’m not getting errors, the code’s going but the coroutine isn’t pausing the the code AT ALL so it instantly jumps from speed impaired to speed normal.
Am I simply misunderstanding coroutines?
slow and Bigslow are being referenced from outside of this script by “traps”

Figured it out, coroutine will only create a pause on what’s inside of it. So i needed to make this:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

   [RequireComponent(typeof(Rigidbody2D))]
  
 public class Movement : MonoBehaviour
{
    //storage for the object's rigidbody
 public Rigidbody2D rb2D;
 //the public modifier for speed so i can edit from outside
 public float speed;
 //reliably take movements each second in an even, reliable manner. 
 void FixedUpdate()
 {
     //i move left and right if  i use "a" or "d or "left" or "right" 
     float moveX = Input.GetAxis("Horizontal");
     //I move up and down if i use "w" or "s" or "up" or "down"
     float moveY = Input.GetAxis("Vertical");
     //Vector inputs the move directions into a vector2 so i can move
     Vector2 move = new Vector2(moveX, moveY);
     rb2D.velocity = move * speed;
 }
 //following two methods are for the respective spikey builds
 public void slow()
 {
     print("Shit, spike's got me!");
     StartCoroutine(PauseTheSlowdown(2.1f));
 }
 public void Bigslow()
 {
     print("HOLY CRAP THAT HURT");
     StartCoroutine(PauseTheBigSlowdown(3.7f));
 }

 IEnumerator PauseTheSlowdown(float seconds)
 {
     print("Pause this crap");
     speed = .3f;
     yield return new WaitForSecondsRealtime(seconds);
   speed = 1f;

 }
  IEnumerator PauseTheBigSlowdown(float seconds)
 {
     print("Pause this crap");
     speed = 0f;
     yield return new WaitForSecondsRealtime(seconds);
   speed = 1f;
 }
}

}

The delay effect you want will only occur inside of the IEnumerator. Just move speed = 1 to just below the return in your coroutine. It would look like this:

IENumerator PauseTheSlowdown(float seconds) {
    yield return new WaitForSecondsRealtime(seconds);
    speed = 1;
}