「筋が悪い」「美しくない」が設計の議論を止める理由
ソフトウェア開発の現場において、次のような言葉を聞くことがあります。
- 「この設計は筋がいい/悪い」
- 「美しい/汚いコードだ」
- 「モダン/レガシーな技術だ」
こういった言葉は開発現場においてよく聞く言葉ではありますが、いくつかの問題を含んでいます。そのため、私はこういった言葉を極力使わないようにしています。
この記事ではこういった言葉がなぜ問題なのか、ソフトウェア設計をどのように考え、どのように評価するべきかについてまとめています。
抽象語の問題
「筋が悪い」「美しくない」。もしこういった言葉であなたのコードや設計が評価されたら困りませんか?なぜ困るのかというと、こういった言葉は曖昧で人によって使っている意味や判断基準が違うからです。具体的には次の問題があります。
- 意図が正確に伝わらない
- 議論を終了させる言葉になりやすい
意図が正確に伝わらない
「筋が悪い」「美しくない」といった抽象語の問題は意図が正確に伝わらないことです。多くの場合、抽象語の裏には具体的な評価軸があります。例えば次のような評価軸です。
- 変更に強いか
- 責務が分離されているか
- ドメインの考え方がコードに素直に反映されているか
しかし、これを言語化せずに「それ、設計として筋が悪いよね」と言われると、聞いている側は相手が何を言いたいのかがわかりません。抽象語は「お互いの意思疎通を阻害する言葉」になりやすいです。
議論を終了させる言葉になりやすい
抽象語の問題は議論を終了させる言葉になることです。抽象語が議論を終了させる流れは次のようになります。
- 違和感・不満・結論が先にある
- それを表現するために「筋が悪い」「美しくない」「技術負債」といったラベルを貼る
- ラベルづけをすると、議論が深まらずに終了する(なぜなら“悪いもの”だから)
ラベルづけは便利ですが、安易なラベルづけによって議論が深まることなく、「問題である」「直すべき」という結論に至ってしまいます。
具体的にどのような問題が起こる可能性があるか?それは許容できるのか、許容できないのか?現実として大事なことは、こういった問いです。
ソフトウェア設計をどう考えるべきか
ソフトウェア設計はアートではない
ソフトウェア設計はアートではありません。美しさや先進性の競争でもありません。ソフトウェア設計とは制約と目的に対するトレードオフの選択であると私は考えています。
設計とはトレードオフである
私は設計に絶対の正解はないと考えています。あるのは、要件と制約と現実的な手段の選択です。そこには必ずトレードオフがあります。
- 実装を単純にする代わりに、拡張性を捨てる
- 将来の変更に強くする代わりに、設計が複雑になる
本来、設計の議論は 「どのトレードオフを選ぶか」 の話のはずです。
設計の良し悪しは「時間の使われ方」で測れる
結局、設計評価はこれに集約されます。
エンジニアの時間がどこに消えているか
- 運用・保守・依存更新 → 悪化
- 機能開発・改善 → 良好
優れた設計は運用・保守の時間を最小化し、機能開発の時間を創出します。
本質的な評価軸
設計を評価するなら、見るべきは次のポイントです。
- 要件に対して不足していたり過剰ではないか
- 要件に対してコストのバランスが取れているか
- 将来的なメンテナンスや依存リスクはないか
- 新規参入のエンジニアが容易に理解することができるか
まとめ
- 抽象語の問題:「筋が悪い」「美しくない」「技術負債」といった言葉は意図を正確に伝えず、議論を終了させて思考を止めてしまう
- 設計の本質:設計に絶対的な良し悪しはなく、トレードオフである。制約の中で何を楽にして何を捨てるか、どのトレードオフを選ぶかの話である
- 評価の軸:設計の良し悪しは、エンジニアの時間が運用・保守に消えているか、機能開発・改善に使えているかで測れる