sofern möglich würde ich schauen, obs ereignisbasiert funktionieren kann. Z.B. wenn das andere Programm "ready" ist, dass es in den Standardausgabe-Strom etwas schreibt und auf dieses Schreiben wartet dein Programm.
Somit bist du auf der sicheren Seite, denn wenn das andere Programm länger als die hart-codierten 10 Sekunden braucht scheiter Thread.Sleep.
Du könntest alternativ auch so lange eine Warteschleife auführen, bis das gewünschte Programmfenster offen ist, z.B. indem Du die Fenstertitel überprüfst. Natürlich nur, falls keine andere Möglichkeit der Kommunikation besteht.
Nur weil DEIN Rechner 10 Sekunden braucht, um das andere Programm zu starten, heisst es nicht, das andere Rechner nicht 15 Sekunden benötigen. Und unnötig lange (z.B. 30 Sekunden) zu warten, ist auch suboptimal, finde ich.
Mehr Informationen, wie Du die andere Software ansteuerst, wären da hilfreich. "Ansteuern" klingt für mich erst einmal nach einer Schnittstelle.