Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

Vol. 20 認知負荷の高いコードを書いたエンジニアに起こること

この記事は、Bill One開発Unit ブログリレー2025の第20弾になります。

はじめに

Bill One Engineering Unitで経理AXサービス「Bill One」を開発している河端です。


認知負荷の高いコードを、皆さんも見たことがあると思います。

  • 大量の分岐が1ファイル内でネストしており、どういった処理をしているのかが分からない。
  • 似たような変数名や複雑な変数名が羅列されている。
  • mainブランチで記載されたままのTODOコメントが放置されている。
  • (ドメイン駆動開発を採用している場合)ドメインにロジックが集約されておらず、ApplicationServiceにロジックが大量に漏れ出ているetc...


認知負荷の高いコードを読む側の体験談は数あれど、書いた側の経験談はあまり存在していないようです。
世の中から認知負荷の高いコードがなくなることを祈って、以前私がそのようなコードを書いた際の経験を本記事で書こうと思います。


どんなコードだったのか

先に言い訳させてください。
当時、特定の時期に1日あたりチーム全体で100時間程度の負荷となっている運用作業がありました。その運用負荷を低減させるためになるはやで対応する必要があり、チームタスクと並行して運用を自動化したコードを実装していました。(本記事における認知負荷の高いコードです🥺)


私が書いたコードはこんな感じでした。

  • 境界の異なる責務が、全部ApplicationServiceに寄せ集められていた
  • 業務ルールと制御フローがごちゃっと混ざっていた
  • 「なんでここでこの判断をしているのか」がコードから分からなかった
  • 安全に直すには、コード外の前提知識が必須だった
  • ネストが非常に深くなっていた

認知負荷が非常に高いコードですね...。

リリース後のフロー

さて、認知負荷の高いコードを書いた後の流れを見ていきます。
記載したコード自体にバグはなく、最終的に1日あたり最大80時間程度の運用負荷を削減できました。

1. 感謝される

運用負荷を大きく下げているので、めっっっちゃ感謝されました。
Sansanでは「Unipos」というサービスを利用しており、感謝をメンバーに伝える仕組みがあります。
その仕組み上で感謝のコメントが大量に集まりました。

感謝コメント1
感謝コメント2
感謝コメント3
感謝コメント4
感謝コメント5

(画像上の一部内容を削除しています)


上記は一例ですが、他にも大量に感謝の声がありました。
いや〜やっぱり感謝をされるのは嬉しいですねぇ

2. リファクタリングのお伺いが立つ

しばらくすると、当時その領域の修正を主導していたチームメンバーのMさんから、リファクタリングの相談が来るようになります。
「この処理、少しリファクタリングお願いしてもいいですか?🙇🙇🙇」
「処理構造を変えたいんですが、お願いしてもいいですか?🙇🙇🙇」

この段階では空気はかなり穏やかで、どっかで対応しますよ〜とヘラヘラしていました。(申し訳ありません)


3. "お伺い" が "催促" に変化する

しばらく2の状態が続いていると、徐々に温度感が上がってきます。
「そろそろお願いしたいです。」

Mさんはメンバーへの依頼時に、いつも🙇という絵文字を付けてくれる物腰が柔らかい人なのですが、依頼文から 🙇 の絵文字が消えることになります。
この時対応していればよかったのですが、プロダクト機能開発業務などとの兼ね合いもあり、対応する時間をなかなか取ることができませんでした。(改めまして、本当に申し訳ありません)

4. 怒りのPR reviewが飛んでくる

ある日。
Mさんから突然PR review依頼が飛んできました。内容を確認すると私が当時書いたコードに修正を加えたPRでした。

これはまさか...と思っていると、次々とPR review依頼が飛んできます。"review時間確保"と記載された謎のミーティングが組まれています。その後はしばらく、泣く泣く大量のPRをreviewすることになりました。(重ね重ね、本当に申し訳ありません)


何が悪かったのか

さて、なぜこうなってしまったのでしょうか。

認知負荷の高いコードを書いたこと自体が一番の問題だったわけではありません。
コード自体は、"運用負荷を下げる"という価値を生み出していましたし、運用観点ではなくてはならないものでした。
問題はその後、認知負荷の高いコードを放置したことです。


そういったコードを書いてしまうような状況はあります。ただし、その場合はセットで、下記をあらかじめ決めておく必要があります。

  • いつ直すのか
  • 誰が責任を持つのか

これを決めないまま放置すると、コードの属人化が進んだり、ミスコミュニケーションが発生したりします。

まとめ

認知負荷の高いコードを書くこと自体は、必ずしも悪ではないです。でも、認知負荷の高いコードを放置するのは悪です。

今まさにそういったコードを書いている人もいるかもしれません。それ自体は事情もあるので仕方ない部分もあると思います。
でも、放置だけはしないでください。

組織のために、なにより未来の自分のために...。

Sansan技術本部ではカジュアル面談を実施しています


Sansan技術本部ではカジュアル面談を実施しています

Sansan技術本部では中途の方向けにカジュアル面談を実施しています。Sansan技術本部での働き方、仕事の魅力について、現役エンジニアの視点からお話しします。「実際に働く人の話を直接聞きたい」「どんな人が働いているのかを事前に知っておきたい」とお考えの方は、ぜひエントリーをご検討ください。

© Sansan, Inc.