技術負債を解消する技術
これからの技術は維持だ
現代人は新しくものを作るのが大好きだ。しかし、そろそろ行き詰まり感が出てきたのではないだろうか。ITを使って効率化というが現代社会は過剰生産だ。社会を豊かにするという目標はとうに達成されている。本来なら、そこまで血眼になって新しいプログラムを書く必要は無い。
開発にはスピードが求められる。だが、スピード開発したあとの成果物はどうなっているだろうか。インフラエンジニアとしての経験では、スピード重視で構築したインフラはメンテナンス性が低い。構築するスピードを重視しすぎて、その後どうするかを考えずに構築するからだ。結局、メンテナンスやリプレイスの段階になるとしわ寄せが来る。
このような技術的なしわ寄せは技術負債と言われる。ちょうどお金を借りて大きな投資をするように、技術的な負債と引き換えにスピードを実現しているように見える。スピードを追い求めた結果、多くの技術負債を抱えている組織も多い。数字だけ追っていると、技術的負債の重さは感じにくい。
技術負債を抱えると、同じことをやるにも余計にコストがかかってしまったり、思わぬトラブルの原因になりかねない。最悪のケースでは、サービスの継続ができなくなってしまう。新しくプログラムを書くのもいいが、既存のものを見直す技術は重宝されるのではないだろうか。
リファクタリングできるエンジニアの持つチャンス
既存のコードの見直しというのは、一から書くよりも技術が要る。速攻でクソコードを書くよりも、クソコードを修正する方が手間がかかる。しかも、クソコードでもサービスに乗せれば評価されるが、クソコードを修正してもあまりお金にならない。
技術が要る上にお金がかかるので、当然、そういうノウハウを追求する人が少なくなる。実際に、コードのリファクタリングの本を探しても、書店にはなかなか置いていない。ネットで調べても、体系的なノウハウを見かける事は少ない。リファクタリングの技術を実務で使えるレベルで習得するのはなかなか難しい。
結局のところ、お金は払いたくない、技術は要る、メリットを納得させる説明が難しいという、困難づくしだ。リファクタリングの必要性は高いが誰もやりたがらない。ただ、世の中の流れが変わって、必要性が認知されたらどうだろう。現状で対応できる人が引っ張りだこになる。今は重要視されないが、リファクタリングできるとことは、今後に期待できる可能性はある。
リファクタリングと言っても、単にスキルが高ければできると思われているかもしれない。確かにそれでもできる。しかし、効率よくやろうとすれば、既存の要件を整理したり、代行手段を考える力も問われる。なので、単なるコーディング力ではない総合力と考えている。
技術負債を解消する手段はリファクタリングだけじゃない
ちょっとネットで調べてみたが、リファクタリングというのは十分に確立された技術とはいえず、厳密な定義があるわけではないらしい。ただ、「挙動を変えずに中身を整理」というのが大きな骨子のようだ。ただし、これを言い換えると「現行踏襲」という言葉が頭に浮かんでしまう。よくリプレイス案件で見かける言葉だ。
技術負債を解消するには、コードレベルでリファクタリングができる人材が必要だ。しかし、もっと必要なのは技術負債の重さを計ることができる人材だ。個人の技術だけでなく、周りの理解と協力があってこそ、技術的負債にアプローチできる。技術負債はエンジニアのみの問題ではない。
エンジニアだけではリファクタリングに割ける工数が確保できない。だれかが技術負債の重さを認識しなければ工数は捻出されない。コードを書く人のリファクタリング能力と、管理する人の技術負債の重さを計るくスキルと組になって初めてアクションが起こせる。つまり、技術負債を解消する技術は個人の努力だけでは成り立たないということだ。
コードを修正するにしても、技術的にどう問題があるか分からなければ、ただの無駄手間でしかない。技術負債の重さを的確に認識しなければ、安さや早さで得られるメリットと比較ができない。単に動いているという状態だけを基準にしたら、リファクタリングなんてエンジニアの自己満足でしかなくなってしまう。
技術負債を認識するべき人
ネットでは技術負債に書かれた文書がたくさんある。しかし、ほとんどが開発者目線だ。技術を知らない立場の人が語っているものは見当たらない。本来であれば、経営者のような人が積極的に技術負債に関心を持たなければ、事態は解決しない。会社の数字は開発者にも把握させようとする割に、技術負債には関心が無い。何気に不平等だ。
ただ、経営者の人が技術負債に関心をもったらどうだろう。今までに無い新しい価値観への転換だ。よく聞く言葉で表現するなら「イノベーション」というやつだ。イノベーションを起こしたがっている経営者はたくさんいるが、目の前に技術負債というイノベーションは転がっている。
ITエンジニアは目下の問題なので、技術負債に対するアプローチは積極的だ。しかし、説明しようと何をしようと、技術に感心が無ければ誰も話は聞かない。関心を持たせるべきは、エンジニアの努力だけではない。聞く人の気付き次第だ。いろいろな条件が揃わなければ理解されることは無い。決して悔やむべきではない。
技術負債の大きな原因は技術に対する無関心だ。関心とは何か具体的に言うと、お金を出すことと時間をかけることだ。関心があれば、誰でもお金は出すし時間も割く。世の中が変化する以上、エンジニアがどんなに優れていようと技術負債は発生する。技術負債の原因は決してエンジニアの技術力や努力不足ではない。技術負債は組織共通の課題だからだ。
コメント
仲澤@失業者
我が家にも負債的残存物があります。
・F-BASICで書いたコード(8bit)
・N88-BASIC(86)+MASMで書いたコード(16bit)
・Windows2.1用アプリのコード(16bit C言語)
・Windows3.x用アプリのコード(16bit C言語)
・OS/2用アプリのコード(32bit C言語)
・Windows95/98用アプリのコード(16/32bit C++言語)
改めてリストすると結構ごみだらけですね。
新しい環境になるたびに新しい言語で似たような物を作るといったことの繰り返しでした。
この様にそれまでの技術が土台ごと崩れ去るのを何度も経験しますと、
今の言語や環境も近い将来、同じ目に合うのだろうなと容易に予測できます。
結局残るのは個人的経験値だけなのかもしれません。
山無駄
AWS Lambdaのようなサービスは、技術負債の見える化へのアプローチかもしれませんね。
サーバレスで、コードの実行時間に対して課金されるので、クソコードを書いて無駄に実行
時間を使ってしまうと、目に見えてコスト高になってしまいます。見た目は同じ処理でも、
コードを書く技術者のスキルによってコストが何倍も違ってくるなんて、ある意味爽快かも。
昔はハードのリソースが高価だったのでプログラマはシビアなリソース管理でコードを書いて
いましたが、ハードスペックの大容量低価格化で今はリソース管理よりスピード重視になっ
ています。その中でも多くのクソコードが生産されていってるのではないかと。それが、ク
ソコードがコストとして見える化されると、プログラマは生産性と品質で評価でされるよう
なるのだから、ある意味、まっとうな話ではあります。それが、報酬として反映されれば、
の話ではありますが。
社内クレーマー
経営層に近い技術幹部が負債を認識し、
次の案件に向けて土台を再設計するぞー
と号令をかけるケースもあります。
それはそれで助かりますが、
与えるリソースは基本的に時間のみです。
※それに伴い人件費もって話になりますが。
ただそれだけだと、
長年クソコードを書いていた人達から
また新種のクソコードが生まれてくる
流れになってしまうわけで。
新たな負債をつくらないための事前教育や
仕組み作り、負債による問題を実体験経験
した人の参画等、時間だけでなく人と人に
対するリソース投入も必要なところまで認
識してくれないのが辛いところです。
時間以外の投入は経営陣に説得し辛いから
かもしれませんが。