凸庵の生存戦略

とあるベンチャー企業でプログラマをやっていて発達障害(ASD)をもつ私の生存戦略や技術ネタなんかを書いていきます

使いづらいクソシステムやどうしようもないレガシーなシステムの愛で方

この業界に10年もいると様々なシステムを担当することになります。
といっても大した学歴がない私が担当するのは15年もののレガシーなシステムだったりいまいちだなぁという評判が立っているシステムの運用保守だったりします。

多くの技術者はこれらのシステムをできれば担当したくないと思うことだと思います。
しかし、実は私はそんなに嫌ではなかったりします。*1
というのもあるときを境にレガシーなシステムの中でもカオス度が高いところばかり任されるようになったため、感覚がマヒしてきたところもあるのかもしれません。*2

今ではそのようなシステムを改修することになっても、イライラするどころか愛着を持って愛でるようにシステム改修を行えるようになってきました。
今回はそんな私がレガシーなシステムやいわゆる使いづらいシステムにどう向き合うと愛着を持つことができるかを書いていこうと思います。

f:id:totsuan1545:20180611162021j:plain

想定読者と要点

以下のような方の参考になるかもしれません。

  • レガシーなシステムを担当することになって心が折れそうなひと
  • いまいちなシステムを使っていて日々ビキビキ(#^ω^)きているひと

要点は以下の通りです

  • どうしようもないシステムになるにはそれ相応の理由がある
  • 開発者だけが悪いわけではない
  • いまいちできの悪い年下の弟や後輩を愛でるような気持ちを持てば愛おしくなる

それでは本編スタートです。

いまいちなシステムって?

f:id:totsuan1545:20180611162249j:plain

いまいちだなぁと思われるシステムを一般化することは難しいですが、この記事を読んでいる方の頭の中にはぼんやりとイメージが浮かんでいることと思います。

  • いちいちUIが使いづらい
  • 何代にもわたる設計思想の地層が見える
  • もはやハックツール*3を使うほうが普通になっている

どれもいまいちなシステム像としてはぴったりだと思います。*4
ひとによっては使うどころか見るだけでストレスが溜まったり動悸が激しくなったりすることと思います。

ここにリストアップした特徴を持っていないシステムがぱっと出てこないひとはとても幸運だと思います。
今後もそのようなシステムに出会わないようお祈りいたします。

私の愛で方

f:id:totsuan1545:20180611162505j:plain

私がそのようなシステムと向き合う場合、ソースや挙動を見ながら以下のポイントについて思いを馳せます。

  • こんなどうしようもない作りになってしまった理由や制約事項
  • 最善を尽くした結果このような作りになってしまった開発者の無念さ
  • 少しでもイケてる作りにするための改善点

見るだけで愛おしくなるような項目ですね。
私はどんなにダメなシステムでも、それは技術者がさまざまな制約事項の中で最善を尽くした結果だと考えています。
なので、どうしようもないシステムでもそうなってしまった理由や背景があると思っています。*5
そういう理由や背景に思いを馳せながらどこをどうすれば少しでもマシになっていくかを考えるのが私はとても好きです。

当時の開発者の気持ちを追体験する

私がシステムを理解するとき、自分がこのシステム開発担当者になったつもりでシステムを覗いています。 自分が開発担当者になったと思ってシステムを見ていくとさまざまなことに気づきます。

  • 最善じゃないんだけど限られた期限までに作り切れないからしょうがなくコピペした跡
  • 適切な責務を分割するよう設計する時間が取れなかったのであろう無念さ*6
  • その時々で現場で流行っていた技術や思想を試していった跡
  • 一貫していないUIと直感的でない挙動を求めた顧客の要望

よほど技術力がない開発者ばかりのチームでない限り、出来上がったシステムは限られた条件で最善を尽くした結果です。
元々開発者たちはできる限りいいものを作ろうとしていたのだと思うようにしています。*7
なので、多くの場合最初からどうしようもない作りづらいシステムにしようとしたわけではないと私は考えています。

そういう目でシステムを見ると上にリストアップしたポイントに気づくことが多いと体感しています。

ちょっと変わった性癖・・・?

f:id:totsuan1545:20180611162720j:plain

そういう苦労したポイントを見つけた時、私はそのシステムに対してとても愛おしい気持ちを持ちます。
例えるなら、いまいち要領がよくないんだけど愚直に真面目な若者に対するそれのような。
あるいは生意気だけど見当はずれの努力を続ける年下の兄弟を見るような、そんな気持ちです。

以前そんな話を職場でしてみたところ、「きみ相当変わってるね」と言われ衝撃を受けました。
てっきり多くの技術者のひとはそう思うものなんだろうなぁと思っていたからです。

他にも街中でブルーディスプレイやBIOSのエラー画面なんかを見つけると最高に愛おしい気持ちになります。
きっと似たような嗜好のひとはそれなりにいると思いますので、この冬に私が見たほっこりする画像を貼っておきます。 f:id:totsuan1545:20180611163158j:plain

スマート自販機がBIOSエラーになっていました。こういうのいいですよねぇ。

そんな残念な子たちにどう対応するか

私が愛でるポイントを見つけたらどうするか。開発対象のシステムであれば先人が苦しんだポイントを緩和するように設計しなおして実装します。
多くの場合、不必要に複雑になっていることが多いなぁと思うことが多いです。
どうやったら先人が苦しんで私が愛でることになるポイントをうまく解決して、よりシンプルな作りに変えていけるかが勝負です。

自分が手を入れる以上いまいちなシステムは世の中に残しておくわけにはいきません。
割れ窓理論と同様に、ひとつイケてないつくりを残すと次々とイケてないつくりが作り出されてしまいます。容赦はできません。 イケてない部分はバージョン管理システムの履歴に葬り、可能な限りイケてる作りに変えていきましょう。*8

もし使っているシステムでイケてないポイントを見つけたら、javascriptブックマークレットやバッチなんかを使ってハックしていきます。
使いづらくてしょうがないなぁと思うポイントがあっても、使えないものは使えません。自分や周りの人が最小工数で目的を達成できるようツールを作成します。
作業工数を減らすのがシステムの役割です。それを満たせないシステムに容赦はいりません。より楽できるようにやれることをやっていきましょう。

クロージング

どうしようもないシステムをただただ改修したり使ったりする場合、相当なストレスを抱えながら改修することになると思います。
最近いまいちなシステムと対峙していてストレスが溜まってきている場合、この記事を参考にシステムを愛でる目線で見てみてください。
そうすれば、もしかしたらそれまでのストレスが幾分か楽になるかもしれません。そういうポイントが見つからなかったら、容赦はいらないのでモリっと作り替えていきましょう!

ここまで偉そうなことを書きましたが、きっと同じような状況に立たされたら自分も似たようなシステムを作ってしまうことと思います。
ただただ文句を言うよりも、愛でてあげるくらいのゆとりをもって向かい合ったほうが建設的な対応ができるのではないかなぁと思っています。

ここまで見ていただきありがとうございました。
見ていただいた方にいいことがありますように。

*1:もちろんやらないに越したことはありませんが

*2:元々ソフトウェアの設計を改善していくのが好きで得意分野なので任されるようになったのではないかという説もあります

*3:VBAを使ってデータを作ったりACCESSを使ったりしてシステムそのものを触らなくてもよくする業務改善ツール

*4:一般的には敬遠されそうないまいちなシステムですね

*5:既存システムに対するリスペクトをもって改修しよう みたいな話もありますが、思想としてはそれに近いかもしれません

*6:ひとつひとつのクラスがきれいに作られているのに全体の設計がいまいちな場合はこのパターンだと思います

*7:世の中にはそういう職場ばかりでもないと思いますが

*8:といっても半分くらいは頓挫するんですけどね・・・