ソフトウェアアーキテクトになる前、私はアンマンのゲームセンターのネットワークを直す人だった。その前は、コンピューターショップの販売員とレジ係だった。17歳で始めて、22歳でその世界を離れてCISの学位を修了し、プロとしてソフトウェアを作り始めた。
この経歴の部分を就職面接で前面に出すことはない。しかし常に考えている。それはシステムをどうデバッグするか、信頼性についてどう考えるか、技術的な問題について非エンジニアにどう話すかを形成した — それ以降のどんな仕事よりも。
Explosion Network Gaming Centre、2007〜2009年
肩書きはネットワーク管理者兼マネージャーだった。実際には:ネットワークを動かし、お金を管理し、マシンを管理し、客に対応し、ときたまCounter-Strikeでのカンニングでプレイヤーをbanした。
そう、私はCounter-Strikeでのカンニングでプレイヤーをbanする人だった。後悔は一切ない。
ネットワークは物理的なLAN — ケーブル、スイッチ、DHCP、ISPへのルーター、そしてアップタイムウィンドウに全く同情しないティーンエイジャーたちに常に激しく使われていた約30台のWindows XPマシンだった。何かが壊れたら今すぐ直さなければならなかった。「次のスプリントで対処する」ではない。「チケットを開ける」でもない。今すぐ。デスクにいる人は待っている、メーターは動いている(時間制で課金していた)、私がオペレーションチーム全体だった。
そのプレッシャーは、テック企業でのオンコールのストレスとは違う。よりシンプルでより即時だ:実際の人間があなたの目の前に立って、ステーション12のマシンがゲームサーバーに届かないために金を失っている。直せ。
物理的なLANがAWSでは学べないことを教えてくれること
ネットワークが触れるケーブルでできているとき、ネットワークは抽象的ではなくなる。「接続が落ちた」は具体的な意味を持つ。つまり:ケーブルはきちんと刺さっているか?スイッチポートは点灯しているか?DHCPリースは新鮮か?また誰かが壁パネルの裏のケーブルにつまずいたか?
ケーブルの長さを物理的に歩いてネットワーク問題をトレースしたことは数えきれないほどある。それはLinkedInのプロフィールに現れるスキルではない。しかし分散システムで何かがおかしいときに持っている本能の完全な基盤だ:問題はどこか具体的な場所にある。それを見つけろ。ダッシュボードから推測するな、パスをトレースしろ。
CS学位から直接クラウドインフラに入った私が一緒に働いた大半のエンジニアは、「ネットワーク」をAPIとして捉える心理モデルを持っている。それを呼び出し、それが応答する(通常は)。応答しないとき、CloudWatchのログを読む。それは問題ない。機能する。しかし何がネットワークをしているかについては他人のモデルに依存している。
ケーブルをトレースしたことがあれば、別のモデルを持っている。ネットワークは物理的なもので、しばしば恥ずかしいほど単純な障害ポイントがある。金曜の夜にゲームホールを落としたスパニングツリーループは、データセンターリージョンを落としたBGPの設定ミスと同じクラスの問題だ — トポロジーは誰かが予測すべきだった予測可能な方法で失敗した。当惑のスケールは違うが、カテゴリは変わらない。
レジ係の年月、お金を手で扱うことが教えること
ゲームセンターの前、私はCollection Computer Systems — コンピューターを売って、現金を受け取って、基本的なPC保守をする — にいた。17歳だった。
お金を扱うと価値についての考え方が変わる。哲学的な意味ではなく、非常に文字通りの意味で。客が立ち去りそうなとき、売上のまともなマージンが実際には何か、どんな素晴らしい技術的優位性があろうとも30秒で説明できない商品は小売の床からは絶対に売れない、という感覚を発達させる。
エンジニアリングの会議で、明らかに正しい解決策を提示する人を見てきた — 技術的に厳密で、十分な証拠があって、明らかに正しい判断 — そして部屋の誰もそれをビジネスが達成しようとしていることと結びつけなかったために消えていくのを見た。それはコミュニケーションの失敗であり、技術的な失敗ではない。カウンターの反対側に客がいる経路を通ってきたエンジニアは、直接開発に入ったエンジニアよりも通常早くそして内臓でこれを学んでいる。
客はユーザーストーリーではない。客は去ることができる人間だ。そこから下流のすべて — アーキテクチャ、アップタイム、フィーチャーの優先順位付け — はその人に留まる理由があることのために存在する。
誰もが予期しない部分:MUMPS、2010年
OSSクラブの後、学位の後、私はEHS/HAKEEMに入り — ヨルダンの国民医療システム — VistA上でMUMPSルーティンを書く時間を過ごした。MUMPSをご存知でなければ:1966年ヴィンテージの言語で、今もなお世界中の病院システムを動かし、悪名高く暗号的で、悪名高く重要だ。
これをならではの経路の文脈で持ち出すのは、同じことの別のレイヤーだからだ:30年間動き続けるヘルスケアソフトウェアを書く人たちは、デプロイパイプラインがロールバックを処理する人たちとは正確さに対して異なる関係を持っている。出力が臨床的な結果を持つシステムでは、「完了」の定義が違う。出荷して何が起きるか見てみる、ということはしない。
ゲームセンターが教えてくれた:今すぐ直せ、客は待っている。MUMPSが教えてくれた:やっていることをよく確認しろ、患者はそれに依存している。どちらも正しい。両者は緊張関係にあり、私のキャリアの大部分はその二つの極の間のどこかで文脈をナビゲートすることだった。
ならではの経路が実際に価値するもの
私はほとんどのアーキテクトが持ったことのない方法でカウンターの反対側にいた。問題を引き起こしていたケーブルを手に持った。カンニングでアカウントがbanされた理由を、技術的に正確かつ同時に理解可能な言葉で10代の若者に説明した。作った(または直した)ものの現金を受け取って、それが価格に見合うかどうかをすぐに理解した。
これらはCV上のスキルではない。CV上のスキルの下にあるスキルだ。
私のような経路を通ってきたエンジニアに気づく特定のものは、根本原因についての特定のこだわりだ。何かが壊れているとき、それを引き起こしている物理的なものがある。ビジョンではなく、サービス間のぼんやりした誤コミュニケーションでもなく — もの。そのものを見つけろ。LANケーブルは刺さっているかそうでないかのどちらかだった。その認識論は分散システムに驚くほどよくスケールする。
もう一つのこと:非技術的なステークホルダーへの忍耐。親に子供のアカウントがなぜ停止されたかを説明したり、客に広告の商品より欲しいコンピューターの値段が高い理由を説明したりしたなら、ゲームに参加しているが文脈を持たない人々に技術的な決定を説明する練習をしてきた。これはかなり複雑な組織でシニアエンジニアがすることの大きな割合だ。
誰もが良いアーキテクトになるためにレジ係から始める必要があるとは思わない。しかしシステムの受け取る側にいた — ネットワークが機能しているかどうかが自分の体験を左右する人間だった — エンジニアたちは、キーボードの反対側だけからでは本当に獲得しにくい何かを持っていると思う。
私の経路は小売からゲームホールのネット管理者、MUMPSから分散システムへ。それはプレイブックではない。ただ私のものであり、直線と取り換えるつもりはない。