Moving instantiated prefab from randomly chosen startPoint to randomly chosen endPoint

I have been working on this for the last 4 days and after multiple attempts trying Lerp and MoveTowards I am still unable to make the instantiated prefab move from one point to the other. My issue is more complex than simply moving an object from one point to the other because the points are randomly chosen and my game object is an instantiated prefab. I am getting close, but I am having trouble figuring out what is causing this issue. Here’s the issue in action - - YouTube.

Here’s my code:

DebrisSpawner:

using UnityEngine;
using System.Collections;

public class DebrisSpawner : MonoBehaviour {

	public static DebrisSpawner instance;
	GameObject newDebris;
	public GameObject[] debris;
	public Transform[] debrisSpawnPoints;
	public Transform startPoint;
	public Transform endPoint;
	private float speed; 
	private bool spawned;
	private int level;

	private float spawnTime;

	void Start () {
	
		level = 0;
		instance = this;
	}
	
	void Update () {

		if (spawned == true && level == 0) {

			level++;

			float randomSize = Random.Range (0.1f, 0.4f);
			int objectIndex = Random.Range (0, debris.Length);

			//Debug.Log (startPoint);

			newDebris = Instantiate (debris [objectIndex], startPoint.position, startPoint.rotation )as GameObject;

			newDebris.transform.localScale = Vector3.one * randomSize;

			Debug.Log (newDebris.transform.position);

			//newDebris.transform.position = Vector3.MoveTowards (startPoint.transform.position, endPoint.transform.position, step);

		}

		if (spawned == false && level == 0) {

			StartCoroutine (AltDebrisSpawner ());
			int spawnPointStart = Random.Range (0, debrisSpawnPoints.Length);
			int spawnPointEnd = Random.Range (0, debrisSpawnPoints.Length);

			startPoint = debrisSpawnPoints [spawnPointStart];
			endPoint = debrisSpawnPoints [spawnPointEnd];

		}
	
	}

	public IEnumerator AltDebrisSpawner(){

		spawned = true;

		yield return new WaitForSeconds (4);
		level--;
		Destroy (newDebris);
		spawned = false;


	}

}

DebrisMoving:

using UnityEngine;
using System.Collections;

public class DebrisMoving : MonoBehaviour {

	private float speed;

	void Start () {

		speed = 0.8f;

	}
	
	void Update () {

		transform.position = Vector3.MoveTowards (DebrisSpawner.instance.startPoint.transform.position, DebrisSpawner.instance.endPoint.transform.position, 2); 
		Debug.Log (transform.position);
		
	}
		
}

Is DebrisMoving attached to your prefab? If not

DebrisSpawner.cs

newDebris = Instantiate (debris [objectIndex], startPoint.position, startPoint.rotation )as GameObject;
newDebris.AddComponent<DebrisMoving>();

DebrisMoving.cs

 using UnityEngine;
 using System.Collections;
 
 public class DebrisMoving : MonoBehaviour {
     [SerializeField]
     float speed = 0.8f;
      
     void Update () {
        float step = speed * Time.deltaTime;
        //I don't see how your setting your endPoint position, to me you're never passing it a value. 
        transform.position =    Vector3.MoveTowards(this.gameobject.transform.position, DebrisSpawner.instance.endPoint.transform.position, step);
     }
 }

Also, I do like to stay away from any physics but possibly a rigidbody.addforce sounds perfect for you: