nigoblog

暫定無職のブログ

スタートアップはいかにして技術的負債に立ち向かっていくか

技術的負債が最近の話題なので自分もちょっと考えてみようかなと

まず技術的負債の定義から考えると

クソコード

読みにくい、メンテしにくい、おかしな動作するといったYMOコードのこと。

クソ設定ファイル

YMO設定ファイルのこと。

属人性のある技術的作業

~さんしか出来ないデプロイ。~さんしか出来ない復旧など、特定の誰かしか出来ない作業のこと。

まぁ他にも色々あるかと思いますが、とりあえずこのような感じかなと。
一般的にはコードレビューやテストコード、技術共有のミーティングなどで防ぎます。
しかしスタートアップはいくつかの理由により一般的な対処が出来ず技術的負債がめちゃくちゃ出やすい環境です。
その理由は、

理由1. とにかくスピード重視

テストコードなんか書いてる余裕などないと。とにかく動けばいいやと。

理由2. 仕様が固まりにくい

動きながら考えなきゃついていけないというのがスタートアップ。仕様を固めても次の週には意味がないものになっていたりすることがざらにある。

理由3. 人がいない

これは技術や作業を共有する人がいないということ。エンジニア一人で進めていたら属人性とかどうでもいいですよね、その時は。それによってオレオレコードオレオレ設定ファイル、オレオレ作業手順が生まれます。

スタートアップで技術的負債が生まれやすいのは上記のような理由にあるのではないかと思います。
そして技術的負債を残し積み重ねていった結果、3, 4年目に入るエンジニアが苦労するなど。
ブログに技術的負債を放置するクソみたいな会社と書かれます。
そのようなITベンチャーがこの世にいくつあるだろうか。

長い目で見た場合、スタートアップも技術的負債を放っておくわけには行きません。
そこで今回はスタートアップがその環境の中でどのように技術的負債に立ち向かっていくかを考えてみたいと思います。

スピード重視に対するソリューション

寝る時間、遊ぶ時間を削ってテストコードやcookbook, serverspecなどを書く。
仕事中はそんなの書いている余裕など全くありません。「いやテストコードを含めて実装だろ」。そんなのは重々承知の助なわけです。それ以上にスピードを求められるし自分自身が求めるわけです。
となると余暇を利用するしかありません。

フロント側も荒れがちなので、なるべくsasscoffeescriptを利用する。
sassは以前から利用していたのですが、最近coffeescriptを利用してこりゃすごい!となりました。
sassは入れ子が書きやすいのでスコープが小さくなることが技術的負債になりにくいかなと。
coffeescriptは見やすさが格段に向上します。
coffeescriptはRails4を使っているとturbolink周りでハマるので注意。

仕様が固まりにくいことに対するソリューション

状況的には上記にもあるように、1週間前に実装したことが全く意味がないことだったみたいなそういう状況。意味のないコードがたまることが技術的負債レベルを向上させます。
そういう場合はスパッとそのファイルを消去!
使わない機能を実装した部分は使われなくなった瞬間消しましょう。
後になんだこれというのがなくなります。

人がいないことに対するソリューション

いくつか対策があると思います。一つは技術的負債へ理解を持つ。
作業している時に「あ、これいつか負債になる」っていうのが感覚でわかるようになればそれを避けつつ作業します。ただ「あ、これいつか負債になる。しかしアカギ意外にもこれをスルー」ということはよくあるので、強い心を持つ必要があります。
他には共有の場を設ける。最近は「Qiita team」というチームでノウハウや作業履歴を共有する場があるので積極的に使う。一人しかいなくても、後に優秀な人が入ってきてこれを見られると恥ずかしいということを考えると、技術的負債は生み出さなくなるかと思います。
エンジニアメンバーを最低2人にする。いなければCEOが技術を身につける。
監視が目的です。3人いればなお良いです。


という感じで少し無理矢理な感じもしますが、技術的負債への対策はしっかりと考えてやっていくべきではないかと思います。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

これはあっさり読めるのでおすすめ。コードの美しさに気を使うようになります。

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code

インフラ構築の際はchefを利用すること。設定手順書を残すことがスピードを落とします。