タオルケット体操

サツバツいんたーねっと

言われた仕事を粛々とこなすか、頼まれてもいないことをやらかすか

まえがき

多分に考えを整理するためのWIP的な性格を持った文章になります。そして長いです。

「1をきいて10をこなす」的な優秀さか、「1をきいて3くらいをこなしながらabcをやらかす」的なはっちゃけか、どっちで生きるべきかみたいなはなしです。


いくつかのチームを抱えているような会社って、横断的なコミュニケーションや情報共有はどうなっているもんなんでしょうか。ウチは皆無です。正確には、同期でたまたま仲がいいだとか、そういった理由での個人的な繋がりはあるのかもしれないんですけど、組織的な風土や取り組みとしては実質的にほぼ皆無だと言って良いとおもいます。

社内の情報共有がない。でもそれで何か問題があるの?

コミュニケーション皆無だろうが、みんなが暗黙知を抱え込んで仕事をしていようが、それでみんなが(本音: 主に僕が)幸せに働けておカネもがっぽがっぽなら言うことないとおもいます。
が、どうにもうまくいっているようには見えません。不満を溜め込んで我慢している人が多いようにも見えます。事実、(多分)空気に耐えかねて辞めたり、異動したり、体調を崩してしまう人もいます。

具体的(卑近)な例としては、うちの製品の性格上、ほぼ必ず各チームで必要になるような'モノ'があるわけなんですが、そこで問題(バグや仕様制限)に突き当たって、解決した時の過程が一切共有されていません。
するとどうなるか、数個あるチームのそれぞれが同じ問題にあたり、それぞれが個別に対応して解決してるわけです。個人的に、最近はなるべく他のチームの人とやりとりをするようにしてて
「一週間前にこんなことがあって、ヤバすぎて解決に3日もかかっちゃったんですよー」
「あーそれうちでもあったわー、半年前にあったわー。アレマジでやばいよねー」
「えっ、何故……それは……(虚脱)」
みたいな、非常にもったいないやりとりがあったりして、これって最高に無駄ですし、改善すべき点じゃないでしょうか。少なくとも僕はどうにかしたいです。
だって世の中の色んな人が、それこそ会社なんて関係ない人達がStack OverflowやQiita、ブログを通じて情報の発信やノウハウの共有をやっているわけじゃないですか*1。それなのにもっと濃い関係性や利害関係を持つはずの同じ会社の人達が何の情報共有もしないとか、ナンセンスを通り越してクソの山であることは小学生だってわかるはずですよ。

もう一個例をあげます。流石にチーム間のやりとりは粗を極めていても、同じ会社の製品なので連携機能はあるわけですし、そのために各製品同士のやりとりは(当然ですが)発生してます。
その中でも中核的な役割を果たす製品(仮にAとします)があったりして、そうすると他のほぼ全ての製品はAとの連携機能の実装を余儀なくされることになります。これはUNIX哲学的な機能実装の作法からいっても、モノを売るためのマーケティング的にいってもまずスタンダードな戦略で、良いことだとおもいます。
が、その連携機能を担うプロトコルを実装する上でのモジュールの共有だとかは一切行われていないようです。それどころか、ドキュメントを含めたノウハウも文書化されていません。それぞれのチームが、それぞれにAのメンバーと連絡して、個別に実装しています(チームごとに違う言語を使っているという問題も関係しているかもしれません)。

それっておかしくないですか? という疑問には「別に一週間もあれば実装できるし」という回答が返ってくるわけですが、一週間で実装した機能のテストが何週間で終わるかは未知数ですし、作った機能は今後保守し続ける必要があります。
弊社ではほとんどの検証作業が手動的に行われている*2ので、新しいリビジョンを出すたびに「リグレッションテストだけで2ヶ月はかかっちゃいますぅ〜〜☆」という言い訳が平気で通用しています。そんな中で、これほどまでに汎用的な機能ですら統一的な実装、仕様が存在しない現状がどれほどの非効率を生んでいるかというのは想像に難くないでしょう。

