37
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

8年運営したSaaSの化石のようなカスタマイズコードに向き合う

Posted at

化石みたいになったカスタマイズ、つらい

もっと長く運営しているシステムをお守りしている方には8年程度と怒られるかもしれないですが、これくらい経つともう何のためのカスタマイズかわからないコードが割とあります。

こういうのはバグの温床になったりQAのコストを増加させたりしますし、何なら重要なビジネスロジックの中に複雑にカスタムコードが入り込んでいたりするので摘出するのも大変です。

SaaSの王様Salesforceの話ですが、初期に超王手金融クライアントのためにカスタマイズをしてしまって、その後そのカスタマイズによってインシデントを引き起こしてこれじゃダメだとなってAPIを提供するプラットフォーム化を進めることになったという話があります。プラットフォーム化した今でもそのカスタマイズコードは切り離せずに残ってしまっているそうですw
(参照→ https://open.spotify.com/episode/58TPAKYpVVkOBWlwQuFQF7)

今日はそんなカスタムつらいよ話をします。

遭遇したカスタマイズのパターン

controllerやviewにif-elseが連なっている

安直でわかりやすいのでさほど厄介ではないだろうか。カスタマイズを認知するのも標準機能化するのも摘出するのも容易と思われる。
しかしfat controller拒絶症のエンジニアがいたら発狂してしまうので注意。

メールアドレスなどのハードコード

これもわかりやすいので厄介ではないはず。

enumにカスタマイズ用の値が定義されている

テストが漏れていると危ない。

ページファイルがクライアントごとに分かれている

ファイルごと分かれているので、改修時には見落としてしまってバグになりがち。

機能ごと特定のクライアントしか使ってない(または使えないようになっている)

そもそもカスタマイズであることが忘れられていく。この機能誰が使ってるの?と言って削除してしまうと後で怒られてインシデントになりがち。(自分が経験したわけではないです、一応。。)

他にも思い出せそうですが胃が痛くなってきたのでやめておきます。もっと別なパターンがあったら教えてください。

なぜカスタマイズが混入してしまうのか

サービスを方向転換することがあればどうしても当初の設計に無理が生じるためと考えます。
自分の経験だと、最初はSaaSでもなんでもなかった→2社が共同利用するようになった→マルチテナント展開するようになったという経緯で成長したサービスでしたが、マルチテナント化の最終的な意思決定をするまでの間に(後から見れば)カスタマイズになるコードが混入することになってしまいました。

カスタマイズに向きあうための考え方

  • 全て除去しよう、負債を返済しようと思わないこと
    • 上記Salesforceの話しかり、影響度的に摘出不可能なものもある
  • 抱えてしまった負債は仕方ないと考えて、むしろこれと一生付き合う覚悟を持つ
  • ただしカスタマイズを全て一覧化して把握する努力はする
  • カスタマイズはバグの温床なので、それを踏まえてテスト設計をする
37
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?