トレーディングターミナルのプロダクト構想があり、予算があり、エンジニアリングチームはいない。チームを雇うことと、作ってくれるパートナーと契約することは、同じものの二つの値段ではない。時間と知識とリスクの配り方が違う。それぞれの経路が何を請求するのか、引き継ぎに何が入っていなければならないのか、そして仕事が止まった日に何が手元にあるのかを扱う。
トレーディングターミナルの構想があり、予算があり、エンジニアリングチームはいない。次に来る問いは、ほとんどの場合、価格の比較として立てられる。エンジニアを雇うといくらか、どこかの会社に作らせて引き渡してもらうといくらか。
その立て方は判断を隠してしまう。どちらの経路も、行き着く先は動くコードである。違うのは、使えるバージョンが最初にいつ存在するか、一年後に誰がそのシステムを分かっているか、要となる人が抜けたときに何が起きるか、そして仕事が止まったときに何が手元にあるかだ。
短い答え。二つの経路は、単価ではなく四つのことで比べる ― トレーダーの前に出せるバージョンまでの時間、システムの知識がどこにあるか、人が抜けたときに何が残るか、そして仕事が止まった日に何を所有しているか。単価で勝って四つすべてで負ける経路のほうが、高くつく。
トレーディングターミナルは一つのシステムではない。マーケットデータの経路、注文発注の経路、pre-trade リスクチェック、取引所やブローカーへの接続、ポジションと口座の状態、板が動くあいだ描き直し続ける画面、そして引け後にそのすべてを照合するバックオフィスである。
採用するとき、あなたはそのシステムを買っているのではない。それを生む組織を作っている。仕組みについての知識はゼロから始まり、雇った人たちの頭の中に溜まっていく。その人たちが留まるあいだは資産であり、留まらなければ、それがそのままリスクの全部になる。
パートナーと契約するとき、あなたが買っているのは、すでによそに存在するシステムと決定の履歴である。知識は高い位置から始まり、初日は社外にある。それが社内に移るかどうかは契約の条項と日々の進め方の問題であって、放っておいて起きることではない。
ここでいうシステムの知識が何を指すのかを、具体的にしておくとよい。それはソースコードではないからだ:
そのどれも、放っておいてリポジトリに入ることはない。それは人の中にある。書かせる手順がない限りそのままであり、その人が自社の従業員でもパートナーのエンジニアでも同じだ。
採用の経路の前には、予算では取り除けない待ち行列がある。技術的に説明できる募集要項を書き、トレーディングのエンジニアが希少な市場で候補を探し、社内の誰もまだ評価できないスキルを面接し、退職予告期間を待ち、そして最初のしばらくは、新しいチームがアーキテクチャを作るのではなく議論するのを眺めて過ごす。
パートナーの経路は、候補探しではなくスコープから始まる。時間の差はそこから来る。取り除けないのは、あなたにしかできない仕事だ。そのターミナルが何のためのものか、どの銘柄とどの取引所が先に重要か、最初の利用者は誰かを決めること。
そして日程の一部はどちらの経路にも属さない。次の項目は、誰がコードを書いていようと自分のペースで進む:
だから正直な比較は、二つの納期の競争ではない。自分では動かせないものを仕事の前にどれだけ少なく置く経路か、そして自分で動かせる部分をどちらが早く始められるか、という問いである。
同じ問いを両方の経路にぶつける。マーケットデータのハンドラを書いたエンジニアが月曜に働けなくなったら、火曜に何が起きるか。そしてその次の四半期に何が起きるか。
自分で雇った小さなチームでは、答えはたいてい一人の名前に懸かっている。初期のチームは構造上、知識を集中させる。ある一人がホットパスを持ち、別の一人が接続を持ち、ロードマップは残っている人に合わせて静かに組み直される。パートナーの場合は、そこでコードを読んだエンジニアが一人より多いかどうか、そしてそれが契約に書かれているかどうかに懸かる。
どちらの体制も、それ自体では安全ではない。あなたの案件に一人しかエンジニアを置いていないパートナーは、二人の社内チームと同じように脆い。守り方はどちらも同じだ。後から復元するのではなく、生まれている最中に知識を書き残すことである。
どちらの経路でも使える受け入れテストがある。そのシステムを見たことのないエンジニアに、ドキュメントとクリーンなマシンを渡し、テスト環境でターミナルを立ち上げて注文を出してもらう。そのエンジニアが人に聞かなければならなかったことは、すべてまだあなたが持っていない知識である。
引き継ぎという言葉は、まるで違う二つの出来事を指す。一つはファイルの受け渡し。もう一つは、作った人たちなしで続けていける能力の受け渡しであり、金を払う価値があるのは後者だけである。
後者は、一つひとつに受け入れテストを付けた成果物の一覧として、スコープに書き込む。妥当な一覧はこうなる:
一度も予行演習していない引き継ぎは、成果物ではなく計画である。最後の請求書の後ではなく、開発の途中で演習する。やり方は単純だ。システムを書いた側が黙って見ている前で、あなたのエンジニアが変更をデプロイし、ロールバックする。
所有権は引き継ぎとは別の問題であり、最後に判明するものではなく、着手前に契約で決着させるものである。私たち自身の答えは一文であり、どの文書のどの版でも短くしない。
クライアントはプロダクトとコードの完全な所有権を保持する。ただし当社の再利用可能なコンポーネントは除く。この例外こそ、どのパートナーとでも ― 当社を含めて ― よく読むべき箇所である。再利用可能なコンポーネントとは何か、どんな条件で使い続けられるのか、自分で作り直せないものなしにシステムがビルドできるのか、そして両者が協業をやめたとき、そのコンポーネントはどうなるのか。これを尋ねること。
この問いはたいてい二択で立てられる ― チームを雇うか、丸ごと誰かに渡すか。実際には、ほとんどの開発はその両極のあいだにあり、システムが成熟するにつれて位置を動かしてよい。
三つの形態がある。フルデリバリー、専任チーム、あるいはあなたのチームに入るエンジニア。私たち自身の側はそう説明している。三つの違いは請求書ではない ― 計画を持つのは誰か、優先順位を持つのは誰か、結果に責任を負うのは誰か、である。
最後の点が、もとの問いのほとんどを解いてしまう。パートナー経路のいちばん強い形は、最初から自社チームを前提に組む。すでに存在するシステムに対して採用でき、面接は候補者がこれから保守するコードに基づき、新しく入った人が最初に読むのは空のリポジトリではなく決定記録になる。
この判断で最も役に立たない数字が単価の比較である。二つの経路は違う単位で請求してくるからだ。両方のリストを並べ、正直に費用を出す。
採用の経路が請求してくるもの:
パートナーの経路が請求してくるもの:
次に出口を積算する。どちらの経路にも出口があるからだ。採用の経路は、自分で作ったチームを縮めることで終わり、知識はその頭の中に入ったまま出ていく。パートナーの経路は、予行演習をした引き継ぎか、しなかった引き継ぎで終わる。この二つの終わり方の隔たりが、その経路のリスクである。
何かに署名する前に、両方の選択肢を一つの問いに通す。これが金曜に止まったとして、月曜に手元に残っているものは何か。答えは成果物で出す ― リポジトリ、再現可能な環境、ドキュメント、そしてそれらからシステムを再構築できる人。意図は人の退出に耐えないが、成果物は耐えるからだ。
amBrain が公に裏付けられること:私たちは2019年からアルメニア・エレバンでソフトウェアを作り、ホットパスは Rust で書いてきた。トレーディングターミナル Spectre Trade を構築し、私たちが構築したミニ取引所は MOEX のコロケーションで本番稼働している。自分のターミナルのために採用とパートナーを天秤にかけているなら、上の引き継ぎリストを最初の話し合いに持ち込み、向かいに座る相手に ― 私たちを含めて ― 一行ずつ答えてもらってほしい。
現在のアーキテクチャと気になっている障害シナリオをお持ちください。30 分で一緒に確認します。