スクール事務局サービスである「サイタ」において、どのようにしてエンジニア以外のスタッフを「サービス開発者」に巻き込んでいったか 、という話をします。
なお、ここでいう「サービス開発者」とは、必ずしもプログラミングできる開発者のことを指してはいません。日々生まれ続ける事業データを見つめ、新たな仮説と切り口とたて、業務改善やシステム仕様変更提案や開発プロジェクト起案、遂行管理を担当する、必要とあらば自らできる範囲で手を動かすことのできるメンバのことを言います。
現在、サイタでは、「エンジニア」でないポジション(マーケティングやユーザサポートなど)で join した約15名のうち、半数以上が SQL を記述/運用し、サービス開発や業務改善に役立てています。また、簡単な修正であれば Pull Request まで送ってくるスタッフが4名居ます。
先日、「ユーザ側の『ITイノベーター』こそ、急いで育成するべきだ 」という記事が話題になっていました。この記事では、「ユーザ側におけるITの教育が不足している」ことを指摘していますが、私たちの取り組みは、ユーザ(業務部門)側でのIT教育(「教育」というとおこがましいのですが)を定着させる活動 だったとも言えます。
2年ほどの取り組みを振り返ってお話してみますので、ひとつの事例として、参考になるところがあれば幸いです。
チームの名前を変えた 私がサイタを運営しているコーチ・ユナイテッド社に参加したとき、エンジニアチームは “Dev” チームと呼ばれていました。まずは、これを “Tech” チームと改め ました。
その経緯は、サイタの現場に参加してみて、「Development = 開発という営みは、エンジニアだけの特権ではない」と強く感じるようになったためです。
事実、サイタの事業システムは、(現在のところ)オンライン動画教材のようなレッスン提供そのものの媒体ではなく、オフラインでのレッスン体験を提供するための(コーチやスクール事務局スタッフにとっての)業務支援システムです。「より受講生/コーチに近い、日頃コミュニケーションをとっているスタッフこそサービス開発に参加して欲しい」という思いを込め、チームの改称をおこない、その経緯を社内で共有しました。その後も、全社会の機会などで折を見て同じことを伝えています。
実際のところ、この改称がすぐに社内スタッフの行動の変化に伝わったか、というと、短期的には何の変化もなかったように思います。しかしながら、後に紹介するいくつかの施策とその反応に対し、良い影響があったのではないかな、と考えています。
ちなみに、私は、サイタに来る前に開発会社を営んでいたのですが、そのときのとある取引先企業様(社員数100名以上)において、そこで働いているプランナー, エンジニア, デザイナーたちが、全員同じ「業務推進部」に所属していたことに衝撃を受けた記憶があります。思えばこれも「全員が開発に参加する」という目的に即した命名だったのかもしれません。
全社員向けに技術勉強会をやった よくある「社内勉強会」を、全社員を対象におこないました 。一例として、これまでに実施してきた社内勉強会は、以下のような内容です。
サイタを支えるデータ群(どのような事業データがあるのか)
SQL勉強会(事業を支えるデータ群に、どうアクセスするか)
サイタを支えるサーバ群(リリースとかdeployって何やってんの)
サイタのメール配信の仕組み(ちゃんと届けるために、何やってるか)
ソフトウェアテスト勉強会(「新機能リリース前にみんなでやったテスト」の裏側)
同じ内容の勉強会を複数回開催したこともありましたが、SQL勉強会はとくに好評で、回を重ねるうちに、テーブル結合、集約関数やサブクエリの利用など、多少踏み込んだ内容まで進んでいきました。発表資料を共有しておいたところ、後から入社したスタッフがそれを見て自習したこともあったようです。「体験レッスンの申込から初回架電までの時間と、レッスン実施、入会には相関があるはず。このテーブルのコレとコレをつなげて取得したい。ここまでは書けたんだが、なんか数字が肌感と合わない。オカシイ、何が違うんだ」といったような具体的な質問がきたときには、嬉しかったですね。
また、いろいろ相談されてつくった分析用のクエリを、社内共有のドキュメントに貼り付けておくことで、他のスタッフもそれを参考に、さらに深い分析をする姿も見られました。もちろん、この分析や仮説検証視点でのクエリの蓄積は、 Tech チームにとっても、大いに学ぶところがありました。
「何もナマ SQL をみんなで覚えなくても、Tableau などの BI ツールを入れれば良いのでは」という見方もあるでしょうが、そこは何にコストを払い、何を得るか、タイミングとケースバイケースの判断でしょう。
そもそも社内に「データを見て、数値で語る」という文化が無いことには、phpmyadmin だろうと、Tableau だろうと良い効果は得られないと思います。社内向けの技術勉強会は「どういうデータがあるのか」「何に、どうアプローチするのか」という点において、エンジニアもそうでないスタッフも同じ空間、同じ土台で問題意識と前提知識を共有することができました。結果として、サービスをよりよくしていくための武器を全スタッフにもってもらうという、良い文化づくりのきっかけができたのではないか、と考えています。
開発プロジェクト情報をオープンにした 過去のサイタでは、ユーザサポートスタッフは、機能改善提案を上げるまでで一段落、あとはただ技術チームの対応を待つ、でもエンジニアが実際に開発に着手しているかどうか/どういう優先度判断をしているのかわからない、という状態がたびたび発生しておりました。これは、ユーザサポートスタッフにとってフラストレーションになっていたことは否定できず、健全なチームとは言い難い状況だったと思います。
そこで、当時使用していた ITS(Issue Tracking System) であり、開発情報ドキュメント管理 wiki でもあった Redmine へのアクセス権を、全スタッフに対して付与しました 。その結果、Issue の仕掛りや調査状況がオープンとなり、社内コミュニケーションツールとして使っていた Yammer で、徐々に Redmine 上の URL がやりとりされるようになっていきました。これにより、「ココがエンジニアリングコストがかかるところであれば、Issue を分けて、ココだけ先にリリースしても良いんじゃないか」といった、サービス改善のための、より建設的なコミュニケーションもできるようになりました。
業務部門とシステム部門は、とかく壁を作ってしまいがちです。「組織を分け、役割をキレイに分担した状態」は、私たちのような小さなチームでは、尚更多くのコミュニケーションロスを生み出してしまいます。お互いが「聞かないと教えてくれない」「聞いてくれないと、教えようがない」という雰囲気になってしまうくらいであれば、オープンにできることはオープンにして、建設的なコミュニケーションができる状態をつくっておくのが好ましいでしょう。もちろん、「見える場所にあるんだから、勝手に見ろ」ではなく、「見える場所にあるものを、みんなで見て活用する」ように丁寧に運用することも大切です。
Redmine はその後、GitHub に移行しましたが、エンジニア以外のスタッフが Issue をつくったり、オリジナルの LGTM 画像をつくって送ってくるなど、変わらずにオープンで健全な運用ができていると思います。
技術に限らない勉強会をやった 社内勉強会は、「学習する組織」のためにも、定期的に開催すべきですが、技術勉強会がネタ切れ&発表の準備も大変になってきたので、エンジニア以外のスタッフも自分の業務改善や趣味を活かしたフリートークを発表できる機会に、徐々に移行 しました。
幸いにも、当社には、DJ, ドイツ語コーチ, グルメ, 薄い本作家, 現役ミュージシャン, サッカーが好きな人など幅広い発表ネタを仕込めるスタッフが在籍しているため、技術 or 社内業務改善ネタ1件、趣味ネタ1-2件の社内勉強会をコンスタントに開催していけるようになりました。
技術勉強会単体のときとは雰囲気を変え、冒頭から飲食あり(もちろんアルコールも!)でカジュアルに楽しめるような空間になるように工夫しました。フリートークとはいえ、業務ネタのセッションを交えることで、自ずと業務に関係する話題も絡まるものです。こういった時間を共有することで、普段考えていることをオープンに話し合う雰囲気づくりの一助になったのではないかと考えています。
行動指針を打ち出した 経営陣で話し合い、以下のような行動指針を打ち出しました 。
会議10回より、リリース1回
「やる」と「やり切る」は大違い
相手目線で考えよう
このステートメントには様々な視点が入っていますが、とくに前者2つについては、私たちの「社内全員サービス開発者体制」の価値観をうまく表現してくれていると思います。
ちなみに、この行動指針は「もっと覚えやすく」「日常業務で会話に出せるような」という思いで改訂を経た第2版となっております。ここでは、これ以上は語りませんが、私たちのコーポレートサイト では、もう少し追加の説明が読めますので、よろしければご覧になってみてください。
受け入れテストフェーズを仕組み化した 過去のサイタでは、新機能のリリースにあたっての、リリース前テストは Dev チームに委ねられており、エンジニアチーム内で十分な動作確認をおこなってからリリースするという流れになっていました。この流れでは、リリースまでの時間は短縮できていたのですが、リリースされた後に問い合わせを受けて初めて新機能に触れるサポートスタッフも多くなってしまい、結果としてサポート品質の低下に繋がっておりました。
そこで、スタッフ向けのリリース前機能の動作確認環境を整備し、大きめの機能リリースでは、リリースに先立ち、ユーザサポートチームに網羅的なシステムテストを計画/設計/実行してもらうプロセスを作りこみました 。
システムテストを設計してもらうにあたって、テストの目的や、テスト計画の立て方については何度か個別にサポートしましたが、今では、プロジェクトによっては、1,000を超えるテストケースの実行計画を立てて実行してもらえるまでになりました。実行計画のドキュメントひとつ見ても、外部のテスト専門会社に発注するのと遜色ないレベルでの計画/実行ノウハウが定着してきているように感じています。
ユーザサポートチームで受け入れテスト相当のテストを計画し実行することは、リリース前の新機能の理解や、仕様の検討漏れの発見にもつながります。この取り組みの結果(リリース後のバグの発生件数や問い合わせ内容を見ている限りでは、)リリース品質とユーザサポート品質の双方に良い結果をもたらしているようです。
パイロットとなるシチズンデベロッパーを育成した 「シチズンデベロッパー」という言葉が一般的なものなのか自信が無いのですが、ここでは、普段はシステム利用部門(当社の場合、ユーザサポート)の業務にあたりながらも、必要に応じてアプリケーション開発にあたることができるスタッフのことを指すものとします。
ここまで紹介してきたような様々な取り組みを実施していくうちに、SQL を覚えたり、GitHub の Issue にコメントしてきたり、文言変更程度であればソースを検索して「ここをこう改修するだけなんじゃないか」と手を動かしてみたりするスタッフも現れてきました。
そこで、そのスタッフに個別で SQL づくりの補習サポートをしたり、GitHub で Pull Request を送るまでのフローを覚えてもらったり、その手順を可能な範囲でマニュアル化してもらったりする 、という取り組みを始めました。同時に、開発環境セットアップのハードルをできるだけ下げられるようなツールとドキュメントの整備を進めました。
今も、私の席の後ろでは、ユーザサポートスタッフのひとりが、Atlas で build された VM を起動し、「ダッシュボードに表示するKPIの集計条件を変更する」「レッスン予約手続きをする際の、ユーザへの表記文言を微調整する」などの Issue の解決に当たっています。サービス成長という目的意識の高さが、学習ハードルを跳ね除けているのを感じます。
まだ道半ばではありますが、先導役となるシチズンデベロッパーが次々と成果をあげていくことを目のあたりにすることで、サポートスタッフのなかでも「これくらいの修正であれば、自分でもなんとかできるのではないか」という流れになることを期待しています。
「サイタ エンジニアブログ」を「サイタ 開発者ブログ」に変えた 社内の取り組みを積極的に社外に公開していくということは、採用広報の目的が第一義と捉えられがちですが、社内のスタッフにとっても「うちの会社は、こういう会社なんだな」という認識をもってもらう上で大事な取り組みと考えています。
「エンジニアブログ」をエンジニアだけのメディアとはせず、サイタをつくっているスタッフ全員の発信の場と捉え、先日「開発者ブログ」と改称 し、Webマーケティング担当やデザイナーからの記事も公開していくようにしました。
対外的に語れる様々な表現をスタッフ全員がもつことで、「全員がサービス開発者であり、自分もサービス開発をしているひとりなんだ」という当事者意識にもつながるのではないかと考えています。
まとめ 以上、サイタの「社内全員サービス開発者体制」構築プロセスの一部を紹介させていただきました。
ひとつひとつの取り組みには、そもそもの人数規模や事業フェーズを含め、うまく機能するための前提条件や文化・文脈があったと思いますが、様々な取り組みを相互に補完しあわせ、時間をかけて取り組んできた結果、今のような体制ができてきた、と考えています。
何よりも、全体としてこのような取り組みがうまく機能してくれているのは、サービスの向かう先のビジョンや全社目標を、メンバー全体で共有 できていることによると思います。
これからこういった体制づくり文化づくりに取り組まれる方へのオススメとして「Fearless Change アジャイルに効くアイデアを組織に広めるための48のパターン 」という本があります。チーム内で新しい取り組みを成立させていくための様々なパターンが網羅的に挙げられていますので、ぜひご参考になさってみてください。
ちなみに、業務部門での「ITイノベーター/シチズンデベロッパー」が、小さな修正や改善を推進してくれることで、エンジニアスタッフが、よりエンジニアリングの深いところや、研究開発にコミットする時間を確保することができた ことも大きな成果といえます。このような変化を経て、私自身も改めて「今後、技術チームをどうしていきたいか」「会社の技術戦略はどうあるべきか」を考えることができました。
今回は、社内の全員サービス開発者体制構築に向けての取り組みをメインにお話させていただきましたが、また機会があれば「技術チームとエンジニアひとりひとりに、どう向き合ってきたか」をお話できればと思います。
この記事が、どなたかのヒントになることがあれば幸いです。
それでは、また。
@tmtysk
新しい「学びのカタチ」を世の中に広めていきたいエンジニアwanted!