SODA Engineering Blog
🐡

深い開発

に公開

SNKRDUNK(スニダン)を開発しているSODA inc.の Advent Calendar 2025 4日目の記事です。

単なる作業ではない開発「深い開発」について

世の中では往々にして「開発(実装)」という工程が軽視されがちだ。「上流工程で決まった設計図を、コードに翻訳するだけの単純作業」と捉えられることがある。そういった単純作業としての開発もあるのだろうが、全ての開発がそうではない。

私はここで「深い開発」という概念を提唱したい。深い開発とは単純作業としての開発の対立概念である。優れた設計は、コードを書いてシステムと対話するプロセスの中から創発されるものであり、それに欠かせないのが「深い開発」である。

「設計」の限界

なぜ、実装しながら考える必要があるのか。それは「初期設計は、実体よりも大抵エレガントすぎる」からだ。

いざ開発フェーズに入ると、初期設計で見落としていたライブラリの不整合やパフォーマンスのボトルネックといった「現実」が次々と露呈する。

後から露呈した問題をエレガントさを保ちつつ解消するのはしばしば初期設計よりも難しい。ここで「言われた通りに作る」だけのジュニアエンジニアと、自走できるエンジニアの差が生まれる。

  • 浅い開発: 設計の不備をそのまま実装し、手戻りを起こす
  • 深い開発: 実装プロセス自体を「設計の検証フェーズ」と捉え、初期設計の欠陥(バグや仕様の穴)を早期に発見し、設計へフィードバックする

将棋の長考、あるいはハンモック駆動開発

将棋の対局を観戦していると、プロ棋士が盤面を前に数十分も沈考する場面に出くわす。彼らは何もしていないわけではない。脳内で無数の手を指し、盤面をシミュレーションしているのだ。

これはITエンジニアの仕事とも似ている。 難しい領域のコーディングをするとき、常にキーボードを叩いているわけではなく、モニターを見つめながら、ある変更が及ぼす副作用、エッジケース、整合性の不備を脳内で再帰的に探索している。

リッチ・ヒッキー(Rich Hickey)は、「Hammock Driven Development」という講演をしている。論旨をまとめると、「複雑な制約条件を統合し、大局的な解決策が生まれるのは、ひとつの問題を長時間集中して考え抜いて、最後にハンモックで寝そべっている時である」というものである。ここで重要なのは「ひとつの問題を長時間集中して考えること」であり、これこそが「深い開発」である。

カル・ニューポートの著書『Deep Work』でも、このような高強度の集中状態こそが価値の源泉であると指摘する。

暗黙知とコンテキストの重要性

一定の技術力があれば、GoFのデザインパターンやクリーンアーキテクチャなどの「定石」を当てはめて、一見整った構造を作ることはできる。しかし、それだけでは十分ではない。

マイケル・ポランニーが提唱した「暗黙知(Tacit Knowledge)」の概念を借りてみる。ポランニーによれば、我々は「言葉にできる以上のことを知っている」。優れたシステムには、言語化されたパターン(形式知)だけでなく、そのドメイン特有の制約や歴史的経緯といった文脈が不可欠である。

複雑度が高い領域では、その領域に長時間関わる過程で生まれた世に出ないようなドメスティックな開発プロセスが有効であったりする。重要・複雑な領域で障害を起こさずに継続的にアーキテクチャを改善できる仕組みは汎用的なツールやエンジニアだけでいきなりできるものではない。ドメインや個人に最適化した開発プロセス・開発環境を育てていく必要がある。

DDDにおけるコアドメインと「深い開発」

この「深い開発」は、すべての領域に必要なわけではない。 エリック・エヴァンスのDDD(ドメイン駆動設計)の用語を借りれば、事業の競争力の源泉となる「コアドメイン」にこそ深い開発が適用されるべきだ

CRUDだけの単純なサブドメインであれば、浅い開発でも問題ない。しかし、複雑なビジネスルールが絡み高可用性も求められるコアドメインにおいては、設計と実装を往復しながらモデルを洗練させる「フルサイクルエンジニア」が必要となる。

複雑でそう覚えておけないことを一次記憶に入れておき、既存設計の課題とその解決法を描き続けることのできる人材をコアドメインに常駐させておく必要があるのだ。

結論

「深い開発」の価値は、実装という行為を通じてドメインへの理解を深め、アーキテクチャを漸近的に最適解へ近づけていくことにある。

開発を「作業」として切り出すのではなく、設計の最も重要なプロセスとして捉え直すこと。そして、その深い思考の海に潜れるエンジニアをコアドメインに配置すること。それが、競争力のあるソフトウェアを生み出す必要条件である。


明日は @okauchiwani さんによる記事が続きます。

SODA Engineering Blog
SODA Engineering Blog

Discussion