スタートアップでの最初の1ヶ月は、心に深く刻まれる。緩やかな立ち上がりなど存在しない。IT部門がノートPCを準備するのを待つ間、オリエンテーションビデオを眺めて過ごすような時間もない。初日から、実際に人々が利用するものを構築し、壊し、そして修正することが求められる。求職者が応募状況を整理するためのツールを開発しているTreevahに加わったことで、私はこれをすぐに学んだ。初期段階の環境で過ごした30日間は、教室やコンテストで学んだことよりも、ソフトウェア開発について多くのことを教えてくれた。

容赦のないリズム

Treevahでは、仕事はあなたが慣れるのを待ってはくれない。チームは製品をアルファ版からベータ版、そして最終的にはプロダクション環境へと移行させようと突き進んでおり、すべてのタスクが重要な意味を持つ。教授の受信トレイに仕舞い込まれるような、形だけの作業や課題のための課題をする余裕はない。機能をリリースすれば、それは次の仕事を探しながら締め切りや面接、フォローアップを管理しようとしているユーザーに直接届く。

そのペースは消耗する。毎日猛スピードで動き続け、仕事量は予想以上の速さで積み上がっていく。締め切りは抽象的なものではない。それは、会社がより多くの求職者にサービスを提供できるか、あるいは現在の体験における欠陥を修正できるかを左右するマイルストーンに直結している。その重圧は身にこたえる。しかし同時に、大企業では見つけるのが難しい「明快さ」も生み出してくれる。タスクを完了したとき、自分が構築したものと、それによって仕事探しが楽になった誰かとを、一本の直線で結ぶことができる。その当事者意識(ownership)は稀有なものであり、それが疲労を価値あるものに変えてくれる。

プロダクション環境ではスキルがより速く積み上がる

この夏の前まで、私のエネルギーの多くはパブリックスピーキングやハッカソンに向けられていた。そのどちらも、プレッシャーの中で即座に考え、アイデアを提示する方法を教えてくれた。特にハッカソンは、数時間で動くデモを急造する訓練になる。しかし、審査員を感銘させる週末のプロジェクトと、何百人もの実ユーザーとの接触に耐えなければならないプロダクションコードの間には、大きな違いがある。

Treevahでウェブ開発に集中した1ヶ月間は、その差を埋めるものとなった。学校でのプロジェクトにはガードレール(制約)がある。スコープは固定され、要件は手取り足取り与えられ、もしデータベースのスキーマが崩壊しても、プレゼンテーションのスライドで言い訳ができる。スタートアップでは、実際の求職者が実際の応募データを保存するため、スキーマは耐え抜かなければならない。フィードバックループは即座であり、容赦がない。ページの読み込みが遅かったり、フォームの保存に失敗したりしたとき、誰もあなたの成績など気にしない。彼らが気にしているのは、チャンスを見失ってしまったかどうかだ。

そのプレッシャーが成長を促す。ルーブリック(評価基準)が求めているからではなく、深夜にデバッグするのは自分自身だからという理由で、よりクリーンなコードを書くことを学ぶ。コードレビュー中に、より鋭い質問をするようになる。なぜなら、壊れたビルドをデプロイすることは、実ユーザーが壁にぶつかることを意味するからだ。ここでの機会は、学校のプロジェクトよりもずっと重みがある。ミスによる代償が大きいため、教訓が身に刻まれるのだ。

バグという謙虚な現実

もし私が打ち砕きたい神話が一つあるとするなら、「すべてのソフトウェアのバグは劇的な論理的失敗である」という考えだ。もちろん、そうしたバグもある。しかし、Treevahで遭遇したバグの多くは、苛立たしいほどに些細なものだった。それらは目の前に隠れており、私の人生の何時間もの時間を浪費させた。

2つのパターンが繰り返し現れた。1つ目は、重複したCSSルールだ。数スプリントにわたって複数の開発者が同じコンポーネントに触れると、スタイルシートは肥大化する。ある人がマージンのユーティリティクラスを追加し、別の人がコンポーネントファイルに値をハードコードする。単体ではどちらも間違っていない。しかし、それらが組み合わさることでレイアウトシフトや詳細度(specificity)の争いが起き、Chromeではボタンが正常に見えてもSafariでは壊れて見えるといったことが起こる。それを突き止めるには、エレガントなアルゴリズムのロジックを読む代わりに、ブラウザの開発者ツールを開き、計算済みスタイル(computed styles)を一行ずつ調べ上げる必要がある。

2つ目は、親のdivの外で要素を定義することだ。モーダルのトリガーやドロップダウンが、DOM内の間違ったノードに追加されてしまうことがある。画面はほぼ正しく見えるため、構造は健全だと思い込んでしまう。すると、z-indexの競合が発生したり、クリックイベントが間違ったハンドラーにバブリングしたりして、突然ユーザーが応募フォームを覆っているポップアップを閉じられなくなったりする。これらはコンピュータサイエンスのパズルではない。素早く動いているときに積み重なっていく、空間的・構造的なミスなのだ。

これらのバグの中には、見つけるのに数週間かかるものもありました。コードをじっと見つめ、ロジックは正しいと自分に言い聞かせ、結局どこにも辿り着けない袋小路へと迷い込んでいくこともありました。そのもどかしさは、本当に凄まじいものです。何か明白なことを見落としているような気がして、実際、その通りなのです。しかし、重複したルールや、位置の誤った閉じタグをようやく見つけ出した時の達成感は、驚くほど...