とまぁ、これらは氷山の一角というか。
僕だけがそう感じてるのかとおもい内外の何人かに色々と話を聞いてみたんですけど、やっぱり「なんか怖い」「なんか閉じてる感じがする」「ギスギスしてる」「雰囲気おかしくね?」みたいな意見をもらった*3んで、まぁ割とそういう感じなんだとおもいます。

逆に言うと、こういう雰囲気なので良くも悪くもスタンドプレーはやりやすいですね。

どういうあがきをしてきたか

入社したては開発部全体のことなんか当然わからないですから、チーム内のノウハウ共有に努めてました。
例えばビルド、デプロイ、(場合によっては)再起動……みたいな手順ですら謎の手順とケースバイケースのバリエーションがあったり*4していて、それらを新人が来るたびに都度質問してメモして、メモを紛失してまた質問して……みたいなことを延々繰り返すのかい? みたいな感じだったのでSphinxを導入して、仕様やロードマップ、開発上のノウハウをドキュメントにまとめるように。みたいなことをコーディングの合間にやってました。
他にもコードレビューまがいのことだったり、汎用的なコードをモジュール化したり……

ここら辺はうまく功を奏してくれたと僕は感じていて、同じチーム内でありながら「自分の仕事が問題なく終わればそれでいい」みたいな空気はやわらぎましたし、お互いのタスクを見てチケットを分担したりするような連帯感も生まれました。
こういう感じでプロジェクトを進めていると「やらされ」感のある仕事は減ってきて精神衛生上も大変よろしい感じです。

そこら辺の経緯は ノウハウの共有文化がない場所にコードレビューをねじ込んでみた結果とか - タオルケット体操 の日記にあったりなかったり。

次のステップ(欲張り)

色々と辛酸を舐めつつも、なんとなくうまくいったら次のステップに進みたくなるのがゲーマーのサガです。
それなりの期間所属して、雰囲気をつかんできたこともあり「そもそも部署自体にコミュニケーションや情報共有の文化が微塵もねぇ!」ということに気がついた僕は、またいらんことを画策しはじめます。

勉強会を始めたのがその発端になっている気がします (社内勉強会をやりはじめたはなし - タオルケット体操)。

入社から携わってきたプロダクトに一切の愛着を持てないことや、延々とレガシーのお守りをすることに嫌気がさしてきたことから「自分で新製品作ってあれこれしちまおう」みたいな気持ちになっていたのも視野が広がった理由の一つだとおもいます。
こんなに人がいるのに、何から何まで独りでやるなんて資金調達がないだけ*5で起業するのとそこまで変わらないじゃないですか。むしろ寄生虫みたいな部署とか、妙なしがらみが邪魔しない分そっちのほうが精神的には伸び伸びできそうです。

僕が会社に行く一番のモチベーションはやはり「独りではできないことが出来る」というところで、プロダクトをリリースしていくというサイクルの中で組織が果たす役割というもののメインはそこに尽きるはずです。
こういったところにこだわるのは、僕が自身の技術に自信を持てていないからだということなのかもしれませんが、僕はリアリストなのでなんの根拠もなしに自信過剰になったりすることはできません(真顔)。

……というようなところもあり、業務の効率化−−ひいてはただただ僕が愉快に暮らすための取り組みをしたいぜ、Slackとかそういうイケてるツールでチーム開発したいぜ! っていう感じなんですよ。わかりますか? わかりますよね。

現在の悩み

僕なんかがここまでする必要、権利はあるの?

そこでタイトルにもなっている"悩み"に行き着くわけなんですけども、まず一番先に思い至ったのがこれですね。

僕は役職もないし、なんなら経歴も短いし、責任もとれないし、そして組織のために云々いうほどのお金ももらってないわけです。「若い時の苦労は買ってでもしろ」なんて言葉は、老人が若者を体のいい奴隷にするときに使う言葉なわけで、あまり真に受けすぎてはいけません。
また、社員の一人一人が会社の運営に対する意識をもってどーのーこーのといったことを言うよくわからんお偉いさんもいますが、数人規模の会社ならともかく、数百人の人間が船頭になったら船は天に昇ってしまいます。そもそもそんなことを言うなら部署や役職といった概念そのものをひっくり返してから言えという話で、組織の仕組みが旧態依然としている以上、ある程度分業的な運営をせざるをえないわけです。

