3 ポイント 投稿者 GN⁺ 2025-03-12 | 1件のコメント | WhatsAppで共有

スタートアップ CTO ハンドブック

高性能なエンジニアリングチームのための必須スキルとベストプラクティス

はじめに

  • 常に学び続けること: 著者は幼い頃からコンピュータとソフトウェアプログラミングに情熱を持っており、それを通じて継続的な学習の重要性を理解した。技術リーダーとして成功するには、絶えず学び、成長し続けることが重要である。
  • スタートアップの技術リーダーのジレンマ: ほとんどのスタートアップには技術系の共同創業者がおり、彼らは初期のコードベースを書き、最初のエンジニアを採用する。しかしチームが成長するにつれて、技術リーダーはマネジメントの役割へ移行する必要があり、その過程でリーダーシップスキルが不足している場合がある。

著者紹介

  • 著者は複数のスタートアップで経験を積み、技術リーダーとしての役割を担ってきた。さまざまなスタートアップでの経験を通じて、技術リーダーシップに必要な多様なスキルと課題を理解するようになった。

この本の使い方

  • この本はソフトウェアエンジニアリングチームを管理するリーダーのための参考書であり、さまざまなトピックを独立した章として扱っている。各章ではテーマを紹介し、概要を提供し、ベストプラクティスを提示する。

ビジネスプロセス

  • ビジネスプロセスを説明することで、問題解決の出発点を提供する。チームや会社の規模に応じて、プロセスを調整し拡張する必要がある。

人と文化

マネジメントの基本原則

  • マネジメントの黄金律: チームの成果がマネージャーの成果を測る基準である。メンバーがベストを尽くせるよう支援しなければならない。
  • 専門スキルツリー: 技術リーダーシップのためには、技術だけでなくマネジメントスキルにも投資する必要がある。

継続的改善

  • カイゼン: チームも個人も継続的な改善を追求すべきである。ミスを改善の機会として捉えるべきである。

コーチング

  • マネージャーは、メンバーがベストを尽くせるよう支援するコーチの役割を果たすべきである。

マネジメントメンターを見つける

  • リーダーシップへの移行のためには、マネジメントメンターを見つけることが重要である。適切なメンターを通じて、リーダーシップスキルを向上させることができる。

1:1 ミーティング

  • 1:1 ミーティングはメンバーとの関係を築き、彼らの強みと弱みを把握して、ベストを尽くせるよう支援する機会である。

スキップレベルミーティング

  • 定期的にマネージャーの直属の報告先ではないメンバーと面談し、多様な視点を収集することで、ビジネスを改善できる。

マネージャーのためのコーチング

  • ミドルマネージャーの成果は組織の成果にとって重要である。継続的な教育と支援を通じてマネージャーを育成すべきである。

エンジニアとの 1:1 ミーティング

  • エンジニアとの 1:1 ミーティングは、彼らが直面している問題を聞き、解決策を見つけられるよう支援する機会である。ミーティングの目的を明確にし、生産的な対話を導く必要がある。

