トークノートの藤井です。CTOをやってます。
年齢をカミングアウトするときは16進数でいう癖があります。つまり0x2A歳です。後厄です。
開発チームのミッションは文字通り製品を開発し、顧客へ価値を届けることです。
製品はまた逆説的に、それを生み出す開発チームのみならず製品に関わる企業内のすべての組織や活動、コミュニケーションの構造を写し鏡のように反映してそこに存在すると考えることができます。
私たちは”いい会社をつくる”ための社内SNSを開発していますが、製品として今後も継続的に成長するためには様々な変革を必要とする局面にあります。それはつまり、開発チームを変革していくということに他なりません。
そんな私たちトークノートの開発チームの現在と今後の展望について、Wantedlyのブログでざっくばらんに、ちょくちょく書いていくつもりです。
まずはこの前、2日間にわたって行った弊社の開発合宿について。
合宿は2017年5月の初回から二年連続での開催となったのですが、個人的には感慨もひとしお。なにしろ前回の開催時はエンジニアの数は6名(うち、新卒エンジニアが2名)。
(こちらは当時の写真。場所は三浦海岸。ファシリテーターを務めてくれたメンバーも入れて計7名います。一番右のナイスミドルが私です)
私一人が40代のおじさんエンジニアで、他のメンバーの年齢が23~29という若い方々に囲まれて、一人でエンジニア平均年齢を引き上げている肩身の狭さと言ったら。
ちなみに、前回合宿前はエンジニアの半数が離職するという暗黒イベントがあり、個人的にも組織的にも辛い局面でありました。そして、それこそもう一度ゼロからチームを立て直すつもりで、それ以前からずっと行きたいと願いながら行かずじまいだった合宿を決行。これから自分たちでどんなチームを作り出したいか、どんなエンジニアになっていきたいかを皆で徹底的に話し合ったりしたのですが、それから早1年。
今年は前年の倍以上、13名(エンジニア12名+プランナー1名)で合宿に参加することができ、年齢層も20代が6名、30代が6名というバランスの良い構成。(依然とした40代1名の肩身の狭さはさておき) しかも内1名は女性エンジニアという豪華さ。いやー、ダイバーシティって本当にいいものですね。
(今年も場所は三浦海岸。お天気にも恵まれて最高のロケーションになりました)
今回の合宿の主な目的は、二点ありました。
- ゼロベース、ノーコンテキストでの開発学習
- 日常よりも深い対話と、クリーン・ランゲージの実験的導入
ひとつめは、特に若手のメンバーにTalknote以外の開発を経験してもらうことを目的としています。
自社サービスを長く続けていると、現在の製品やシステムでのコンテキストに大きく依存した開発がどうしてもメインになっていきます。
Talknoteという製品もまたご多分にもれず技術的負債を抱えておりますし、初期開発時の設計を引きずり、現在の要件からすれば最適解とは言い難い回避的な設計や実装を強いられるケースが少なからずあります。
そのため、本来であれば採用すべき設計や実装の方法を学ぶ機会を提供できなかったり、あくまで暫定対処的な実装を唯一の解決策のように取り扱ってしまうような誤解を与えてしまう危険があり、健全な開発組織を発展させる上での阻害要因となっていました。
こういった問題は現在進めている基盤移行開発(PHP + Zend Framework => Kotlin + Spring Boot)によって将来的には削減できる見込みですが、移行完了までにはそれなりに期間を要するため、まずは合宿で学習機会を提供しようと考えた次第です。
今回の課題、それはズバリ家計簿。
なんでやねん、という感じですが、今回の目的はできるだけノーコンテキストで開発をすることなので、Talknoteとはまったくの無関係で、かつ、それなりに複雑度が要求され、かつ、単語を聞いただけで「あーあんな感じか」と皆の頭に思い浮かべられるもの、という基準で考えたらそんなに選択肢は多くはないのですよね。
また、利用可能な技術にも制限を設けました。
使って良い技術: PHP 7.2、HTML、JavaScript、nginx
肝は、その他のライブラリやフレームワークの利用は一切禁止、という点です。ゼロベースからの開発を体験してもらうことで、その際に発生する様々な課題を自分の頭でひとつひとつ試行錯誤しながら解決していく、そんな開発そのものの醍醐味を味わってもらいたいと考えたのでした。
(砂浜で開発するメンバー。MBPに砂が入らんのか・・・)
(あるいは、近くのマックで缶詰になる人も)
合宿の目的のふたつめは、日頃なかなか話し合えないテーマについて皆でゆっくりと時間をかけて話し合うことです。 今回選んだテーマは組織や採用、そして私たちの製品戦略についてでした。
また、変わったところでは今回の合宿では、クリーン・ランゲージという手法を実験的に取り入れてみました。
これは、対話の際に先入観による決めつけや誘導を排除して相手の情報を汚さない(=クリーンな)質問と、認知論的なメタファーを使い、相手の現実の捉え方を明らかにするという手法で、元々は1980年代に開発されたトラウマ治療のための技法をベースに発展したものです。
たとえば、今回の合宿では各メンバーにこんな質問に答えてもらいました。
「もしも開発チームがあなたにとってもっとも思うとおりになるとき、それはなんのようですか?」
「そんな状態のとき、あなたはなんのようですか?」
この「なんのよう?」という質問に対して、隠喩(メタファー)で回答してもらうのですが、やってみるとわかりますが、これが慣れないとなかなかに難しい。
ちなみに、そのとき共有されたイメージのいくつかを抜粋するとこんな感じ。
貿易船に乗っているメンバーたち。 自分のやれる役割を精一杯やりながら、船を沈ませることなく、国や世界をより豊かにするためにみんなで協力して貿易の品を運ぶ感じ。 私は船を動かすために燃料を入れたりしてる。でも時々大事な決断をしてる感じ。
ピタゴラスイッチです。 色々なサイズの様々な素材が最後のピタゴラスイッチの旗をあげるために、自分のできる動きを実施します。 自分はその中の一つの素材です。
戦国時代の山賊のようなもの。そのなかで私は次の目的地へ向かう手段を検討したり、獲物の管理分配を行う後方支援の役割のようなもの。
これだけ見ても、メンバーのそれぞれが開発という仕事に対して、さまざまなイメージを持ち、また役割を意識していることがわかります。
(合宿二日目、私が製品戦略を説明しているところ)
どうして、こんなまわりくどいことをするのか?
それはチームに対する理想状態についてお互いにより深く対話が行えるようにするためです。
たとえば「強い開発チームを作る」といった理想状態を言葉で定義することは簡単です。
しかし、言葉は本質的に多義性を備えているので、だからこそ各個人ごとに解釈の余地が生まれるし、ディスコミュニケーションの原因にもなります。それよりも、こういった各人がもっているイメージの違い、そこに込められている感情や願望の違いを明らかにした上で、あらためてお互いに興味・関心を寄せながらコミュニケーションを取った方がはるかに有意義だし、良いチームを作ることに貢献するのではないかと考えたのでした。
(夜、皆で飲んでいるときの様子。何について話して笑っていたか、もう思い出せない(汗))
私もクリーン・ランゲージは簡単な手ほどきを受けただけだったので、今回はテスト的な導入にすぎませんでしたが、私たちトークノートの事業領域はまさに組織内のコミュニケーションを中心に捉えているので、今後もこういった取り組みを強化していきたいと考えています。
今回、反省点としては二日間ではまるで時間が足りなかったな、ということ。開発をするにしても、お互いにより深くコミュニケーションをとるにもやはりそれなりに時間を要するので、次回開催への学びに変えていきたいところです。
(今回の合宿を終えた後に撮影した記念写真)
また来年、仲間と合宿に行くときは、どんなチームになっているのか、どんな人たちがそこにいて、どんな想いで言葉を発し、日々の仕事をしているのか、そんなことを想像していると今からわずかに胸が高鳴る気がします。
最後に、私の開発チームに対する理想イメージを紹介します。
この地上のどこかにある広大で豊かなジャングル。いろいろな技や戦略で日々を全力で生きている様々な動物たちがいる。 その中の私は、木々の間を自由に飛び回っている、古くて賢い一匹の猿。
Enjoy!