少し脇道にそれましたが、まとめると「そこまではやる義務も義理もねぇ」ということですね。
これに関しては今でも悩まないわけではないんですが、「僕がやりたいことをよかれとやってるんだからそれでいい。非効率なやり方で我慢はできない」「ボトムアップの種は撒いておいて、後の判断は偉い人に任せればいい」みたいな考え方に落ち着いています。
こうやって文字に起こしてみると、えらい不遜かつ傲慢な野郎だなとおもいます。ですが傲慢はプログラマーの美徳の一つらしいですので、いまさら改める必要はなさそうです。

話が大きくなりつつある

次に、今(僕の中で)大問題になっているのがこれです。

今までのところはチームといってもたかだか3〜5人程度の人間しかいないところであれこれしていたので、多少の無理も通ったわけですが最近はそうもいかなくなってきました。
勉強会までなら「意識の高いワカモノ」みたいな形で生温かく見守っててもらっていた感があるわけなんですが「もうメールで消耗したくないし、せっかくだから他の部署を巻き込んで俺はこのSlackを使うぜ!」とか、「この腐りきった作業手順書(ですらない)を浄化して、私がCIの火を灯すのだ……などとやっていると段々と軋轢が生じてくるわけです。コンプライアンスとか、面子とか、惰性とか、そういったあれこれですね。

僕はいわゆる大量のMPを消費してなんとか健常っぽいコミュニケーションをとるタイプのコミュ障なので、ここら辺の政治っぽいところに話が及ぶに当たって完全に燃え尽きつつあります。
上司の顔色を伺って我慢して仕事する、なんていう謙虚(笑)な姿勢は皆無ですけども、とはいえ誰も求めていないことをわざわざして平和な空気をぶち壊しにして、上司の評価(おちんぎんと読む)を下げてまで活動できるほど僕の面の皮は厚くないようです。
「ブルドーザーのように瓦礫をかきわけつつ、ドッカンドッカン売れるサービスを作って皆を黙らせる」ような理想的剛腕の持ち主なら何も問題がないんでしょうけども、僕にはきっとそこまでの能力はありませんしあんまりやりたくありません。だって毎日定時には帰りたいし、帰ったら本を読んだりスプラトゥーンやったりしたいもん。イーロン・マスクがなんと言おうと週100時間も働くのは無理です(甘え)。

そろそろただの愚痴になりそうなんで切り上げますが、要するに「社会的状況」ってやつが辛いわけです。そもそも自分がやっていることが本当に理にかなったことなのか、世間がいう「イカしたチーム開発」なんて投げ捨てて、独りで全部抱えてやるのが本当は一番良いんじゃないか……。確信のない状態で社会的状況に争うなんて不可能です。

というか僕は気がついてしまったのかもしれないんですが、もしかしてみんな(現状に耐性のある人たち)はこの「干渉してこないならお互い無関心でOK」「やりたいことだけしてればいい」あるいは「言われたことをしれてればよい」みたいな空気が心地よいわけで、飲み会でいきおい愚痴は言っても、本当にそれが変わることは望んでいないんじゃないのかもしれません。だとしたら、僕はそんな言葉を真に受けていらんことをしている空気の読めないアホなのかもしれません。まぁ空気の読めないアホであることは確かだとおもいますが。

今後どうするべきか

いずれにせよ、すでに行った試み自体は全て順調に行っているわけですし、2015年にもなってメールだけで業務連絡だなんだとやって消耗するのは絶対に嫌なのでそこら辺は継続していきますけども、そろそろこういった口出しはお仕舞いかなぁというのがこの日記を書いていて見えてきた、僕の本音なのかもしれません。

