Snyk のエンジニアリング文化: チームをサポートし、動かす価値観
Sergey Vasilkov
2023年5月8日
0 分で読めますSnyk は常に、明確に定義された素晴らしい文化を持つ企業であり続けてきました。成長に伴い、私たちのコアバリューを意図的に共有、周知し、さまざまな部署や部門がそのコアバリューに基づいて行動できる場を提供したいと考えています。そうすることで、Snyk を形成する価値観を強固に守ることができ、新入社員のオンボーディングもスムーズになります。
エンジニアリング文化とは、会社の価値感を土台に、ソフトウェアエンジニアの意思決定や行動に影響を及ぼす信念と価値観を示すものです。私たちは、あらゆる動機、標準、ベストプラクティス、ツールの選択を、明確に定義されたエンジニアリング文化へと変えることができます。そうしてこの文化を守り、すべてのエンジニアに文化を広めています。
Snyk では、ソフトウェアエンジニアによる問題解決、イノベーション、コラボレーションをエンジニアリング文化に基づいて進めていきたいと考えています。そうすることで、エンジニアが最大限に能力を発揮できるようサポートしながら、組織全体の成功も推進する環境を構築できます。Snyk は、エンジニアリング文化が会社の全体的な価値観のきわめて重要な側面であると考えています。私たちの価値観と優先事項を土台とするこの文化により、優秀な人材を獲得し、維持できるからです。
さらに、エンジニアリング文化を明文化することで、より良い成果を上げることができると考えています。理由は次のとおりです。
矛盾している部分が浮き彫りとなり、必要な議論が促されるため。
文化がより予測可能になるため。
従業員が自信を持って行動できるようになるため (文化と一致していて最善の意図があれば、大きな問題にならないと確信できる)。
すべてのエンジニアが同じ方向を向けるため。
個人間の衝突が減るため。
文化にマッチする候補者を引き付けることができるため (マッチしない候補者を回避できる)。
新人エンジニアのオンボーディングを支援し、共通の価値観と期待値を確立できるため。
Snyk のエンジニアリング文化をどのように定義したのか
Snyk には、組織レベルで明確に定義された強固な文化があります。私たちは会話の中で同じ価値観を共有することで、足並みを揃えて焦点を明確にしています。
一つのチーム - 私たちはコミュニティの強さを称え、大きなことを実現するという熱意と目的を持って連携しています。
心から大切にする - 情熱を持って互いを、顧客を、地球を、そして私たちが暮らし、働く地域社会を導いていることを誇りに思っています。
開発する - 迅速な運用を行い、継続的なイノベーションによって顧客に優れた成果を提供し、常に学習、反復、改善に努めます。
大きく考える - 私たちはコミュニティの強さを称え、大きなことを実現するという熱意と目的を持って連携しています。
常に学ぶ - 学ぶことは常にあり、学習は個人の成長と会社の成長にとって不可欠であると信じています。学びを止めることは決してありません。
これらのコアバリューは、それぞれ異なる状況で活かすことができます。私たちは、コアバリューに焦点を当てることが成功につながると認識しています。では、これらのコアバリューを土台として、すべてのエンジニアが共通の認識を持って成果を上げられるよう支援するにはどうすればよいでしょうか?
私たちはすべてのエンジニアリング部門のリーダーを招集し、私たちの価値観を説明して、Snyk のエンジニアリングを大きく進化させるあらゆる要素についてブレインストーミングしました。そして、エンジニアリング慣行を取り上げながらコアバリューに一致させる作業を行い、Snyk エンジニアリング文化を文書化しました。このブログ投稿は、この文書に基づいています。
一つのチーム
私たちはコミュニティの強さを称え、大きなことを実現するという熱意と目的を持って連携しています。
オーバーコミュニケーションを行う
Snyk は拠点が分散しているため、進捗状況やプロセス、問題を積極的に共有しています。これには、情報共有のためのコミュニケーションや文書化、ベストプラクティスが含まれます。例をいくつか紹介します。
プロジェクトの進捗状況や最新情報を、求めるのではなく定期的に共有する。
新機能や WIP 機能のデモンストレーションを行う。
定期的に動画を撮影して共有し、対象者が視聴できるようにする。
文書化とテクニカルライティングのスキルを高める方法についてのベストプラクティスを推進する技術ドキュメントガイド。
定期的にフィードバックを提供し、受け取る
従業員が同僚やリーダーに頻繁にフィードバックを依頼し、確認することを推奨しています。さらに、私たちはフィードバックの活かし方や、フィードバックから恩恵を得る方法も知っています。フィードバックは大切なギフトです。これを念頭に置いて、フィードバックを常に提供し、受け入れています。フィードバックを奨励するために、Snyk ではレビュー、1 対 1 でのプライベートなフィードバック、Slack パブリックチャンネルでの感謝の投稿を年に一度、四半期ごと、不定期に行っています。
ひとりで仕事をしない
意思決定、重要なタスクやささいなタスクの解決、インシデントの解決など、どんなときでも私たちにはサポートしてくれる人がいます。従業員は、恐れることなく、恥ずかしがることなく他者に助けを求め、連携することができます。私たちは必要以上にコラボレーションに努め、「一つのチーム」という価値観に頼ることを推奨しています。
たとえば、多くのチームがペアプログラミング、モブプログラミング、グループプログラミングの練習をして、互いにサポートしながら集中を維持し、最適なソリューションを考案しています。
失敗を責めない文化がある
私たちが行っていること、その一端は全員が担っています。遡って誰がやったのかを追及することよりも重要なことは、どのように対応し、成長し、学ぶかです。私たちが問題について話し合うときは常に、改善と今後の対処にフォーカスしています。
積極的に他者の仕事に感謝する
私たちは常に、Slack の専用の #appreciation チャンネルといったコミュニケ―ション用のパブリックチャンネルで感謝を伝えています。
心から大切にする
情熱を持って互いを、顧客を、地球を、そして私たちが暮らし、働く地域社会を導いていることを誇りに思っています。
品質や機能以外の要件に配慮する
私たちが顧客に価値を提供するときは、暗黙的な要件にも気を配ります。たとえば、ユーザビリティ、信頼性、テスト容易性、効率性、本番環境への全体的な準備状況などを考慮します。具体的には、次のことを実施します。
問題を隠すのではなく、修正する
妥当な回数のテストを実施して、機能をカバーする
適切な指標、ダッシュボード、アラートを提供する
構築した製品と機能を社内で使用する (ドッグフーディング)
私たちの仕事が及ぼす倫理的影響に配慮する
仕事をする際には、社会に対する倫理的責任に気を配り、要件に倫理的配慮を組み込むよう努めています。
弱い立場にあるコミュニティに価値を提供するための要件 (UX のアクセシビリティ要件など) に配慮します。
適用される規制に従ってデータを処理し、データガバナンスを重視します。
欺瞞的なデザインパターン (何かと引き換えに登録を強要する、その他の方法でユーザーを騙すなど) を採用しません。
エンジニアは、倫理に反する可能性について懸念を表明する責任があり、報復や仕返しを恐れることなくそれを実行できると感じていなければなりません。
顧客を第一に考える
顧客が抱えるあらゆる問題は重要であり、顧客と現場チームをサポートすることは私たちのチームとってきわめて重要な責務です。
顧客とのデバッグコールにエンジニアが参加し、スピーディな修正を行います。
問題の概要を明確に把握し、フィーチャーワークを行いながら問題に優先順位を付けます。
あらゆる新機能についてユーザーのリサーチを実施し、ユーザーの直接的なニーズとユースケースに基づいた設計を行います。
つながりや交流を奨励する (強要はしない)
他者との交流が好きな従業員に、交流の機会をより多く提供します。しかし、全員に交流を強いることはしません。交流を望まない従業員も尊重します。Snyk では、楽しい Slack チャンネル、雑談用の Slack チャンネル、楽しいチームタイム、ソーシャルイベント、ハッピーアワーなどを提供しています (オンラインとオフライン)。
従業員の日常、経験は一人ひとり異なると認識する
Snyk は、時差のある環境での運営方法に熟知し、各地に分散するチームを率いてきた経験を持ちます。私たちは従業員のスケジュール (保育園への送り迎え、通院など)、タイムゾーン (特定の時間に会議を開かない、Slack での返信を求めない) を尊重しています。「Timezones for managers and those being managed」といラーニングセッションも提供しています。
多様性、公正性、包摂性 (DEI) を基本原則とする
Snyk では、包摂性の高い文化の強化に取り組んでいます。従業員は、違いを受け入れ、連帯感を維持し、職場でありのままの自分を出せるよう互いを支援しています。社会から疎外されたさまざまなコミュニティ向けの Snyk Resource Group (SRG) を提供しているほか、Mosaic@Snyk の社内ミッションに基づいて Snyk の包摂性の高い文化を強化しています。
開発する
迅速な運用を行い、継続的なイノベーションによって顧客に優れた成果を提供し、常に学習、反復、改善に努めます。
バーティカルスライスを採用
私たちが行うあらゆる作業は、顧客中心の成果物を思い描くところから始まります。これらをスタック全体で実行し、今後の必須作業のリスクを取り除かなければなりません。早期にフィードバックを得られるように、私たちは反復的な開発を行っています。
お勧めの記事: Marshmallow Challenge (マシュマロチャレンジ)、Innovation Games:Creating Breakthrough Products Through Collaborative Play (イノベーションゲーム: 連携プレイで画期的な製品を開発する)、Mark Finnern | Any significantly advanced work is indistinguishable from play (マーク・フィナン | 非常に高度な作業は遊びと見分けがつかない)、Visible Architectures (目に見えるアーキテクチャ)、How Big Tech Runs Tech Projects and the Curious Absence of Scrum (大手テック企業における技術プロジェクトとスクラム不在の謎)
チームは自由に独自のプロセスを選択できる
開発を後押しするプロセスであれば、XP でも、カンバンでも、Shape Up でも、スクラムでも、好きなものを選択できます。同時に、枠組みの中における自由も提供し、チームごとに調整できるようにしています。とはいえ、チームはグループとある程度連携する必要があります。グループ内のチームは、依存関係の計画と構築、短期目標の周知を一緒に行わなければなりません。
たとえば、いくつかのチームは XP (例: スプリントなし、ストーリーポイントなし) を採用し、別のグループは Shape Up を使用し、インフラではコミュニケーションと意思決定に 1 ページャーや 6 ページャーのモデルを採用しているといったことがあります。
「Definitions of Done (完了の定義)」に沿って作業の完全な完了を追跡
「完了」とは、成果物を本番環境にリリースすることではなく、ユーザーや関係者に実際に利用してもらうことです。私たちは、社内のチャンネルで「Definitions of Done (完了の定義)」に継続して取り組んでいます。
DevEx を心から大切にし、エンジニアをサポートするツールを構築、購入
私たちは常に、より良い方法を導入することを目指しています。そのために、新しいツールの提案、テスト、検証を行って一連の標準ツールに追加しています。たとえば、エンジニアは Polaris、Jira、CircleCI を利用できるほか、エンジニアをサポートするための Slack チャンネル、新しいツールを追加するための Slack チャンネルを利用できます。
大きく考える
私たちは、世界を変えられるソリューションを開発するために、限界を超え、スケールの大きい仕事を成し遂げたいという熱意を持っています。
自動化する
ルーティンプロセス、反復的な手順、時間のかかるオペレーションに時間と労力を費やさないようにします。
プロセスを改良する
長い間変わらないからと、何かに固執するのは避けるべきです。プロセスを分解し、会社にとって最適なものになるよう修正します。
チームの垣根を越えて考える
私たちは依存関係について考え、それを明らかにし、チームだけでなくグループの一員として行動しています。常により上位のレベルで進捗状況を共有し、グループ全体のフィードバックを収集して、大きなアイデア (「X の仕組みを変えよう」など) を奨励しています。チーム間のコラボレーションを楽しい方法で促すために、ハッカソンなどのイベントを開催して全員が協力できる機会を提供しています。
設計は将来のために、開発は現在のために
私たちは、「大きく考える」と「開発する」の間のバランスを取ることを目指して、アーキテクチャと設計で大きく考え、バーティカルスライスに注力し、実装時にスコープを拡張しています。
常に学ぶ
私たちは、オープンで好奇心旺盛なマインドセットを大切にしており、お互いから学び、成長する方法を常に模索しています。
メンタリングとコーチングを奨励し、実践する
強固なピアメンタリング文化に敵うものはありません。これは、組織の急成長を実現する上で競争上の優位性となります。これをサポートするために、Snyk は #miyagi-academy チャンネルと #mentorship-* チャンネルを用意し、知識を求めたり共有したりできる場を提供しています。「How to be an effective educator」というラーニングセッションも提供しています。
Snyk Employee Exchange プログラムを提供
反復による改善を図るために、Snyk は Employee Exchange プログラムを開始しました。このプログラムでは、異なるエンジニアリングチームの従業員がスプリント時にチーム間で入れ替わることで、新しい技術を学び、新しいプロセスを経験して、一つのチームとして能力を高めていきます。
学習リソースの活用を従業員に推奨
私たちは、知識、学習、自己開発を重視しています。Snyk は、従業員が学習にもっと投資できるように、学習のための時間を確保することを推奨し (その時間を尊重します)、年間の教育予算を提供して、Learnerbly、Udemy、O’Reilly などの学習リソースを利用できるようにしています。
定期的にレトロスペクティブを行って経験から学ぶ
ほとんどのチームがスプリントやプロジェクトのレトロスペクティブを行っていますが、私たちは新しいプロセスやイニシアチブについても早期にレトロスペクティブを行い、変更、修正、改善が可能な部分を特定しています。レビューとハックのプロセスは Snyk にとって非常に重要です。
インシデントレビューを実施
私たちは、インシデント後のレビューと事後検証を行っています。これにより、「インシデントにどう対処するか」、「同様のインシデントを防ぐにはどうすればよいか」という 2 つの点で改善を図ります。この取り組みをサポートするために、Snyk にはインシデントガイドと専用の重大インシデントプロジェクトがあります。
Snyk School に参加する
Snyk School は、Snyk の従業員が主催する魅力的な対話フォーラムです。学習と成長に欠かせない重要なトピックについて詳しく学ぶ機会を提供します。
作業のデモを行う
私たちは、技術的な変更のデモを動くソフトウェアで行うことで、それらの変更を共有したいと考えています。同僚、サポート担当者、ビジネス担当者といった対象者ごとに会議の場を設けて、成果や進捗状況を報告しています。たとえば、隔週で行っている全社向けのデモや、月に一度のデモコールなどを実施しています。
エンジニアリングの役割を明確に定義
明確に定義した役割を設けることで、各々のキャリアパスで仕事面での成長と個人的な成長をサポートしています。エンジニアは、自分の現在の立ち位置と、改善が必要な側面を把握できます。
まとめ
このように、あらゆる信念と慣行を明確にし、文書化したことで、世界各地に分散する優秀なエンジニアとそれらを簡単に共有できるようになりました。今後も「常に学ぶ」中でこのプロセスを繰り返し、エンジニアが最善の意思決定を行えるようサポートしていきます。私たちの価値観、そしてエンジニアリング文化に沿った意思決定を行えば、間違った方向に進むことはほぼありません。
文化の定義に着手することは容易ではありません。文化は私たちの内面に深く入り込み、生活の中で実践するものです。一歩下がって見てみると、仕事や問題に対する自分のアプローチを導く価値観がどこにあるのかわかります。皆さんもぜひ試してみてください。あなたのチームが最も良い成果を出すために重要となる価値観は何でしょうか?