シニア開発者はなぜ専門知識をうまく伝えられないのか?

AIエージェントによるソフトウェア開発が広がる中で、「AIがコードを書けるなら開発者は不要になるのではないか」という見方も出ています。一方で、シニア開発者は単にコードを書く人ではなく、不要な開発を避け、複雑さを抑え、動き続けるシステムを守る役割を担っているという指摘もあります。コピーライターのトゥヒン・ナイール氏は、シニア開発者が専門知識をうまく伝えられない理由を、「複雑さ」と「不確実性」という2つの問題のズレから説明しています。
Why senior developers fail to communicate their expertise | nair.sh
https://www.nair.sh/guides-and-opinions/communicating-your-expertise/why-senior-developers-fail-to-communicate-their-expertise

ナイール氏によると、チームで出会うシニア開発者には2つのタイプがあるとのこと。1つは「新しいツールを見つけた」「あの会社ではこうしている」「Hacker Newsではこれがベストプラクティスだと言われている」といった話をするタイプで、もう1つは「それは本当に必要なのか」「やらなかったら何が起きるのか」「今あるもので間に合わせられないか」と問うタイプです。ナイール氏が評価しているのは後者で、こうしたシニア開発者はコードを増やす前に、実装を避ける・規模を減らす・既存のものを再利用する方法を探します。
ナイール氏は、シニア開発者が警戒しているものを「複雑さという怪物」にたとえています。特別な条件分岐や新しいデータベースのテーブル、新しいコンポーネントを追加するとシステムが複雑になるため、シニア開発者はコードを増やす前に「本当に必要なのか」を確認しようとするそうです。
一方で、ビジネス側の人々が恐れているものは複雑さではなく「不確実性」だとナイール氏は指摘し、ビジネスを2つのループに分けて説明しています。1つ目は、会社が市場に提案やプロダクトを出し、市場からフィードバックを受け取るループです。このループでは、マーケターや営業、プロダクトマネージャー、CEOなどが、「何に価値があるのか分からない」という不確実性を減らそうとします。そのため、できるだけ早く市場に出し、反応を得ることが重要になります。

2つ目は、会社が既存ユーザーにサービスを提供し、支払いを受けるループです。ここではサービスを動かし続けることや、問題が起きた時に理解・修正・デバッグしやすいことが重要になります。ナイール氏によると、複雑さが増えるほどこれらが難しくなるため、シニア開発者は複雑さを避けようとするとのこと。

顧客を持つ会社では、この2つのループが同時に動くとナイール氏は言います。市場に向き合う人々は「早く出してフィードバックを得たい」と考え、シニア開発者は「複雑さを抑えて安定したサービスを提供したい」と考えます。ナイール氏は、このように優先している問題が違うことが、シニア開発者の専門知識が伝わりにくい理由だと説明しています。

ナイール氏によると、シニア開発者は「複雑さを増やしたくない」と伝えるだけではなく、「もっと早く不確実性を減らす方法」として自分の専門知識を示す必要があります。ここで役立つのが、不要なものを作らない力と既存のものを再利用する力です。
例えば、調査データを集めたいなら新しい調査機能を作る前にGoogle Formsを使う、新機能への需要を確かめたいなら既存UIへボタンだけ置いてクリックされるかを見る、新しい分析サービスを作る前に「一つの判断、一つのグラフ、一つの指標」から始める、といった方法があります。いずれも完成したシステムを作る前に、必要な反応だけを早く得るための工夫です。
ナイール氏はこの考え方を、「誕生日ケーキを丸ごと焼こうとしているなら、サンドイッチにろうそくを立てればいい」と表現しています。つまり、相手が本当に必要としているのが「誕生日を祝えること」なら、最初からケーキを丸ごと作る必要はないというわけです。
この考え方を伝えるフレーズとして挙げられているのが、「Can we try something quicker?(もっと早く試せる別の方法はありますか?)」という言い方です。ナイール氏によると、「quicker」は相手が求めている速さを認め、「something」は別の方法があることを示し、「try」は不完全でも試せる余地を残すための言葉とのこと。
AIによって試作品やコードを作る速度は大きく高まるとナイール氏は見ています。しかし、AIにはシニア開発者が担う「責任を取ること」はできません。AIが書いたコードによってシステムが理解しにくくなったり、修正しにくくなったり、デバッグしにくくなったり、教えにくくなったり、安定性が落ちたりしても、顧客に対して責任を負うのはAIではないためです。
そこでナイール氏は、速く試すためのシステムと安定して運用するためのシステムを分けるという案を示しています。速く試すためのシステムは、AIエージェントや未レビューの生成コード、ジュニア開発者、マーケティング担当者などが使う「スピード版」で、市場からフィードバックを得られる程度のものを素早く作ることを目的にします。もう一方の安定して運用するためのシステムは、シニア開発者が安定性や理解しやすさ、拡張しやすさを重視して整える「スケール版」で、スピード版でうまくいったものを見極め、顧客向けに信頼できる形へ組み込む役割を担います。

この方法にすることで、何か野心的なものを作ってほしいと頼まれた時に「スピード版は3日で用意できます。その後、スケール版を約6週間で用意します」と伝えられるとナイール氏は述べています。相手は速度を得られ、シニア開発者は観察と設計の時間を得られるというわけです。
ナイール氏はこれを、小説家が急いで初稿を書き、その後で編集者が整える作業にたとえています。そして最後に、シニア開発者は「senior software developer」ではなく「senior software editor(シニアソフトウェア編集者)」と呼ぶべきかもしれないとまとめています。
・関連記事
ソフトウェア開発でAI丸投げがダメな理由 - GIGAZINE
AIを使ったソフトウェア開発の「正解」はまだない - GIGAZINE
AIエージェントが本番環境のデータベースとバックアップを全破壊してしまったことを自白 - GIGAZINE
AIの普及でOSSプロジェクトへの低品質なコード提出が増加、Ghostty開発者による「貢献者の信頼度を管理するシステム」も登場 - GIGAZINE
・関連コンテンツ
in AI, ソフトウェア, Posted by log1b_ok
You can read the machine translated English article Why are senior developers unable to effe….







