技術的負債の解消ってどこまでやればいいの?
こんばんは。もう深夜ですね。シルバーウィークもあって休みが多すぎるせいか、一日中開発をしてました。時間経つの早すぎる。まだまだやりたいことはありますが、明日に回したいと思います。
さて、今日は事業会社あるある?の課題について話したいと思います。かなり長文になるので暇な時に見てください👀
エンジニアは時として、ソフトウェアの品質を保つために利用していない機能や現在利用している機能の品質向上を取り組む行為をします。現在僕はこの対応をしており、色々疑問や課題を持ったので書き連ねることにしました。
今僕が開発しているサービスが10年くらい続いていて、相当な技術負債が溜まっています。規模としては1000個くらいのAPIがあるようなWebサイトです。
利用していないAPIがかなりあるのと、既存のAPIをよりセキュアにする対応が求められています。
消すだけなら簡単だろーって思うかもしれないですが、Railsの強みでもあるメタプログラミングによってかなりしんどいです。あとRubyはコードジャンプができないので、利用しているかどうかが非常に分かりにくいです。ポリモーフィック関連とかもあって辛い。。本当に使っていないのかを調べるために、DBの履歴やGitの履歴を参照して問題なさそうかを1つ1つ検証しています。
また事業部の担当の方にも本当にいらない機能かどうかを一応聞く必要があるため時間がかかります。(ニッチな機能だと事業部の方もしらないことが結構あります)
セキュリティ対応については、APIによって対応が1つ1つ異なるため、これも相当きついです。
4年ほど前に大規模な仕様変更があり、この残骸もかなり残っています。不具合対応だけやるとセキュリティに穴が生まれてしまうため、同時に対応しなければいけなかったり。1つのAPIを直すのに影響範囲が大きくなってしまうことも度々あります。
これらの対応はやればやるほどソフトウェアの品質が向上するので素晴らしいことなんですけど、事業部側にとっては1円も価値が生まれない行為なんですよね。
マイナスを0にする行為でしかないので。特に私の会社はエンジニアが全然いないので、新規開発が疎かになると全体に影響が出ます。もちろん理解はしてくれていますが、数カ月この対応だけをやるというのは現実的ではありません。機能開発と並行してやる必要があります。でも、できる限り技術的負債を減らした状態で新規機能の開発を行いたいなぁとモヤモヤした気持ちになります。
なので、2~3週間くらいかけて、よく利用する500個くらいのAPIのセキュリティ対応を一旦最初にやることにしました。具体的には、認可の共通基盤の作成と既存の脆弱性やパフォーマンス、不具合の対応を集中して行いました。
残りのAPIの対応を現在進行系でやっていますが、機能開発と並行してやっています。
何もやっていないやつと思われるのは悲しいのと、できる限り事業部の方の期待に応えたいのもあります。あとは、よく利用する機能の対応が終わったのなら良いじゃんーってなりそうですが、ここで今悩んでいます。
また2-3週間開発リソースを割いて対応をする必要があるのか?と。全部の穴を埋める方が遥かに難しく、ちゃんとやるなら2ヶ月くらいほしいところです。でもセキュリティってめっちゃ重要ですし、使っていない機能を誤って使っちゃってしまってインシデント発生☠️。みたいなことも起こり得ます(7月末に経験アリ) お金と開発リソースに余裕があれば良いんですが、SaaSとかのIT会社と違ってソフトウェア製品で商売をしていない会社はここが辛いところです。
文句を言ってもしょうがないので、自身の可処分時間をできるだけ増やすことに決めました。4つほど案があります。
- デプロイ時間がボトルネックだったので、短縮する機能の開発をしました。まだリリースしていませんが半分くらいの時間になる予定です。タノシミ
- CIテストの時間短縮です。1つ目と同じですが、待ってる時間が結構あるのでうまい具合に調整したいです。
- 事業部側とのコミュニケーションコストがかなりかかっていたので、AIチャットボットを利用してもらうことで原因調査の時間が減った気がします。
- 最終奥義の残業です。この時間は思い切って品質向上に振り切ってやっています。上でカッコいいことを言いましたが、圧倒的に効果があります
という具合で最近は1つずつのAPIをチマチマ対応しています。
でも、やってよかったなぁって思ったのは、Railsのコードを理解するのにとても良い機会でした。色々な記法で書いてくれてありがとう。うざいので1つに統一しているよ。
あと、全てのAPIを見るので、ドメイン知識がかなり身につきました。これはありがたい。引き続き4番を意識してゴリゴリ開発を進めていきます。完了するときを夢見てます。
[さいごに]
今リファクタしてるRailsのシステムを来年か再来年にgoにリプレイスする予定なんすよね。
おい、こんな作業やるなよ!!って思うかもしれないですが、スパゲッティーをほどかないとリプレイスなんてできないので、麺をほぐしています。あとは脆弱性という爆弾処理をする必要があるのでやるしかないです。
っていう、ちょっとやるせない気持ちになりながら普段作業しています。とはいえいち早くgoにしたいので引き続きガンバリマス。
みなさんの開発内容とか聞きたいので是非教えてください。
特に同じような事やっている人いたら教えてください。とても気になります。
コメント
最初のコメントを投稿しましょう。