Unlearning The Dream Job

滞っているコードレビューやメールの返事を nudge するのが妙に苦手だ。これは言語バリアのせいであったり我が身を振り返ったときのバツの悪さのせいもあるけれど、それ以外に WebKit 仕事をやっていたときに染み付いた感覚が抜けてないせいもある気がする。

WebKit のコードレビューツールにはレビュアを指名する仕組みもないし、従って各人の pending review list のようなものもなかった(当時; 今はしらない。)そして開発者には contributor, committer, reviewer という階級があり、コードを approve できるのは reviewer だけである。そして WebKit は Apple が own するプロジェクトであり、しかも自分の勤務先、特に自分がやっていたプロジェクトとは割と意向が一致しなかったりした。

この舞台設定は会社員がやる普通のソフトウェア開発とはだいぶ違う。たとえば自分の勤務先だとコードレビューはレビュアを指定する。レビュアはダッシュボードで pending review のリストを見て、対応が必要なものをこなしていく。プログラマの間に階層はない、というと厳密には語弊があるが、まあチームの人は基本的にみなコードレビューを approve できる。

コードの owner すなわちチームの意向に反するコードをなんとかして突っ込む、みたいな場面もない。もちろん時折何らかの controversial な変更はあるが、そういうのは事前に適当にドキュメント書いたり話をつけたりするものである。仕事でプロジェクトの意向にあわないコードを書くとかわけがわからない。

WebKit の仕事をしていたとき、コードレビューが一週間放置されるとかは普通のことだった。レビューで仕事がブロックするとやることがなくなるので、仕方なく本題でないコードを書いたりする。重要なものから余興までいくつも並列にレビューをだし、返事が来たものを対応する。レイテンシを並列性で隠してスループットを稼ぐ働き方をしていた。コンテクストスイッチしまくり。

ふつうの会社員プログラミングでレビューが滞ったらどうするか。まあレビュアに催促するよね。相手が忙しそうなら別のレビュアに頼む。タイムゾーンの問題がないならレビューは遅くとも一日以内に帰ってきてほしい。レビューを催促するのも、催促されたらさっさと応じるのも、仕事のうちと言える。

翻って WebKit のときのことを考えるに、自分はしばしば Apple のひとにレビューをしてほしかったわけだが、まずシステムとしてレビューをたのむことはできなかった。だからレビューが単に気づいているのか、忙しいのか、気に入らないから無視されているのか、判断できない。メールなどで頼むことも理論上はできるが、そもそも Apple のひとには自分のコードをレビューする義務はない。オープンソース・プロジェクトのボランティアとして付き合っているに過ぎない。一方で自分はフルタイムで働いており、それなりにコードを書く。ボランティアのスループットで足りるはずがない。

しかも自分たちのやっていたプロジェクトは、あからさまに Apple から嫌がられていた。プロジェクト・オーナーの権力をもって提案段階でその仕事を却下することもできたはずだが、そのへんはオープンソース・プロジェクトとしての体面や倫理や義理のようなもので黙認していた。しかしその後には passive aggression が続いた。これは自分たちにとっては不都合だったけど、今思うと当たり前の対応だよな、というか、むしろ断らなかっただけえらいとすら言える。


放置がデフォルトのコードレビューでプロジェクト・オーナーの嫌がる仕事を 3 年も続けると、生産性は完全に破壊される。

・・・というと WebKit あるいは Chrome が悪いみたいだけれど、別にそういう話ではないのだよね。強いて言えば関係が良くなかっただけで、特定の誰かが悪いという話ではない。問題は自分がプロジェクトの歪みを常態として absorb してしまったことだと思う。

思い返せば、自分にとって Chrome のために WebKit のコードを書くのは Dream Job であった。時は 2010 年、その勢いが頂点に届こうとする米国資本のハイテク企業に入って、給料をいっぱいもらい三食タダ飯食いつつウェブブラウザのような人々が毎日使うプロジェクトのためにオープンソースでコードを書く。いいじゃん!

・・・と思うがゆえに自分はそのプロジェクトのあり方を無批判に受け入れ、働き方や価値観をその異常な世界に最適化してしまった。

隣接する Chrome のエンジニアリングが極めてまともだったのも目くらましになった。そうしたまともな組織の umbrella に入っていると、自分のやっている仕事もまともな気がしてしまう。しかし自分の仕事環境はそうしたまともなエンジニアリングの世界の中でプロダクトの ambition と世間 (よそのオープンソースプロジェクト, ウェブ標準) の摩擦が集中する特異点のようなもので、そのしわ寄せが突出した仕事の進まなさだった。

自分は Web Components の ambition は価値のあるものだと思っていたし、その大変さはいつか pay off すると信じていたし、今でも信じている。ただその大変さ、すなわち当たり前のように仕事が進まないという事実、がプログラマとしての自分にもたらす影響、すなわち仕事の進まなさへの適応、に自覚的であるべきだったのだろうなあ。

摩擦の帰結として Blink がフォークしたあと、多くの同僚たちは水を得た魚のようにコードを書き出したが、自分はダメだった。別のプロジェクトに移ってみたけれどそこでもレビューを催促できずに滞りまくり、仕事の進まなさへの適応を強めてしまった。

Chrome をやめて小さめの Android のアプリ仕事にいってからは、ふつうにさくさくとレビューしてくれるチームメイトに恵まれてそういう問題はなくなったが、それでもマネージャに flag flip を頼むのが遅れてしまったり、そうでなくともこう、ゴールに向けてガシガシとコードを書く働き方ができず、あれこれ散漫に手を出して中途半端な成果しか出なかった。そしてまたチームをうつったはて評価減に至った。


どうも人に何かを頼むのが苦手だなとは感じていたし、どうしても集中して仕事を前に進めることができないなと思っていたけれど、その理由についてはいまいち思い至っていなかった。でもよく考えると、それは歪んだ働き方への適応の成れの果てだった・・・というと人のせいみたいだけれども、要するにサボりが板についてしまった。

いま我に返って自身を鑑みると、自分はこの会社のなかでどうやって効率よく仕事を進めればいいのか全然わからない。そして以前の職場で効率よ・・・かったかはさておきそれなりにガツガツと仕事を進めていた頃の感覚もすっかり忘れてしまった。

一方で、自分の本業の傍ら関係あるようなないようなコードを細々書いたり読んだりする楽しみや、そうした余興やボランティアが生み出す(かもしれない)発見や発明の価値については、驚くほど深く理解している気がしているし、その良さを信じてもいる。

でもこの価値観は、自分の非生産的態度の隠れ蓑になってしまったようにも思える。本業をきちんとこなた上の余興ではなく、進まない本業からの逃避としての余興にすっかり適応してしまった。

今のチームは締め切りとかがそれなりにタイトで、脇道症候群になった自分にとっては息苦しい部分もあった。悪い仕事ではないが Dream Job という感じでもない。でも結果として自分が Dream Job を通じて抱えてしまった歪みを照らしだしてくれた。

プロジェクトの余裕や柔軟さ、チームの実験精神やボトムアップな取り組みからうまれる諸々の良さについては今でも信じている。でもそれを無批判に受け入れるのではなく、一旦捨た上でよく調べて拾い直す必要があるのだろう。

でも一旦捨ててしまうと自分の手元には何も残らず、どうしていいかわからない。なんていうか途方にくれる。うっすらと見に覚えのある感覚

まあ、ぼちぼちやっていきます。