こういうのはもっと、経験と能力と、なによりも権限のある人がやるべきことで、僕みたいな半端モノがやるべきことではないんだとおもいます。組織に属する以上、その基本方針には従うべきだというのが僕の考え方*6ですから。
「一社員の頑張りが会社をかえた! スゴイヤッター!」みたいな美談は時々耳にします。でも、リクルートやサイバーエージェントみたいな風土のある会社ならともかく、口先ではどうあれ社員には第一に従順さを求めるような会社で平がそこまでするのって道義に反さない? っておもってしまいますが、実際のところはどうなんですかね。

課題発見! 自発的に動く! みたいなのって美談として語られますけど、実際にやってみてそこまで求められている感じがしねぇなというか、すごい危ういことをしているんじゃないかという気持ちが強かったです。
これは僕が能力不足なのかもしれませんけど、何かを変えようとして10個新しいことをやったら8個は失敗するのって当然じゃないですか。当然だと僕は思っているんですけど、でもそういう1個の失敗ですら許容できない組織というのは多くて、そういうところで「いや俺は正しいことをしているんだ」みたいなノリでやっててもお前ふざけんなってなるのが目に見えている。
こういうことは、普通にやってたら普通に潰れるベンチャー企業ならともかく、普通にやってても最悪でゾンビ化はできるような規模の会社でやることじゃあないんだなという現実を見ましたね。つまんないですけど。

なので、別に今までもそれほど疎かにしていたつもりはないんですけども、わざわざ求められてもいないマネジメントの真似事をするよりは真面目にプログラマーとしての本分を全うすべきなのかなーと。僕としても、ある程度の不満を割り切ってしまえばその方が楽ですし。
やりたいことは色々ありますが、「それはお前の仕事じゃないだろ」と言われればそれはその通りなわけで、妙にひっかきまわすのは良くないことなのかもしれません。それに僕個人としては本業もそれなりにこなしていたつもりなんですが、もっと上の人から見たら気もそぞろ、ペースも落としがちだったという可能性は多いにあります。

結論として、今までやってきたことが失敗だったとか不要だったとは微塵もおもわないけども、今はまだ組織として求められるポジションをこなす方がプロフェッショナルっぽくて良いんじゃね? ということなんだとおもいます。
僕のことなのでまたそのうちに違うことを考えるかもしれませんし、別の組織に属している可能性も高いですので、あくまで暫定的な結論となりますが。

ブログに書くことでかなり考えがまとまってきたような気もしますが、まだ迷いが残っているような気もします。意見とか、参考になりそうな書籍や記事とかを教えてくれる人がいたら嬉しいですね。


補足

なんかカイシャの悪いことばっかり書いてしまってますけども、うちの会社はそれほど悪いところじゃないです。そもそも僕みたいな経験の浅いペーペーが勝手に夜の会議室を借りて勉強会を開いて良かったり、上に書いたようなアレコレを出来たりする程度には個々人の裁量があります。前時代的な体制が生き残っていたりもしますが、裁量がある分だけ人によっては社会実験場的な面白さを見出すこともできるかもしれません。
無意味に官僚的だったり、融通がきかない箇所があったりもしますけど、腕力にモノを言わせて攻撃すればなんとかなりそうな雰囲気もあります。
きちんと筋を通してやることをやってから言うことを言えば、割と要望が通ったりします。

勤務体系もそれほど煩いことは謂れませんし、有給もとりやすいです。上司も優しい人ばかりです。でも金払いは悪いです。
そもそも、よくも悪くもユルめな居心地の良さがなければ僕みたいな根性なしが3年間も勤める*7のは不可能なはずです。

というわけでなんとなくアンタの会社に興味をもったぜ、という奇特な方がいたらお酒をおごってください。

以上!

*1:プログラマーならどれも一度となくお世話になったはずです

*2:自発的に自動化しているチームもあるけど、少数派

*3:もちろんそうじゃない意見もありました

*4:それでも僕が入社する前にかなり改善したみたいですが

*5:そこの違いは大きいとはおもいますけど

*6:ほんとですよ!

*7:気がついたら3年目かよの絶望感