このサイト史上最高に長いタイトル持ってして言いたいことは書いてしまったのですが、頑張って続きを書きます。なお、今回書くことは仕事でのソフトウェア開発においての話であって、個人開発では好き勝手にやったらいいと思います。

まえおき


ちょっと下期の振り返りを行ったところ、ここ2ヶ月で下記のようなことをやってました。

  • オンプレサーバ3台くらい廃止
  • 使ってない(社内向け)サービス3つ以上くらい停止
    • 紐づくDNS設定なども削除
  • 2インスタンスあったRedmineを1つに統合
  • 不具合の温床であった例外的な機能を削除して通常の機能に統合
  • その他、コードを5000行以上削除
  • いくつかのインスタンスのサイズを下げた
  • 明らかに不要・あるいは既に片付いている滞留チケットを400件くらいクローズ

私自身は下期は[1]あんまりパフォーマンスがよくないなぁ。と思っていたのですが、これ見ると結構頑張ってるんじゃないですかね?中には私が作業したものではないものもありますが、一応、私の判断のもとに廃止・停止したりしてるので。

とりあえずで作るのをやめろ


どうもソフトウェアエンジニアの人はすぐできるからといって(人によっては)なんでもすぐに作ってしまう傾向がある(作るのは面白いので気持ちはわからんでもないですが)と思うのですが、個人的にはそういうのは止めるべきです。理由は簡単でメンテが大変だからです。

ソフトウェア開発は作って終わりではありません。大半は誰かが作ったものの保守作業です。エライ人も言ってました。言い方が悪いですが、作った瞬間から負債になります。鮮度のいい刺身みたいなもの[2]です。なので、私は作るという行為は最終手段であって作らなくて済むのであればそれがベストだと思っています。もし、作るのであれば以下のような過程を踏むべきだと考えています。

  • 本当に要るのか考える
  • サービスを使って(お金を払って)解決できるかどうか考える
  • OSSで解決できるか考える
  • 開発する

こんな感じです。とりあえず、作ることを考えるのは最後だと思ってます。一番大事なのは一番上の本当に要るのか考えるだと思ってます。

余談ですが、本当に要るのか考えるのは日常生活で物を買うときに本当に要るのかどうか考えるのと似ていると思ってます。日常生活を思い出してください。たいていの場合、買おうかどうか迷ったものは要らないケースが多いです[3]。ソフトウェア開発の場合は流石に日常生活の買い物とまではいかないですが、よくよく考えれば要らないのに作ってしまったケースは往々にしてあると思います。

作るならメンテまで


作らなくて済むのであればそれがベストだと思いますが、実際は「なんか知らない間に(あずかりしらぬところで)出来上がってた」とかいうことが往々にしてあると思います。そして、そういうやつはたいていのケースでメンテされません。

何も考えずにとりあえずで作るというのは(個人的に)悪に等しいと思っていますが、それに加えて作った後にすっぽかすのはもっと論外なので作ったなら作ったなりにちゃんとメンテしましょう。

  • READMEをちゃんとかく
  • ドキュメント作成する(≒ JavaDocみたいな感じでコメント残す)
  • 引継ぎする

…などなど

「コードを読めば済む」という理屈は個人的には論外だと思ってます。あなたはその時に勢いで作ったものをそのままどこかの誰かに引き渡すのですか??

なんで整理・掃除しないの?


これは本当に心から疑問なのですが、なぜ、みんな定期的にコードの見直しやプロダクトやサーバの整理をやらないんですか?

私は普通の人より頭が悪いので把握するものの量をできる限り減らしておかないといけないんですよ。なので、つくってつくりっぱなしにするという行為がイマイチ理解できません。なぜ作ったら作りっぱなしで終わりにするのですか?中には、その時は必要だったものも多いと思います。しかし、定期的に見直ししないのはなぜなんですか?その時に必要だったものもいつかは不要になったり、歪みがでてきますよね?

いいですか?日常生活を思い出してください。あなたは物を捨てないのですか?捨てないとどうなりますか??物が溜まりますよね。ゴミが溜まりますよね??あなたはごみ屋敷に住んでいるのですか???

というわけで、基幹システムがかなりダーティになっている[4]ので、2人ペアを隔日交代で平日4日間(計16h)をクリーンアップとそのためのツールを準備する時間にあてることにしました。まあ、今週からやりだしたばかりなのでうまく機能するかどうかわかりませんが。

いちおう念のため書いておきますが、私は過去資産をdisっているわけではない(熟考せずに作ったものに関してはdisってますが)んですよ。なぜ、考え無しに作るのか。必要に駆られて作ったとしても、なぜメンテしないのかということが疑問なんですよ。

まとめ


  • つくるな
  • 誰もが保守できるようにしておけ
    • せめて引継ぎは必須
  • 掃除用の時間を取れ
  • 捨てろ・燃やせ

所感


下期は引き続きサーバもサービスもソースコードも全て焦土にします。


  1. 正確に言うと上期からなんですが、大きな声で言えないので ↩︎

  2. なお、私の場合は完成を待たずして作りながら既に腐ってます ↩︎

  3. まあ、それでも人は買ってしまうのですが ↩︎

  4. なお、この記事の冒頭で記載している廃止・停止したアレコレは基幹システム以外のものです ↩︎