QiitaやKobitoを作る開発チームの文化

こんにちは,icon_small.jpgyaottiです.
今日はQiitaQiita:Team, Kobitoを開発するチームでぼくたちがどういう文化,価値観を大切にしているかをお話したいと思います.

qiita-logo-lectangle.pngKobito.png

HRT, SPOF, Lean

Increments(あまり知られていませんが,Qiitaを作っている会社の社名です)の開発チームが特に大切にしているのは以下の3つです.

  • HRTを大切にしたコミュニケーション
  • 属人性を極限まで排除する
  • 重要な価値に集中する

以降でそれぞれ具体的に見ていきます.

HRTを大切にしたコミュニケーション

HRTとは

HRTとはTeam Geek ―Googleのギークたちはいかにしてチームを作るのかという本にある考え方で(あらゆるチーム開発者に読んでほしい!),Humility(謙遜), Respect(尊敬), Trust(信頼)の3つを意味しています.
「驕り高ぶらないようにしよう」「相手を尊敬しよう」「人を信頼してまかせよう」といったHRTの概念は以前よりチーム内で無意識に尊重されていましたが,「HRTを大事にしよう」と明文化してわかったのは「当たり前だと感じる!=十分実践できている」ということでした.

例えばチャットやgithub上のオンラインコミュニケーションでは,感情面の情報が大きく欠落するため少しずれた形で伝わってしまうこともよくあります.(質問しているつもりが問い詰めているように感じられる,ちょっとした指摘が想定以上に厳しく受け止められてしまう,など)
こうした問題はIncrementsではHRTを意識することで避けられるようになりました.例えば

  • オンラインでは直接口頭で話すとき以上に言葉遣いを丁寧にする
  • コードレビューはあくまでコードを批判しているのであって,書き手を批判しているととらわれないように注意する
  • 絵文字や画像を積極的に使う

どれもささいなことですが,Incrementsではオンラインでの文章のやりとりが多いため積み重なると大きな違いになっていきます.

ちなみに弊社ではチャットに’misawa’と書くとミサワ画像をランダムに貼ってくれる便利なbotがいます.

kobito.1390977573.398717.png

仕事以外のコミュニケーション

日中はどうしてもそれぞれが全力で仕事に集中し,オンラインコミュニケーションばかりになるため仕事以外の話をするタイミングがあまりありません.そのためざっくばらんにゆるく話せる機会を作っています.
例えば毎月一回締め会として皆でおいしいものを食べにいったり(今月(今日)はジンギスカン),社員の持ち回りで3時のおやつを買ってきたり(#incrementsweets),週末にTGIFとしてピザやYEBISUビールを楽しみながら色々話しています.

属人性を減らす

開発の現場では「属人性を減らしてSPOF(単一障害点)を無くそう」とよく言われますが,Incrementsではそれを徹底して行っています.なぜ重視にしているかは後述しますが,主に2つの観点から日々改善しています.

  • 作業の自動化
  • 情報の透明性向上

作業の自動化

  • 開発マシンの初期セットアップはboxenによってコマンド1発でできる
  • サーバー環境の構築はchef-solo
  • 小さい所では数値集計やインフラ面のちょっとした作業

Incrementsではこのように様々なレイヤーで自動化を推し進めています.
繰り返し作業の自動化は重要度が高くとも緊急度は低く,また短期的にはコストが上がるため後回しにしがちです.しかし多くのケースでは,半年や1年スパンで十分コストに見あうメリットが享受できるため,自動化したほうがよさそうな作業は面倒くさがらずに自動化しています.自動化によって以下のような利点があると感じています.

  • 短縮して浮いた時間をほかのより重要な仕事に割ける
    • ユーザーヒアリング,設計など自動化できない創造的な仕事に集中する
  • ヒューマンエラー起因でのミスを無くせる
  • 自動化してコードに落ちると作業が可視化されるため,作業フローを改善しやすい
    • chef化はこれが大きい

情報の透明性向上

特定の人やグループしか知らない情報は出来る限り減らすというのも気を遣っている点の1つです.そのための特徴としては

  • 見にいけば見られる場所に情報を置いていき,必要に応じて特定の人(達)にpushする
    • ミーティングの議事録はもちろん,ちょっと口頭で話したようなことも価値がありそうならきちんと残す
  • 困ったことはデイリースクラム(朝会)や日報などでこまめに共有し,チームで解決していく
  • 共有(アウトプット)のコストを下げるために適切なツールを使い分ける
    • Trello(非開発タスク)とPivotal Tracker(開発タスク)でいまやっているタスクとそのログをゆるく共有
    • Kobitoを使って手元で書き,Qiita:Teamへかんたんに共有(手前味噌ですが:P)
    • 様々なサービスのアクティビティをHipChatに集約
    • 社内の人同士でメールは全く使わない

Incrementsでの情報共有は少人数だとはいえ今のところかなりうまく周っているし,スケールする形だと思うのでしばらくはこのままいけそうかなと感じています.ただ将来remote workできるようにしたり(積極的にやっていきたい),人数規模が大きくなってくると色々努力は必要そうです.
先日のGitHub Drinkup Tokyoで,最近入社された@diceさんの話を聞いた感想:

重要な価値に集中する

大人数で開発できる場合やサービスが十分習熟しているならば「あると良いかもしれない」機能を作る余裕もあるかもしれませんが,Incrementsの場合はまだまだそんなレベルではないので「本当に必要かどうか」考えることをとても大事にしています.
具体的な方法としてはCookpadの開発フローをとても参考にしていて,実装する前に価値仮説を立てて課題を明確にすることに時間をかけています.
ただ,使ってみないと価値があるかわからない確実に必要だと思ったものはすぐにプロトタイプで作ってスタッフ限定でリリースしたり,一部のユーザーの方に触ってもらいフィードバックをもらったりしています.

最後に

現在Incrementsでは,こうした価値観や文化でQiitaやQiita:Teamを一緒に開発にしたいエンジニアの方を募集しています.興味のある方は一度会って開発フローや文化など,色々お話しましょう!
support@qiita.comもしくは@yaotti(twitter,facebook)までご連絡を!

その他,Qiitaの開発チーム文化について