ドッカーエンジニア
Dockerでは、私たちが行うことはすべて開発者に関するものです。 エンジニアリングは私たちの最大の部門であるだけでなく、私たちのようなソフトウェア開発者のためにソフトウェアを書くという特権的な立場にあります。 毎日数百万人の開発者が当社の製品を使用して独自のソフトウェアを構築しており、私たちは常に 最も愛されている開発者ツールとして評価されています。 このような大きな影響とコミュニティからの愛情を光栄に思い、開発者の生活をより良くするために日々努力を続けています。
Dockerでのエンジニアリングの方法
Docker のエンジニアは、部門横断的なエンジニアリング チームの 1 つに配属されます。 私たちのチームには通常、約5人のエンジニア、1人のエンジニアリングマネージャー、1人のプロダクトマネージャー、1人のプロダクトデザイナーが含まれています。 ほとんどの人は、プロダクトマネージャーとプロダクトデザイナーの比率が高いことに驚いています。 しかし、これは、チームを真に自律的にし、ユーザーのニーズを真に理解して集中する上で重要です。
ほとんどすべてのチームには、1つの大陸(ヨーロッパまたは北米)にすべてのメンバー、または少なくともすべてのエンジニアがいます。 必要に応じて非同期で作業する方法はわかっていますが、すべてが同じタイムゾーンにあると、コラボレーションに役立ちます。
以下は、現在の慣行のスナップショットです。 私たちは完璧ではないことを知っています、そして何年にもわたって進化したばかりのいくつかのことがあり、私たちはもっとうまくやれることを知っています。 さらに、私たちは急成長している会社であり、今日うまく機能している慣行でさえ、サイズが2倍または3倍になると機能し続けません。 私たちはカイゼンを信じています—継続的な改善:私たちはさまざまな変更を実験してきましたが、今後もさらに実験していきます。
「Dockerのエンジニアリングチームは素晴らしく、非常に賢いエンジニアと仕事をする機会がありました。 ここでのユニークな点は、誰もが日常的に使用する製品に取り組んでいることであり、それが本物で魅力的な議論と革新的なアイデアにつながります。 人々はここで本当にテクノロジーに情熱を持っています。」
当社のエンジニアリングチーム
各チームは、Compose や Desktop Platform などの 1 つの領域を担当しています。 私たちは、コンポーネントやテクノロジーではなく、ビジネスドメインに焦点を当てるようにしていますが、過去には、機能を完成させるためにチーム間の複雑な調整につながる傾向があることがわかりました。
チームは、ドメイン、顧客、および優先順位に関する独自の理解に基づいて、四半期ごとに独自の目標を提案する責任があります。
私たちのチームのデザインは、マニュエル・パイスとマシュー・スケルトンによる本「チームトポロジー」に基づいています。 あなたは見ることができます 彼らのウェブサイト 私たちが従うモデルの詳細については 、teamtopologies.com 。
エンジニアリングチーム
アカウント
アカウント チームは、Docker と Docker Hub 全体でシームレスで安全なユーザーと組織の管理を保証します。
コンテンツコンシューマー
コンテンツ コンシューマー チームは、開発者が Docker イメージを見つけて使用し、最新の状態に保つのを支援することに専念しています。 チームは Docker Hub サービスを構築し、Docker Desktop に機能を提供しています。 彼らのスタックはReact(Typescript)と一緒に行き、TerraformとHelmを使用してAWS(EKS、Lambda)にデプロイします。
カスタマーサクセス
カスタマーサクセスチームは、顧客、開発者、およびその組織が、Dockerのツール、製品、および最新機能に正常かつ効果的にオンボードできるようにします。
Docker デスクトップ プラットフォーム
Docker デスクトップ プラットフォーム チームは、主にビルドや CI ファームなどの内部ツールを管理および改善することで、Docker Desktop を記述するチームにサービスを提供します。 また、Dockerデスクトップ内のインストールと更新のプロセスも管理します。 したがって、内部顧客 (Docker Desktop に貢献している他のチームの開発者) と外部顧客 (製品をインストールまたは更新するすべての Docker Desktop ユーザー) の両方が存在します。 このチームのエンジニアは、主にいくつかのC#とSwiftを使用してGoをプログラムし、Windows、Mac、Linuxで作業します。
インフラ
インフラストラクチャ チームは、世界最大のコンテナー イメージのライブラリである Docker Hub を含む、Docker Inc 全体の機能を強化するコンピューティング レイヤーを提供します。 私たちは、生のクラウドリソースを取得し、アプリケーションチームのために可用性の高いセルフサービスコンテナインフラストラクチャに成形します。 Docker製品、多数のオープンソースツール、クラウドサービス、およびそれらをバインドするために構築した自動化を使用しています。
請求
請求チームは、Dockerの製品内で、簡単な購入、信頼性の高い請求、適切なユーザー資格、および堅牢な支払いレポートを保証します。
ビジネスイネーブルメント
ビジネスイネーブルメントチームは、ビジネスユーザーが開発者によるDockerサブスクリプションの使用について安心し、情報を得ることができるように、可観測性と制御を提供します。
コンテンツ発行者
コンテンツ発行元チームは、Docker Images の発行元が、開発者が簡単に使用し、最新の状態に保つことができるコンテンツを作成できるよう支援することに専念しています。 彼らはDocker Verified PublisherとDockerが後援するオープンソースプログラムを実行しています。 主に Docker Hub サービスを構築して実行します。 彼らのスタックはReact(Typescript)と一緒に行き、AWS(EKS、ECS、Lambda)にデプロイします。
Docker Desktop
Dockerデスクトップは、当社のプラットフォームのコア部分の1つです。 これは、開発者がWindows、Mac、Linuxのいずれを使用している場合でも、オペレーティングシステムにシームレスに統合され、必要なすべてのコンテナツールをバンドルし、CLIとUIが含まれているコンテナを構築、共有、および実行するための環境を提供します。 Docker Desktop チームは、マルチコンテナー アプリケーションを実行するためのツールである docker compose も開発しています。 彼らは主にGoとReactで、いくつかのC#とSwiftで、そして3つのオペレーティングシステムすべてでコーディングします。
拡張 機能
Extensions チームは、Docker Desktop と将来的には Docker Hub を拡張するのに役立つ SDK と API を構築しています。 彼らは、Docker社内のチーム、パートナー、コミュニティと緊密に連携して、構築したツールで成功できるよう支援します。 チームは、作成したツールを使用して Docker の拡張機能も構築しています。 チームのスタックは主にGoとReact(Typescript)です。
記帳
レジストリ チームは、Docker Hub で利用可能なコンテナー イメージやその他のコンテンツのストレージと要求処理を担当します。 これには、毎秒最大5000リクエストを受信するため、何百万人ものユーザーがパフォーマンスの高い方法でサービスを高可用性にすることが含まれます。 ストレージに関しては、チームは Docker Hub のコンテンツを構成するペタバイト規模のバイナリ データと、関連するメタデータを管理します。 それらはオープンソースプロジェクトの配布に貢献します。 彼らのスタックはGoで、TerraformチャートとHelmチャートを使用してAWS(EKSとLambda)にデプロイします。
プロセスと会議
私たちのチームは独自のプロセスを設計できる権限を与えられているため、多くの類似点がありますが、チームによって違いがあります。
私たちは皆、スクラムのようなプロセスに従い、毎日スタンドアップを行い、2週間に1回、スプリントレビュー、ふりかえり、計画を行います。
多くの企業では、チームはチーム内でスプリントの成果のデモを行いますが、代わりに会社全体に対して行います。 完了した作業だけでなく、進行中の作業を示すことが奨励されています。
一部のチームでは、バックログをグルーミングしたり、アーキテクチャや技術的負債について議論したりするための追加の定期的な会議があります。 また、フロントエンドフォーラムなど、チーム間のコミュニティもいくつかあります。
私たちが存在してきた限り、私たちは長年にわたっていくらかの技術的負債を蓄積してきましたが、それを制御下に置くことの重要性を認識しています。 そのため、私たちは時間の 20%をテクノロジー債務の返済に費やすことを目指しています。 技術的負債の優先順位は、エンジニアによって決定され、何が彼らを最も遅くしているのかに焦点を当てています。
四半期に一度ハッカソンを開催し、テーマを設定し、エンジニアリングの全員、および社内の誰もがそのテーマに関するイノベーションのプロトタイピングに1日を費やします。 (私たちは、毎年のハックウィークや10%の時間など、他のさまざまな方法を試してきましたが、これは最も参加しているようです)。 もちろん、エンジニアからのアイデアも歓迎します:私たちは非常に実力主義的で非階層的であり、良いアイデアは誰からでも生まれ、製品に組み込まれる可能性があります。
「Dockerは、私が今まで参加した中で最高のチームです。 エゴ、挑戦的な問題、オープンなコラボレーション、そして他では見られないレベルの情熱と開発者への執着を共有するチームはありません。 ここの経営陣は私の個人的な成長を本当に気にかけており、私のチームはより良い人間とエンジニアになるために毎日私に挑戦しています。」
Josh Newman、プリンシパルソフトウェアエンジニア
私たちが使用するツール
私たちのコードの一部はオープンソースであり、一部はクローズドソースですが、ソース管理のために、誰もがGitHubを使用しています。 すべてのコードは、コミットする前に、少なくとも1人の他のエンジニア(一部のリポジトリでは他の2人)によってレビューされます。
課題追跡とスプリント計画には、Jira と GitHub を組み合わせて使用しています。 Notionにスプリントボードを置くチームも1つあります。 例外はありますが、主にオープンソースリポジトリはGitHubを使用し、クローズドソースリポジトリはJiraを使用します。
CI では、Jenkins アクションと GitHub Actions を組み合わせて使用します。 当社のSaaSサービスはAWSベースです。
オンコール
世界のITインフラの重要なコンポーネントを運用していると言っても過言ではないため、24×365のオンコールサポートが必要です。 これはヨーロッパとアメリカを拠点とするエンジニアの間で分割され、人々は数週間に一度、1週間の12時間の昼間のシフトに割り当てられます。 SaaSサービスに取り組んでいるエンジニアが期待されており、他のエンジニアがローテーションに参加することが奨励されています。 オンコールは、インシデントの有無にかかわらず、通常の給与に加えて補償されます。
ワークライフバランス
私たちの哲学は、人々は自分の仕事を自分の生活に合わせることができるべきだということです。 私たちは自宅で仕事をしており、人々が時間と優先順位を整理するという点でそのメリットを享受できるようにしたいと考えています。 早く始めたり、遅く終わったり、一日の途中で休憩したりするのが好きな人がいます。 私たちの従業員の多くは、育児家族のコミットメント、趣味、または運動を彼らの一日に取り入れています。
休暇手当は手厚いので、利用してほしいと思っています。 お休みを取って、リフレッシュして戻ってきて、仕事の準備をしていただきたいです!
「私が仕事をやめるとき、私はそれ以上求められません。 私の家族が私からのより多くのサポートを必要とするとき、私はそれを行うことができます。 Dockerは、人生が私を引きずり下ろし、不健康な仕事の習慣に私を押し付けないときに私をサポートします。 同僚、マネージャー、そして幹部まで、Dockerは私と私の家族全員を愛していると感じています。」
アレックス・ホカンソン、スタッフソフトウェアエンジニア
ドッカーエンジニアの活躍
Docker の YouTube チャンネルと Docker ブログには、エンジニアによるコンテンツが豊富に用意されています。 当社のエンジニアは、開発者コミュニティに積極的に参加して、Dockerのベストプラクティスに関するプレゼンテーションを行ったり、新製品について話し合ったりしています。
DockerCon2021 では、スタッフ ソフトウェア エンジニアの Mark Higson 氏が「Beyond the UI: Docker の新しい HTTP API を使用したハンズオン コーディング」というプレゼンテーションを行いました。 講演の焦点は、Webサイト、デスクトップアプリ、CLIがすべてのユースケースをカバーできるわけではないということでした。 開発者が何か専門的なことを行う必要があるときは、APIに目を向けます。 Mark は、Docker の新しい API First 戦略が社内開発をどのように推進しているかについて説明し、それらを使用する実用的で現実的なコーディング演習を行いました。
Dockerのエンジニアの何人かは、2021年にDevoxxフランスで講演しました。 これはフランスで最大の開発者会議であり、Dockerエンジニアが当社を代表するためにそこにいました。 シニアソフトウェアエンジニアのGuillaume LoursはDockerfileのベストプラクティスについて話し、Yves BrissaudはPorterを使用したCloud Native Application Bundles(CNAB)の構築と使用について発表しました。
詳細を学び、これらの講演(フランス語)を見るには、 Dockerブログにアクセスしてください。
エンジニアリングチームのメンバーになる
キャリアの次のステップに進み、Dockerエンジニアになる準備ができたら、 現在の求人 を参照して、適切な役割を見つけてください。 「このポジションに応募する」をクリックすると、応募プロセスが順を追って実行されます。 エンジニアの面接は、役割に関係なく同じ基本形式に従います。
エンジニアインタビュースケジュール
- リクルーターの1人と15〜30分、あなたの職歴、就労権、給与の期待について尋ねます。 これに続いて、エンジニアの1人による15分間の技術画面がすぐに表示されます。
- この役割の採用マネージャーとの60分のインタビュー。 マネージャーはあなたの職歴とあなたが探しているものについてより詳細に尋ね、私たちが探しているものもあなたに説明します。 彼らはまたあなたに短いプログラミングの問題をするように頼むかもしれません。
- チームのエンジニアとの60〜90分のインタビューが2回行われます。 これらのインタビューは、コーディングやその他の技術的な質問に集中します。 これらのインタビューでは、画面共有する必要があります。
- 採用マネージャーのマネージャーとの30分間のインタビュー。 これはマネージャーのインタビューと同じ情報をカバーしますが、コーディングは必要ありません。
- 一部の役割では、エンジニアリング担当副社長との最後の30分間の面接が行われます。 これは会話型であり、コーディングは必要ありません。
取材時の注意点
- プログラミングを含むインタビューでは、コードを書いてもらいたいです。 画面共有を使用して自分のコンピューターでこれを行うことができるため、通常の開発環境で快適に過ごせます。 開発環境を用意する以外に、特別な準備は必要ありません。
- 見ているうちにコーディングに神経質になっている方もいらっしゃると思いますが、同僚と一緒にコーディングをしているかのように扱ってください。 私たちはトリックの質問をしません、そしてあなたはあなたが日常の仕事で通常使用するであろう他のオンラインリソースを使うことを歓迎します、そしてあなたが何をしているかについて話し合うことは大歓迎です。 面接ではできるだけ自然な環境で頑張ってほしいので、日常業務でどのように考え、どのようにコーディングするかを見ることができます。
- 最後にもう1つ:面接は双方向のプロセスであるべきだと私たちは信じています。 私たちは適切な同僚を探していますが、あなたもあなたにぴったりの仕事を探しています。 したがって、Dockerがあなたにとって適切な場所であるかどうかを決定するのを助けるために必要なことは何でも尋ねてください。
「Dockerが多様性とコラボレーションを奨励して新しいイノベーションを構築する方法が気に入っています。 エンジニアリングからマーケティングまで、すべての人のアイデアが開発者コミュニティのより良いエクスペリエンスの作成に貢献します。 自分の声が本当に重要だと感じています。」
Paco Valverde、シニアデータエンジニア