優秀なManagerとそうでないManager

後輩と話していたのですが、優秀なManagerって
その人自身、優秀である必要は無いと思うわけですよ。
技術的に優秀でなくても、下の人にまかせられればそれでよい。と。
そのかわり、仕様の変更とか、決定事項の変更とかで下の人の作業に影響が無いように配慮する。
これが大事だと思うわけです。
これをコードで書くとですね。

public class 優秀なManager優秀な顧客{
     public 成果物 仕事する(顧客の要件,スケジュール,必要なもの,...){
         ................
         下僕 geboku = new 下僕();
         成果物 hoge = geboku.仕事する(要件,スケジュール,必要なもの,.....);
         return hoge;
     }
}

となります。メソッドの中身はどうでも良いんです。
渡してくれる引数の型が決まっていれば。

public class 優秀でないManager優秀なManager{
     public Object成果物 仕事する(Object1,Object2,Object3){
         ..............
         //ここで下に渡してやるときにキャストしてやるのが優秀だと。
         Object hoge = geboku.仕事する((要件)Object1,(スケジュール)Object2,....);
         return (成果物)hoge;
     }
}

これらのメソッドの中で呼ばれるわれわれ下僕クラスにとって
どちらがほうがよいかおわかりでしょうか。
やること決まってる方がやりやすいよねぇ。
なんだかわからんObjectをわたされても、実行時にキャストエラー起きるかも知らんし。型が決まっていれば、こちらもやりやすい、と。
で、優秀でないManagerは何返すべきかもわかってないんですよね。
そうすっと、こっちも何返せば良いかわかんないし。
あーもう。わかるかなー。わかんねーかなー。
要するに、Managerは上から来る仕様、状況の変化から、下を守れ。と。
※追記
上はよくわからなくなったから気にするな。で、下が優秀なManager。
優秀でないのはたぶん、

public class 優秀でないManager{
     public Object 仕事する(Object1,Object2,Object3){
         ..............
         //ここで下に渡してやるときにキャストしない。投げっぱなし。
         Object hoge = geboku.仕事する(Object1,Object2,....);
         return hoge;
     }
}

って、下に渡す仕事の型が一定してないんだ。きっと。