ITベンダー管理はポンコツAIのデバッグと同じだった件
IT ベンダーというのは不思議な存在だ。私は発注側のユーザー企業にいて彼らの仕事を見ているものの、彼らの生態はなかなか理解しがたい。ここでいうベンダーとは SES 的なタイムチャージで稼働する人たちのことを言っています。私は開発をベンダーに委託している会社に所属しつつ、一応プログラマでもあり、内製の開発もできる。事業会社所属のプログラマの立場で見るとベンダーは「こいつら何なんだ?」と不思議に思うことが多い。
受発注という強固な立場の差が会社間にあって、立場の強いユーザー企業に所属している身分であるために思うことなのは否定できない。なので、彼らの立場も想像して考えるとともに、こういう考えは良くないという自省のために書きます。また私の主観的な観測範囲の中でのことだし、一般化して話していても、すべてに当てはまる話ではないことは断っておきます。
これから挙げるのは、彼らの立場では理屈は通るが、私と彼らとでは心情的に折り合えないことです。
Copy & Paste 開発
ベンダーを見ていてもっとも不思議に思うのは自分たちの仕事を改善しようとしないところだ。ここで仕事とは成果物だったりやり方のことです。あの人たちは成果物の品質を上げていこうという動きもしないし、仕事のやり方を改めて良い成果物が出るように工夫することもない。クラフトマンシップと呼ぶような職業人としての矜持はないのかと、イラつきを覚えることもありました。仕事など同じことの繰り返しであり、やるたびに腕を上げて前回より良い仕事をしようと一般に考えるべきではないでしょうか。
仕事の成果物の話だと、あの人たちは頑なに現行のものをまねて開発をしたがります。特に変える意味のない仕様を変えないのは分かるんですが、明らかに既存の実装に問題があっても、既存の通りにやってきます。既存のを参考にしてもいいのだが、インターネットにいくらでもリファレンスがある中で、なぜあえてその現場にある悪いものを踏襲するのか。会社としてやってきているのだから、蓄積され参照できるナレッジはおたくの会社にないんかと思うんですが、そんなものは全くない。
例えば――
例1)品質の低い独自フレームワークがその現場で使われていたら、絶対にそれで新規のも彼らは作りますね。それでいて変なものを使わされていると文句を言っていたり、品質の低さにハマって困っていたりするので、びっくりします。誰もそうしろなどと頼んでいなくて、自らそうやっているのに。
例2)Java 8 と 11 が使える環境でなぜか Java 8 を選んだり。最近に Java 7 で動くプログラムを作っていたのをみたこともあります。他のがサポート切れで放置されていたとしても、新規が新しいのを使ったほうがいいのは自明だと思うのですが、いいもの作ろうという動きがないのが不思議で仕方がない。
例3)発注側の会社名が変わったのに、ソースコードのヘッダの Copyright の表示に古い会社名を書いてくる。客の名前を間違えるとか仕事としてありえないだろう?
もちろん、ちゃんと指示していない発注側が悪いんですよ。ただ放っといたら悪い方を選びたがる意味がわからない。
仕事のやり方の話でも同様ですね。なお、私が見ているのは発注側が用意した環境で開発している人たちです。JIRA や CI、SonarQube などの環境を用意して渡したら、それ有効に使い始めるかというと、まずやってくれませんね。
例えば CI 環境や SonarQube を渡したとして、自発的にプロセスに組み込んで使ってはくれない。強制するためにオールグリーンのビルド結果を成果物として定義したら、リリースの直前の成果物の確認のときに、慌ててレポートを作って検出されたバグを直したりします。また SonarQube で出ている既存の警告を自ら直してくれることはない。
CI ってそういうものだっけ?あれって品質の状態のモニタリングによる継続的な品質向上を目的にしたもので、ダッシュボードを見て判断して随時にアクションを起こさないと効果は期待できない。世間のベストプラクティスを実践したいと思わないのだろうか。
もちろん、これもちゃんと指示していない発注側が悪いんですよ。
あいつらは ChatGPT みたいなもんだ
あの人たちは言われないとやらない。技術選定はやってあげなきゃならないし、ログの出し方も指定してあげなければならないし、git リポジトリに push して CI 通せと言わなきゃならないし、SonarQube はどの警告を直せと具体的に指示しなければいけない。そこまで言ってあげなきゃならないのかってものも、違うことをしているのを見つけたらフィードバックを与えねばならない。ただ指示すれば彼らは「承知しました」と言ってやってくれる。立場的に断れない。性能の悪い ChatGPT ぐらいに見なさなければだめだ。
ベンダーは機能的に、与えられた環境で言われたことをやるのが契約なので、言われたことだけやりますってスタンスは当然なんです。仕事の内容にも文句も言わずに実行するのが期待役割だ。逆に客が間違ったこと言っていても従わないといけない。適性がいる立場だとは思いますし、適応してしまうと当事者意識が薄れて、工夫して仕事を良くしていこうって発想がなくなるのも分かります。
SES の批判みたいになってしまうけど、別に事業会社でも同じような感じのところはある。環境は与えられ、やり方は指定され、判断はしてもらうものだと思っている当事者意識のない動きをする人はレベルの低い会社だと多い。辞めた会社の話です。社員が自発性を発揮できないような状態にするのは経営が悪いんだと思います。そういう会社は滅びたらいいと思います。
一方で、業務委託が快適に仕事ができるように、色々と用意してあげる発注側はかなり良心的でまともだと思っています。例えば新しいバージョンの Java で開発できる環境だったり、CI 環境だったりです。発注側が劣悪な環境に耐えて順応しているところに業務委託で入ったらひどいと思いますよ。たとえばこれとか。そういうの知ってるから、お前らのために色々整えてあげてるのになんで乗っかって来ないんだというのが、不思議だったんですが諦めました。
生成 AI をどうマネージするか
今のテーマは自発性を発揮できない立場の人たちに快適で効率のよいやり方を取り入れさせつつ、彼らの仕事をマネージするかです。自分の仕事を快適にするのはできたし、自発性が発揮できるのチームでの仕事を快適にするのもできたので、次は仕事を快適に効率よくしたいと思ってない人たちにどうやって品質の高い仕事をさせるかです。
言わないとやらないだけでなく、ベンダーは人の数も多い。直接雇用で人を集められないから、ベンダーに人を集めてもらっている。どこから来てるのか分からないスキルの怪しい人もいる。そこまで言わなきゃならないのってことまで言わないといけない一方で、数が多いから末端の作業員の仕事までつぶさに見るのも管理能力の限界を超えてしまう。マネージしきれないものをどうやってマネージしきるかが、今の興味だ。
生成AIで中身が追いきれないものが大量に生産される世界がもうすぐ訪れる。しかし、これは所属不明で顔も知らない大量の作業者がプロジェクトに入ってきている世界と同じではないでしょうか。性能の低い生成AIが並列で動いている世界です。人間をマネージできたら、AI の方が簡単でしょう。なぜなら AI の方が人間より賢いのだから。きたる近未来に向けて人間で練習中です。