January 14, 2011
前職の頃からよく言うフレーズなのだが、受託をずっとやってきたエンジニアが面接に来た時に、「誤解を恐れずに言えば」という前置きとともにこういうことを言うことがある。
「サービスの開発は退屈ですよ?」
Facebookやtwitterや、若年層向けの携帯SNSや、それに従属するソーシャルアプリのような鬼のような成長をするサービスはよくわからないが、それ以外の従来からある、数多くのWebサービスにおいてエンジニアに求められるものは、如何に目の前の日々レガシーになっていくコードを安定的にメンテナンスしていくか?というサイクルになる。
安定成長するネットビジネスは「ストック型」である。お客様がそのサービスを使い始めて、使い終えるまでの期間を生涯価値として、今まで開発したコードで「サービス」を利用する。
その生涯価値がマルチスレッドのように重なることで、毎月安定的にユーザーが増えて行く仕組みである。とにかくビジネスモデルにおける「新規獲得数ー減少数」がプラスであり続ければ、必ず成長するビジネスとも言える。
これエンジニア的に言うと、要するに「過去のコードの蓄積」がサービスの価値となる。
よって一度稼働し始めたサービスに関わると、根幹のアーキテクチャを変えるのは限られた機会となり、多くの仕事は、目の前のちょっとした文字を変更するような仕事になる。
少なくとも最初に書いた画面設計書をずっと使い続けるのは難しい。仕様書のメンテしてる余裕がなくなるぐらい、細かいソースコードの変更が増える。
この仕事を「ただのプログラムを書く仕事」として捉えると、つまらない仕事と思うかもしれない。
過去の「書いてしまったコード」がどんどん増えていく。日常の改善というのは、技術的な挑戦みたいなものとは無縁な「ちょっとしたもの」であることが多い。
ところが、この仕事を「サービスを提供する仕事」として捉えると、「ちょっとした文字の変更」は絶対に必要な仕事だ。
我々はサービスを提供しているのであって、プログラムを提供しているのではない。そこに魅力を見いだしてもらえる人じゃないと、ネットサービスの仕事は退屈だろう。
というのが、冒頭に書いた「この仕事は退屈ですよ?」という意味。
特にエンジニアにとって受託業務は、人月商売という表現もあるが、何故そうなるか?というと「技術を売る仕事」だから、だろう。
受託の良いところは、作る側が最先端な分野を武器として持って、それを売ってくれる素敵な営業と、先進的なお客様のビジネスとが組合わさると、ものすごくファンタスティックな仕事が得られることにある。(固定のアカウントの運用主体で安定的にビジネスしてる受託業務の人はまたちょっと違うのかもしれない。)
それに対して、サービスは、日々の改善活動の結果、そうそう変化させられない部分がどんどん増えて行く。
特に代々、他人から引き継いだコードは難しい。書き手の価値観も違えば、動いてきた歴史もある。何より今のソースコードにお客様が沢山ついている。
いわば、そのネットサービスのソースコードは、元カレの価値観で育ってきた彼女みたいなものだ。あなたが今カレになったとして、では、その彼女の今までの経験や、価値観、性格を自分色に染められるだろうか?
そして彼女には、既にできた人間関係がある。友達や職場、お客さんとの関係が既に存在している。
普通は変えるのは難しい。それは、その彼女が生きてきた人生そのものなので、否定するのはお門違いだし、現実的にはストレスを加えて、喧嘩が起きる。
この経験を過小評価するか、自分の経験を絶対的なものとして過大評価して、彼女の人間改造を行うことがあなたにはできるだろうか?
と、ややこしい言い回しを使ったが、もし、そのコードを大規模に修正したい、という衝動があったとする。基本的にはそれだけでは受け入れられないことだが、それをどうしても変更したいのであれば、
・それがサービスの発展のために不可欠だ、という理由があること。
・その改善を通じて、ビジネスが前に進む前提があること。
そして、
・あなたが最後までケツを拭ける事
(責任を持って、迅速に安定的に、お客様に迷惑をかけないこと)
ここをエンジニアのプライドとして責任を持つ必要がある。
これは根性論の話ではない、いや根性は一番大事だが、ソースコードの書き方や、管理手法、リリースプロセス、トラブルのあった場合の危機管理など、技術で解決する問題とも言える。
元カレ、彼女というメタファで言えば、
「あらゆる手段を講じて、責任持って、人生を引き受けてね!」
ということになる。
と…ここまで保守的なことを長々と書いておいてなんだが、この仕事のややこしいところは、
「とはいえ、変化や進化は必要だ」
だから、進化のために、安定したソースコードを会社都合で危機に陥れることになる。
そこを「慎重かつ大胆に」進めて行く必要がある。
現実的にはソースコードは汚くせざるを得ない方向でサービスは進化していく。
ということなので、
「状況を受け入れる包容力」
と
「変化への力」
の両方が大事。
前者しか持ってないと、ソースコードが汚くなる片棒を担ぐだけだし、後者だけだと、トラブルを起こす。
絶妙に空気を読みつつ、チャレンジして欲しいのが、サービスにおいての技術者、ということになる。
これが「継続的改善」に含まれた現実ということになる。
こういうのが苦手な人は、「技術を売る仕事」の新規開発のサイクルで、常に最先端の技術を活用するというのも一つの生き方だと思う。
#この話、書こうかなぁと思いつつ、書く動機にまでなってなかったんだけど、最近、今後の受託はどうの、という話の流れに触発されて書いてみました。
(なお、マインドスコープ社では、モバツイというネットサービスの成長を一緒に担ってくれるエンジニアを募集しています!)