1件のコメント

 
GN⁺ 2025-03-12
Hacker Newsの意見
  • こういう文書を見るときは、まず自分が詳しく知っている部分に行って、何と言っているか確認することにしている。ここではPCI DSSやSOC 2監査の準備と実施には通常6〜12カ月かかるので、土壇場で認証を取ろうとするなと言っているが、スタートアップにはほぼ逆の助言をしたい
    特にSOC 2の証明は取りやすく、発注書が絡む前から先回りしてお金を使うのは無駄だ。もちろん、シングルサインオンの設定や保護されたGitブランチのように、後で証明の土台になるものは早めにやっておくのがよいが、SOC 2を取る予定がなくてもいずれにせよ行うべき基本的なベストプラクティスに近い。大口顧客が要求していないなら、SOC 2をやる必要はないと思う。この文書の他の部分も誰かに点検してもらえるとよさそうだ

    • 良いアプローチだ。データベース周りを検索してみたが、概ね問題なかった。ただ、2025年にスタートアップがSQL対NoSQLに注力する必要はなさそうだ。人気のあるSQLデータベースはJSONをうまくサポートしているので、エンジニアがより慣れているPostgreSQLやMySQLを使い、バックアップとレプリケーションを担ってくれるCloudSQLやRDSを使えばよい
      BI用のリードレプリカとそこそこの可視化ツールをつなげればかなり長く持ちこたえられるし、Snowflakeのようなものに5〜6桁の金額を使うまでは十分だ
    • 私の経験では、初期スタートアップと取引する意思があり、かつSOC 2レポートを求める企業は、技術担当者が相手のITチームと通話して能力に問題がないと説得できさえすれば、契約書に6カ月以内にSOC 2 Type 1を取得と入れて進めることに概ね問題はない
    • 会計とサプライチェーンのプロセスがエンタープライズERP内にある場合だけは、丁重に反対したい。監査不能なプロセスを後から巻き戻すには時間とお金がかかりすぎるし、その間もビジネスは動き続けなければならないので、この特定のケースでは初日から監査可能にしておく方が安くてよいと思う
    • この助言は業種によって適用しやすさがかなり変わり得る。個人識別情報を扱うB2B製品を売るなら、ピッチミーティングで笑いものにされないためにSOC 2は事実上必要だ
      資金状況によっては、Secureframeのような自動SOC 2準拠チェックリストサービスを使う費用は数千ドル程度で済むことがあり、ベストプラクティスに従わせてくれるだけでなく、SOC 2に合った独特の形で整理してくれるので監査も楽になる。すでに非準拠のプロセスが深く組み込まれた組織をSOC 2の道に乗せるためにかかる開発・プロジェクト管理の時間に比べれば、大きな投資ではない
    • コンプライアンスには詳しくないが、これはかなり奇妙に聞こえる。SOC 2をざっと読むと、監査前の数カ月間に膨大な証拠収集が必要なのに、事前に時間を使っていなかったなら、後で何を揃えるべきかどうやって分かるのか分からない
      SOC 2の証明を簡単に取れるという話も、この話題について他の人から聞いたことと真逆だ。普通は非常に難しく時間がかかると聞いていたので、自分が何を見落としているのか気になる。本当に簡単なことなら、自分が間違っていてほしい
  • VPやCTOになるとコーディングをやめるという話をよく見る。マネジメント能力がコーディング能力ではないことは分かるが、なぜ人々がキーボードを置いて自分の第一のスーパーパワーを無駄にするのか理解しにくい
    最初から最後まで技術的なCTOであり続けることはできる。チームと会社を、積極的な貢献、保守、オンコール対応が必要なサービスのように扱い、同時に一人でもチームと一緒でも自ら手を動かして作るべきだ

    • VP/CTOレベルだと、コードに貢献して保守する時間はない。時間があるなら、その肩書きはおそらく象徴的なものだろう。たとえば3人のスタートアップチームの「CTO」のような場合だ
      本当の問題は、キャリアの早い段階でコーディングする時間のない役割に就くことだ。ホワイトボードに箱を描くだけで会議を渡り歩くアーキテクト役や、実質的には管理職なのに「テックリード」と名付けられた役割を受け入れるようなことだ。コードを書かないことに慣れ、数年後に新しい仕事を探さなければならなくなったとき、プログラミングキャリアのかなりの部分をコードを書かずに過ごしたという事実と向き合いながら、コーディング職の面接を受けることになる。多くの人にとって勘はすぐには戻らない
    • 私の経験では、1日にそれだけの時間しかないという問題だった。7年間、直接・間接に責任を持つ人が20〜25人ほどいて、コードで有用なことを成し遂げる時間が本当に足りなかった
      自分の時間は、他の人が解けない問題を解決することに使う方がはるかによかった。たまにごく単純な変更を引き受け、自分たちのプロセスを自分で通ってみて、どこを改善できるか確認することはあった。夜や週末にはコーディングを続けていたが、同じ感覚ではなく、時間が経つと少し錆びつくのは避けられない。それでもサバティカル中に一日中手を動かしてコーディングするのは本当に楽しかった
    • 単なる個人貢献者でないなら、別の優先事項が出てくる。だから個人貢献の作業はいつでも中断され得る。するとクリティカルパスに近い仕事は担当できず、担当すると他の人をブロックするか、引き継がなければならなくなる
      レビューや設計会議はできるが、中核的な作業を受け持つと結局問題が起きる
    • 正解が一つあるとは思わないが、ある時点からはVP/CTOのコード貢献よりも、次の中核エンジニアを採用したり、競争で先行するための技術ロードマップを作ったり、エンジニアリング組織を会社の他部門と整合させたりすることの方が、はるかにレバレッジが大きい
      VP/CTOが書けるコードは、チームの他の誰かも書けるし、ひょっとするとよりうまく書けるかもしれない。一方で列挙した他の仕事は、社内でVP/CTOが最も得意である可能性が高い。チームと会社にとってより重要な仕事のために、実務的な技術作業をほとんど手放すのはかなり合理的な判断だ
    • 最後のCTO職は40人のチームで、初日から完全に過負荷だった。時間管理は得意な方なのにそうだった。可能なら時間の50%はプログラミングに使いたかったが、その時間はなく、委譲できる支援構造もなかったので自分で苦労して作らなければならなかった。それ自体がまた時間がなかった理由でもある
      コーディングを続けるという考えは良いが、通常それが報酬を受け取る理由ではない。自分を非常に強い開発者だと思っているが、そういう開発者はCTOの給与より低いコストで雇える。より高価なCTOがその仕事をするのは非効率だ。ちなみに数年後に個人貢献者に戻り、残りのキャリアもそうするつもりだ
  • 同期式チャットというものは存在しないと言いたい
    同期式である必要があるなら、チャットウィンドウでやるべきではない。少なくとも「数分間リアルタイムチャットに集中しよう」と合意した場合でない限り。リモートなら電話し、現場なら対面で話すべきだ。チャットにメッセージを投げて即答を期待してはいけない

  • 「2チーム」体制で恨みが生じなかった事例があるのか気になる。人々が自然に未来チームへ移りたがらない場合もあったのだろうか
    紙の上では良いアイデアに見えるが、実際にうまく機能するとは信じにくい。私が見た中で最も近い形は、デザインシステムやコンポーネントのようなサービスを作って他のチームに使わせるライブラリチーム程度だった

    • 以前の職場には、サポート終了予定のバージョンに対して会社が超長期の延長サポートを販売したオンプレミス製品のバージョンがあった。小さなチーム、おそらく3人程度が、そのバージョンがサポートされ、パイプラインが動作し、必要なら大きな修正もデプロイできるようにすることだけを担当していた
      その責任さえ果たしていれば、残りの時間は会社に価値があると見なされる仕事を自由にできた。かなり良い取引だった。他の人たちは、その小さなチームが汚れ仕事を引き受けてくれることに感謝していたし、保守チームは余った時間でずっと気になっていたことを直したり研究したりできるので喜んでいた。細部は忘れたが、かなり素晴らしい改善や研究成果が出ていた記憶がある。そのチームの人たちが非常に優秀で自律的だったことも成功に役立ったが、コストも余計にかかった
    • 本では、この問題の解決策として定期的なローテーションを提示しているように見える。Microsoftのブログ記事は、毎週一部のチームメンバーを2つのチームの間で入れ替え、顧客チームを一時的なチームとして定義することを勧めている
      実際に、完全に分かれたチームがうまく機能していた場所をいくつか経験した。ゲームではエンジンチームとゲームチームを考えればよい。以前の役割の一つでは、ゲームチーム内でも6〜12週間かかる機能を担当してリリースした後、保守・アップデート・技術的負債に対応していた。リリースしたばかりのものが主な焦点ではあるが、以前の作業に戻る時間もあり、他のチームも同じ循環にいて、6〜8週間後に新機能にオンボーディングする、という形を繰り返していた
    • 以前、2チーム式のシステムを試したことがある。機能開発はRed Team、安定性とバグ修正はBlue Teamが担当する形だった
      固定チームとして扱わず、人々が毎スプリント、つまり2週間ごとに行き来する作業フローとして扱った。約3カ月はうまく回ったが、その後は合わなくなり、その頃には組織が大きくなって、チームをビジネス能力やドメイン中心に再編した
    • 似た例として、エンジニアが1週間ずつサポートとバグレポートを処理する当番制をやったことがある。完全に分離された「2チーム」の落とし穴はかなり避けられた。https://news.ycombinator.com/item?id=43337703#43339972 にもう少し書いた
    • 「顧客チーム」に十分なリソースがあり、報酬も適切なら、あえて「未来チーム」に移りたいとは思わないだろう。しかし分離しなくても、普通は保守が飢え、新機能がすべての関心とリソースを持っていく。2チームに分けると、むしろさらに悪化する可能性が高そうだ
  • こういう資料は聖書のように使うためのものではなく、責任と関心事を広く見渡してくれる点が良い
    優れた助言者がいるか、本当に優秀な人の下で働いた経験がない限り、この立場になったとき、誰かが隣に座って気にかけるべきことのリストを教えてくれるわけではない。各セクションごとに「私たちの答えは何か?」「同意するか?」「私たちのプロセスの方が優れているか?」「自分が見落としているものは何か?」と問いかけさせてくれるので役に立つ

  • 「2チーム」の分離がここまで明示されているとは。まともなものをリリースするコストが大きくなりすぎるまで、リリースを続けさせる素晴らしい方法だ
    最初にソフトウェアを作った人たちへ戻るフィードバックループを断ち切ると、その人たちは一時的により幸せになり、他の人たちは一時的により不幸になる。すると機能チームは二度と邪魔されたくなくなり、顧客チームは何かをきちんと直すためのリソースを受け取れなくなる
    さらに悪いのは、機能チームが行を出荷する方法以外、何も学べない点だ。時間が経つほど遅く高くつくようになる理由は、良いソフトウェア開発における唯一の適合度関数、つまり否定的なフィードバックを開発の源泉へ再統合する過程を取り除いてしまったからだ。本物のCTOリーダーシップハンドブックなら、「開発者がリリースしている間にも改善できるよう助けるのはあなたの責任であり、開発者たちが常にそれを好むとは限らない」と明確に言うべきだ

    • 「機能チームがカスタマーサポート業務に邪魔されず、未来に100%集中できるようにする」という言葉は、機能チームが自分たちの解き放った惨状をまったく知らないまま、船が氷山に完全に突っ込むまで進み続けられるようにする、という意味に近い
      営業が後押しする機能チームと、顧客担当者が後押しする保守チームの間でマージコンフリクトも起きる。「顧客チーム」が後で抜け出す段階のように描かれている以上、どちらが優先順位争いに勝つかは明らかだ。「個々のエンジニア、特にジュニアが学び成長するためのもう一つの道」という言葉は、結局「シニアが尻拭いを嫌がるのでジュニアにやらせる」と聞こえる
    • 関連する話として、私が働いた会社のうちプラットフォームチームがあったところは、たいてい過剰エンジニアリングに感染していた。ここでいうプラットフォームチームは、ツール、慣行、共通コードを管理する第三の支援チームのような意味だ
      こうしたチームは、機能をデプロイしてバグを直す仕事を見下し、問題を過度に抽象化しようとする人たちを引き寄せる傾向がある。バグを直す代わりに、バグが最初から生まれないようにすると言って、ますます複雑な抽象化を作り、結果は目に見えている
    • それはPMの仕事だ。顧客と協働し、フィードバックをもとにすべての機能がどう噛み合うかについてのビジョンを定める一人または数人が必要だ
      顧客、とりわけ非技術系の顧客は、一貫したプロダクトビジョンを持っておらず、他の計画とは関係なく目先の修正だけを求めることが多い。顧客同士がコミュニケーションしていないため、フィードバックが衝突することもある。この負担を開発者に載せると、開発者はコードベースを理解し適切に保守する技術力に加えて、すべてのコミュニケーションまで管理しなければならず、思慮深い判断を下すには、すべての開発者が同じ一貫したビジョンを持っていなければならない。最近のように開発者がインフラまで管理する役割なら、実質的に二つか三つの仕事を一人でやっているようなものだ
    • これを補うために、毎スプリントまたは数スプリントごとにチームを入れ替えた。人々はより多様な経験を積み、バグの多い機能を作れば結局自分で直さなければならないので、フィードバックも受け続けることになった
      人々はこの方式をずっと好んでいたように思う。常にバグばかり直すことに疲弊することもなく、あなたが洞察深く指摘したフィードバックの断絶も避けられたからだ
    • 開発者は自分が作ったソフトウェアを運用し、保守しなければならない。それくらい単純な原則だ
  • この時点で何度面接をしてきたか数えきれないほどなので、少し同意しにくい。難しい点の1つは、受付段階では応募者が多すぎる、あるいは多くなり得ること、そしてこの段階では通常、採用チームが応募者とやり取りすることだ
    例のような質問を入れるのはよいが、資格のない候補者をふるい落とすには、はい/いいえや尺度型ではない質問が必要だ。私は明確な答えがある、ごく簡単な質問を好む。JavaScriptに「非常に慣れている」と答えておきながら、===が何かを知らない人が驚くほど多い。だから「JavaScriptの厳密等価演算子は何か」のような質問をする。JavaScriptプログラマーなら誰でも知っているが、この質問1つだけで応募者プールの50%がふるい落とされ、組織の時間を非常に大きく節約してくれる

  • カルチャーフィットの話が多いが、そのかなりの部分は、会社に害を及ぼす隠れた差別の層を引き上げているように見える。文化的な開放性は成功要因であり、差別は逆方向に導くものだと思う
    「最高のリーダーは成功率を追跡し、採用ミスを認めることを恐れず、ゆっくり採用して素早く解雇する」という文を見ると、JWZ(Jamie Zawinski)がこのサイトを指すreferrerヘッダーを検知したときに表示する画像を貼りたくなる。Jamie ZawinskiがY Combinatorについて何と言ったか、Googleで探せばよい。彼はNetscape Navigatorをオープンソースとして公開するというNetscapeの決定と、そのブラウザレンダリングエンジンにつながった作業の大部分に功績のある人物でもある。だからFirefoxがある

    • 「カルチャーフィット」を隠れた差別と見るのは冷笑的な解釈で、私が見たケースでは、候補者が嫌がる仕事を任されないように守るために使われることの方が多かった
      初期に勤めた会社の1つでは、採用基準からカルチャーフィットと呼べるものをすべて禁止しようとした。その結果、何人かは入社してすぐ会社を嫌いになり、数週間から数か月で辞めていった。ある候補者は計画と予測可能性を重視し、以前の会社は動きが速すぎると不満を述べていた。私たちはスタートアップで、予想どおり彼は会社を嫌った。しかし採用決定の過程でそうした懸念を口にすることはできなかった。「カルチャーフィット」であり、差別につながり得ると見なされたからだ。同じようなことがさらに何度か起きた後、その方針は静かに消え、再びエンジニアリング文化との両立可能性を評価できるようになった
    • すべての雇用プロセスは差別を行う。重要なのは、どの特性に有利・不利に働くのか、そして何を排除するのかだ
      「カルチャーフィット」は概して、コミュニケーション効率と高い信頼を得る代わりに、思考の多様性を一部手放す取引だ。人々はすでにどう振る舞うべきか、互いに何を期待すべきかを知っているので、多くの指針を設ける必要はないが、集団思考や関連する認知バイアスにはより弱くなる。「この船には虹のあらゆる色があるが、われわれクリンゴンでさえクリンゴンは悪だと思っている」という感じだ
    • 脇道探索を受け入れて検索してみたが、最初のページの結果がすべてHacker NewsでJamie Zawinskiに言及したコメントばかりだったので、そこで諦めた。だから何の話なのか教えてほしい
  • 「説明動画ライブラリを作れ」という助言が良いのかはよく分からない。UIやアニメーションのような特定のものには筋が通るかもしれない
    しかし一般には、テキストを読むことの方が動画を見るより効率的だ。急いでいるときにテキスト内の重要な部分へ移動するのも、動画よりはるかに簡単だ

    • 動画が好きな人もいれば、テキストが好きな人もいる。どちらも労力と効果を必要とする投資だ。今では生成AIのおかげで、どちらも作りやすくなった