GitHub:機能追加の意思決定コスト増
GitHub Blog は、コード作成コストが低下した現代において、AI エージェントによる「パッチ生成」を範囲議論の代替手段として活用し、不確実な推論から証拠に基づく意思決定へシフトするべきだと提言している。
キーポイント
コスト構造の変化と誤った直感
従来のエンジニアリングではコード作成が最難関だったが、現在は「やるべきか議論すること」自体が最も高価なプロセスとなっている。この変化により、小さな変更に対する過度な防御本能(スコープクリープへの懸念)が非効率を生んでいる。
AI エージェントによる「価格チェック」の活用
議論に時間を費やす代わりに、AI エージェントに最初のパッチを生成させることで、30 分以内に実証可能な結果を得るべきである。これは製品としての完成品ではなく、変更の影響範囲を検査するプローブ(探針)として機能する。
証拠に基づく意思決定への転換
抽象的な「スコープ外」という感覚的な議論から、実際の差分(diff)、テストの容易さ、既存の抽象化の維持状況など、具体的な証拠に基づいた判断へシフトする必要がある。
生成コストと所有コストの区別
AI がコードを安く生成できても、人間がレビューして責任を持って所有できる場合のみ「安い変更」と見なされます。
証拠に基づくスコープ判断
直感や雰囲気ではなく、具体的な差分(diff)とテスト結果という証拠に基づいてスコープ外かどうかを判断するようシフトしています。
不確実性の迅速な評価
AI 時代における最良のエンジニアは、すべての要求に Yes/No と即答するのではなく、変更の不確実性を素早く見積もるスキルを持ちます。
重要な引用
The most expensive part of a small feature request used to be writing the code. Now it's usually the meeting about whether or not to write the code.
An agent can produce that first patch in the time the thread takes to warm up.
It turns an abstract scope argument into a concrete artifact you can interrogate.
Cheap to write is not the same as cheap to own.
The best engineers in an AI-assisted world... will be the ones who can price uncertainty fast.
影響分析・編集コメントを表示
影響分析
この提言は、AI エージェントの導入が単なるコード生成の効率化を超え、組織的な意思決定プロセスそのものを変革する可能性を示唆している。エンジニアリングチームが「推測」に依存した会議から、「実証」に基づく迅速な判断へ移行することで、開発スピードと品質の両立が可能になる。特に、AI ツールを「試作・検証フェーズ」のインフラとして位置づけることで、技術的負債やスコープクリープを防ぐ新たなプラクティスが確立されつつある。
編集コメント
この記事は、AI ツールを単なる生産性向上の道具としてではなく、組織の意思決定プロセスを最適化するための「検証エンジン」として再定義する視点を提供しています。議論に費やす時間を削減し、実証データに基づいて判断することで、エンジニアリングチームの敏捷性が大幅に向上する可能性を示唆しています。
以前、小さな機能リクエストにおいて最もコストのかかる部分はコードを書くことでした。しかし今では、そのコードを書くべきかどうかを議論する会議こそが最大の負担となっています。
これは明確な転換点であり、多くのエンジニアの直感を静かに揺るがしています。エンジニアは早い段階から、「小さな依頼」の多くは実際には小さくないことを学びます。テストの実装やリリース計画の策定、エッジケースの検討、そしてリリース後の責任者の確保などが必要です。システムの一部に干渉する変更であれば、2 時間の作業が 2 週間の気晴らしに発展することさえあります。そのため私たちは反発します。「本当に必要なのか」「このリリースに含まれるべきか」「すでに合意した契約を変更するのか」と問いかけます。しかし、この直感を捨てるつもりはありません。
ただし、その直感は「コードの初版を書くことが最もコストがかかる工程である」という前提に依存しています。しかし、この前提が静かに崩れ始めています。ある特定の変化のクラスにおいては、もはやそれが最優先事項ではなくなっています。これらの変化を他のものと区別できるのであれば、「スコープ内か?」という議論を、2 日間の論争ではなく 30 分で答えられる質問に置き換えることができます。
議論のコストはパッチそのものより高いことが多い
私が繰り返し目にするパターンがあります。ある人が、バックエンドにすでに存在する last_active_at タイムスタンプを設定ページに表示するという小さな変更を求めたとします。チームはそのスレッドで 40 分も費やします。一人が「これはリスクがある」と言い、別の人は 2 年前の関連するマイグレーションを思い出します。さらに誰かがデッドラインについて言及します。最終的に結論は「おそらく 1〜2 日かかるが、それ以上になる可能性もある」となり、確信度は低くなります。その主な理由は、誰も実際に試していないからです。
試行錯誤にコストがかかる時代なら、このプロセスは理にかなっていました。作業を中断して文脈を頭に入れ、手動で変更を加え、テストを書き、二次的・三次的な影響を発見する必要があるからです。
しかし、最初の試行が安価になった今、境界を守ろうとするコストの方が、それを破るコストよりも高くなってしまう可能性があります。
エージェントは、スレッドがウォームアップするのと同じ時間で最初の修正パッチを作成できます。もちろん無料ではなく、自動的に正しいとも限りません。それでも十分安価なので、賢明な判断としては、推測を止めて実際の差分(diff)を確認することです。
最初のパッチは製品そのものではなく、価格確認のためのものです。
よくある間違いは、生成されたパッチを最終成果物として扱ってしまうことです。それはそうではありません。これは探査(プローブ)なのです。抽象的な範囲に関する議論を、検証可能な具体的な成果物へと変換します。
- 想定したファイルにのみ触れているか、それとも五つのパッケージにまたがって広がっているか?
- テストは明白か、それとも変更自体がテストしにくいものか?
- 既存の抽象化を維持できているか?
- 新たな製品判断を静かに必要としているか?
- 半年後にこの振る舞いを自分が責任持って引き受けても大丈夫か?
「これがスコープクリープ(範囲の無秩序な拡大)のように感じるか?」という問いよりも、こうした質問の方がはるかに重要です。なぜなら、今やあなたは感覚ではなく証拠に基づいて議論できるからです。もし last_active_at フィールドの変更が 4 行の差分でテストもパスするなら、そのままリリースすればよいのです。 debates(議論)こそが高額なコストだったのです。しかし、同じリクエストが認証ミドルウェアに触れる結果となったなら、その要求は決して小さくはないと学べます。しかも、それを二日かけて学ぶのではなく、たった 30 分で知ることができます。
これは AI に判断を任せることではありません。AI を活用して、人間の判断コストを下げ、より根拠のある判断を下すようにするのです。
「書くのが安い」ことは、「所有(維持管理)するのが安い」とは同じ意味ではありません
ここが罠であり、AI 時代における最も重要な区別です。コード生成に安く済んだからといって、変更自体が安いわけではありません。人間が自信を持ってレビューし、結果を責任持って引き受けられる場合のみ、それは「安い」変更となります。
技術的にはテストにパスする 1000 行の差分でも、誰もそれを責任持って管理したくないなら、それは安価な変更ではありません。むしろ、コストの先送りです。その場合の分岐点は、「エージェントがこれを書けるか?」ではなく、「人間がこれを検証できるか?」という点にあります。
バックエンドに既に存在する表示フィールドを追加するのは、通常は安価です。
認証ロジックの変更は、差分がどれだけ綺麗であっても、安価ではありません。
テスト済みのヘルパー関数のリファクタリングは、通常は安価です。
データ保持のセマンティクス(意味)を変更することは、安価ではありません。
コードが些細なものでも、明確に「ノー」と言うべき変更は依然として存在します。具体的には、製品の契約条件を変更するもの、サポート負担を増大させるもの、あるいはプライバシー、請求処理、コンプライアンスに関わるものです。AI は候補案を作成するコストを下げますが、その候補案を引き受ける(所有する)コストを下げるわけではありません。
スコープ管理の基準を証拠に基づいたものへシフトする
従来、スコープ管理は実装が最も高価な工程だったため、実装前に厳格に行われていました。しかし現在では、その一部をレビュー段階に移行することが可能になっています。これは計画を省略してよいという意味ではありません。重要なのは、「どの程度の計画が実際に効果を生むのか」を明確にすることです。
小さな変更について再議論する前に、まずは制約条件付きでの試行を求めましょう。この「制約条件」こそが本質的なポイントです。
可能な限り最小限のパッチを作成してください。既存の機能フラグ(feature flag)の背後に隠し、パブリックな契約を変更しないようにします。テストを追加または更新し、変更したファイル一覧を明記して、リスクのある箇所を特に指摘してください。
エージェントがこれらの制約条件下でクリーンなパッチを生成できない場合、その要求はあなたが思っていた以上に大きく、コミットする前にすでに実質的な所有コスト(オーナーシップ・コスト)を伴うものであることがわかります。逆に、生成できたとしても何らかの示唆があるはずです。いずれにせよ、「これはスコープ内にあるのか?」という問いを、「これにはどの程度のコストがかかるか。支払う価値はあるか?」という問いへと置き換えることができます。
新しいスキルは不確実性の価格設定
AI を活用する世界において、最も優秀なエンジニアとは、すべての依頼に「はい」と答える人でもなければ、反射的に「いいえ」と拒絶する人でもありません。彼らが真に優れているのは、不確実性を素早く評価できる点にあります。
具体的には、実装の仮面を被った製品上の判断であるリクエストを見極めたり、コードレビューが作成自体よりも困難になる局面を理解したり、小さな変更であれば「試してみる」ことが最も責任ある対応だと判断する力です。この最後の能力こそが、以前とは全く異なる新しいスキルセットです。
かつての「試してみて結果を見てみよう」という言葉は、他の作業から開発者を引き剥ぐことを意味していました。しかし現在では、適切なタスクに対してはそのような行為ではなく、エージェントに範囲を限定された課題を与え、その結果に基づいてより良い判断を下すことを指します。推測に費やす時間が減り、監督に充てる時間が増えます。実装をブラックボックスとして扱う時間が減り、具体的な成果物を評価する時間が伸びるのです。
スコープの拡大(スコープ・クリープ)という問題は依然として現実のものですが、「新しいコードはコストが高すぎるのでダメです」という拒絶理由は、2 年前に比べてはるかに説得力を失っています。コードを生産するコストは低下した一方で、そのコードを理解し、レビューし、責任を持つコストは下がっていません。したがって、問うべき質問も「これは作業量が増えるのか?」から「本当のコストはどこにあるのか?」へとシフトしました。場合によっては、小さな範囲限定の変更に対する本当のコストとは、単に結果を確認するまでのプロセスそのものなのです。
「はい」と言うことのコストは変わりました。「いいえ」と言うことのコストも、それに合わせて変わるべきです。
(※本記事は The GitHub Blog に掲載された「The cost of saying yes has changed」の続編です)
原文を表示
The most expensive part of a small feature request used to be writing the code. Now it’s usually the meeting about whether or not to write the code.
That’s a real shift, and it quietly breaks a lot of engineering instincts. Engineers learn early that most “small asks” aren’t small: they need tests, a rollout plan, someone to think through the edge cases and own the behavior after it ships. A two-hour change can become a two-week distraction if it touches the wrong part of the system. So we push back. Is this really needed? Does it belong in this release? Does it change a contract we already agreed to? I’m not giving that instinct up.
But it rests on an assumption that’s quietly breaking, which is that writing the first version of the code is the expensive step. For a specific class of change, it no longer is. If you can tell those changes apart from the rest, you can replace “is this in scope?” with a question you can answer in thirty minutes instead of a two-day debate.
The debate often costs more than the patch
Here’s a pattern I keep seeing. Someone asks for a small change such as surfacing a last_active_at timestamp that already exists in the backend on a settings page. The team spends forty minutes in a thread. One person says it sounds risky. Someone remembers a related migration from two years ago. Someone mentions the deadline. Eventually we land on “probably a day or two, could be more,” with low confidence, primarily because nobody has actually tried it.
That process made sense when trying was the expensive part. You had to stop what you were doing, load the context into your head, make the change by hand, write the tests, then discover the second- and third-order consequences. When the first attempt is cheap, defending the boundary can cost more than crossing it.
An agent can produce that first patch in the time the thread takes to warm up. It’s not free and definitely not automatically correct. But it is cheap enough that the smart move is often to stop guessing and look at a real diff.
The first patch is a price check, not the product
The mistake is to treat the generated patch as the deliverable. It isn’t. It’s a probe. It turns an abstract scope argument into a concrete artifact you can interrogate:
Does it touch the files you expected, or does it sprawl across five packages?
Are the tests obvious, or does the change resist being tested?
Does it preserve the existing abstractions?
Does it quietly require a new product decision?
Would you be comfortable owning this behavior six months from now?
Those are better questions than “does this feel like scope creep?” because now you’re arguing from evidence instead of vibes. If the last_active_at field comes back as a four-line diff with a passing test, ship it. The debate was the expensive part. However, if that same request comes back touching the auth middleware, you’ve learned the request was never small. Not only that, you learned this in thirty minutes instead of two days.
This is not letting the AI decide. It’s using the AI to make human judgment cheaper and better-informed.
Cheap to write is not the same as cheap to own
Here’s the trap, and it’s the most important distinction of the AI era. A change is not cheap just because the code was cheap to generate. It’s cheap only if a human can confidently review and own the result.
A thousand-line diff that technically passes but nobody wants to own is not a cheap change. It’s a deferred cost. So the dividing line in that case isn’t “can an agent write this?” It’s “can a person validate it?”
Adding a display field that already exists in the backend is usually cheap.
Changing authorization behavior is not cheap, no matter how clean the diff.
Refactoring a well-tested helper is usually cheap.
Changing data-retention semantics is not cheap.
Plenty of changes still deserve a hard no even when the code is trivial. This includes anything that moves the product contract, creates a support burden, or touches privacy, billing, or compliance. AI lowers the cost of producing a candidate. It does nothing to lower the cost of owning one.
Move scope discipline closer to the evidence
Traditionally, scope discipline happened before implementation, because implementation was the expensive thing to protect. Now some of that discipline can move to review. That doesn’t mean skipping planning. It means being precise about which planning actually pays off.
Before relitigating a small change, ask for a constrained attempt. The constraints are the whole point.
Produce the smallest possible patch. Keep it behind the existing feature flag. Don’t change the public contract. Add or update tests. List every file you touched and call out anything risky.
If the agent can’t produce a clean patch under those constraints, the request was bigger than you thought, and you know it carries a real ownership cost before anyone commits to it. If it can, that tells you something too. Either way you’ve replaced “is this in scope?” with “here’s what it costs. Do we want to pay it?”
The new skill is pricing uncertainty
The best engineers in an AI-assisted world won’t be the ones who say yes to everything, and they won’t be the ones who reflexively say no. They’ll be the ones who can price uncertainty fast. They’ll know when a request is a product decision wearing an implementation costume, when review will be harder than writing, and when a change is small enough that the fastest responsible answer is to just try it.
That last one is genuinely new. “Try it and see” used to mean pulling a developer off other work. Now, for the right kind of task, it means handing an agent a bounded assignment and using the result to make a better call. Less time guessing, more time supervising. Less time treating implementation as a black box, more time evaluating concrete artifacts.
Scope creep is still real. But “no, because any new code is too expensive” is a much weaker argument than it was two years ago. The cost of producing code has dropped. The cost of understanding, reviewing, and owning it didn’t. So the question worth asking shifted from “is this more work?” to “where’s the real cost?” And sometimes, for a small, bounded change, the real cost is just finding out.
The cost of saying yes has changed. The cost of saying no should change with it.
The post The cost of saying yes has changed appeared first on The GitHub Blog.
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み