commmune Engineer Blog

コミューンではたらくスタッフにフォーカスした次世代型エンジニアブログです

CTOのポエム

f:id:commmune_yamamoto:20201125090651p:plain

エンジニアのチームビルディング、チームマネジメントの際に私が徹底している10の項目です。これを守れば誰でもいいチームが作れます。

鶏を割くに焉んぞ牛刀を用いん

簡単なことをやるのに必要以上の複雑さを持ち込むのは「害」です。これはある種、美学の話かもしれません。

この心得の真意は「余分なものを削ぎ落とした美」を追求することです。勘違いして頂きたくないのは「最低限動く実装でよい」「継接ぎのコーディングで良い」などという意味ではありません。名著リーダブルコードの原点「読み手が最短時間で理解できる」実装がやはり理想なのです。

キャッシュは伝家の宝刀

今のcommmuneはフロントエンドがかなりステートレスに近い構造になっています。 パフォーマンスをある程度犠牲にしてバグの少なさを優先している。という見方も可能です。

例えばページ遷移の際はstoreにデータがあろうが無かろうが、必ず最新の情報をfetchしなおしています。また、API通信のレスポンスも一切ブラウザキャッシュに乗せておらず常に200でデータを返しています。

この辺りは安定性(バグの少なさ)をより重視するという、現在の技術的な戦略故です。 「キャッシュは麻薬」というのは言いすぎですが、安易にキャッシュを導入してパフォーマンスアップを狙うのは木を見て森を見ずに繋がりやすいですし、本当のボトルネックを隠蔽する危険もあるので意識的に避けています。

良いチームは良い礼儀からはじまる

廊下ですれ違うときは「お疲れ様です」。朝顔を合わせたら「おはようございます」。帰宅する際は「お先に失礼します」。挨拶は基本、古事記にも書いてある。

冗談ではなく挨拶はチームの雰囲気を変えます。皆が挨拶できるチームは明朗で、誰も挨拶をしないチームは陰鬱です。小学校で習ったはずなのに大人になるとやらなくなってしまう。躊躇してしまう。だからこそ少し勇気を出して自分から発声しましょう。

できることではなく、やるべきことをやる

私たちは常に「やるべきこと」にフォーカスする必要があります。私たちには「できること」がたくさんあります。「好きなこと」もたくさんあります。しかしそれらと「本当にやるべきこと」が常に一致するとは限りません。ときに、あまり気が進まない瞬間もあるでしょう。それでもすべては「最高のプロダクトをつくる」ために、やるべきことをコツコツと積み重ねましょう。

すべてのエンジニアはクリエイターでありテスターである

実機で確認するまでがプロの仕事です。どうか念入りにローカル環境で動作チェックをしてください。

リモートだからこそ意思疎通は厳密に行う

「3分の1」と「30%」は別物です。エンジニアには非同期コミュニケーションの機会がしばしばあります。そんなときは「齟齬を生まない」言葉遣い、単語、文章を是非使いましょう。

ボーイスカウトルールを実践する

有名な言葉なのでご存知の方も多いでしょう。ここでは少し違った視点から見てみます。

日々の業務では、膨大な量のタスクを決められた期限内に終わらせなければなりません。エンジニアの宿命とも言えましょう。そのプレッシャー、ストレスは甚大なものです。そんな状況に追われていると、しばしば悪魔の囁きが聞こえることはありませんか。「…動けばいいんだ……お前だけが読めればいいんだよ……あとできっと誰かが綺麗にするさ…」と。

打ち勝つのです。その誘惑に負けてはなりません。あなたの心には「ボーイスカウトルール」が宿っています。それは「来たときよりも美しく」の精神です。これを実践するのに数十分、いや数時間ほど余計な時間がかかるかもしれません。大いに受け入れましょう。あなたのその美徳が、他のメンバーの数十時間を節約し、他のメンバーはあなたに感謝と尊敬の眼差しを向けるはずです。少なくとも私はそう信じているし、あなたにもそう信じてもらいたいのです。

率直さと思いやりを両立させる

スピーディでロスの少ない意思疎通が開発を成功へ導きます。ときとして意見が合わず議論、あるいは喧嘩の一歩手前になってしまうこともあるでしょう。そんなとき、感情を爆発させる前にこの心得を思い出してください。

私たちは常に「問題」そのものに向き合う必要があり、「人格」「人間性」に焦点を当てることは許されていません。

中庸なれ

「コードにはコメントをたくさん書こう」と言われて3行ごとにコメントを書くと「考えなしだ」と見られます。
「ググってから人に聞こう」と言われて1日中検索していると「仕事ができないやつだ」と思われます。
「15分考えてわからなければ人に聞こう」と言われて1日に30回質問したら「人の時間を奪うやつだ」と評価されます。
「質問には簡潔に答えよ」と言われて全ての返答が一言だと「言葉足らず」になります。
「意見があればどんどん言おう」と言われて気になること全てにツッコミを入れたら「筋が悪いな」です。

あらゆることは「0」「1」ではなく、その間のどこかに最適なバランスが存在します。
答えなき均衡点を追い求めることで、私たちはより本質に近づけるのです。

「すごい技術」に人は感動しない。「すごいプロダクト」に人は惹かれる

私は技術を貶めたり蔑ろにしたりするつもりはありません。むしろエンジニアとして技術の刃を日々磨くことは必須であり、称賛されるべきと思います。ここで言いたいのは「ユーザが体感し評価するのは技術そのものではなく、結晶としてのプロダクトである」ということです。

誤解を恐れずに言えば、技術は「縁の下の力持ち」であるべきです。質の高いプロダクト(その体験)を裏でガッシリ支える、献身的な存在であってほしいと思います。

「すごい技術」の典型例の1つは「VR(仮想現実)」かもしれません。
2016年辺りから「VR」という言葉がセンセーショナルに巷に広まりました。あのゴツい(?)見た目も相まって「今までにない没入感の高さを味わえる」と、その技術自体のすごさが喧伝され、プロダクト(体験)が洗練される前に世の中の期待が先走ってしまったように感じます。例えば「遂にゲームの世界に入り込むことができるようになった」「自宅にいながら宇宙旅行を体験できる」「引っ越しの内見はもはや必要なくなる」などなど人々は大いに夢を見ました。

しかしご覧の通り、今までのところ広く普及するには及びません。実際に体感した方の多くは「まあ、こんなもんかな」程度の感想を内心抱いたのではないでしょうか。何を隠そう私もその一人です。360度のディスプレイ、高い没入感、など技術自体の新奇性は素晴らしいでしょう。しかし、ユーザーはシビアです。「なんか心地よくないな」「なんか頭熱いし目も疲れるわ…」と少しでも感じたなら、2度目はありません。

この経験から、人々が望んでいるのは「すごいプロダクト」であり、決して「すごい技術」ではないのだな、と痛感したのです。commmuneにおいても同じ轍を踏まぬよう、心して取り組みたいです。