エンジニアtype - エンジニアのシゴト人生を考えるWebマガジン

スタートアップの宿命、開発における「ゴールの見えないタスク」との向き合い方

公開

 
グローバルスタートアップに学ぶ、世界に通用する仕事術
synclogue_logo

Synclogue International, Inc. 広報担当(@Synclogue

Windowsアプリの同期ソフトウエア『Synclogue(シンクローグ)』をはじめ、新しいSyncの仕組みを提供するテクノロジー企業、Synclogue International Inc.の広報担当です。『Synclogue』を世界中で利用されるサービスに育てることがミッション。月に1度は米国と日本を行き来しています。世界トップレベルの技術力を持つエンジニアに囲まれながら奮闘する文系男子

こんにちは。Synclogue International, Inc(シンクローグインターナショナル)の広報担当です。

前回のコラムに引き続き、欧米・日本・アジア地域に拠点を持つITスタートアップ企業として、「グローバルスタートアップに学ぶ、世界に通用する仕事術」についてお話をさせていただきたいと思います。

今回は、国や言語の違いに関係なく、スタートアップ企業で働くエンジニアにとって避けられない課題である「ゴールの見えないタスク」との向き合い方について、ある開発者の体験を基にお話したいと思います。

イノベーションへの挑戦の影にある地道なデバッグ作業

debug-image

From Zach Klein
スタートアップが挑戦するイノベーションとは、言葉の響きこそカッコイイが実際には苦労の連続

当社が開発・提供しているWindows向けアプリケーションのアプリと設定の同期ツール、『Synclogue(シンクローグ)』の最大の特長は「その存在を意識させないこと」です。

アプリの同期システムは、以前からさまざまな取り組みが行われてきましたが、それらはすべてユーザーに特殊なアプリの起動方法を要求したり、特殊な設定をさせることが障壁となって、各々が持つポテンシャルほどには活躍の場を得られていません。

Synclogueでは、この問題をいくつかの技術的な挑戦によって解決しています。例えば対象プログラムの動作に合わせて適切にデータを与える技術、また逆に実際に動作させる前に最大限プログラムの情報を収集・解析して必要なリソースを事前に集める技術、といったものです。

それらの中でも特に重要なのが、対象アプリケーションには普段通りに振る舞ってもらえるように準仮想化環境を提供し、Synclogueのシステム上に設定が受け渡されるように、協調して動作する仕組みです。

人間と同じように、アプリケーションの中にも環境の変化に無頓着なものもあれば、そうした変化にとても敏感なものもあります。そういったアプリケーションたちは、Synclogueによる準仮想化環境に敏感な反応を示して、正常に動作しなくなってしまいます。

Synclogueでの開発業務の一つは、そういったアプリケーションたちの上げる「声なき不満」の原因を調べ上げて解決すること――つまり“デバッグ”です。

普通、“デバッグ”といえば、書かれたコードの中にあるバグを探し出すことを言います。ところがSynclogueではその性質上、同期対象となるアプリケーション、つまり他人の書いたコードとSynclogueの相性の悪い部分を見つけ出さないといけません。

経験のある方にはご想像いただけると思いますが、他人の書いたコードをメンテナンスすることには、独特の難しさがあります。ソースコードは、書いた人の思考回路が純粋に反映されています。さまざまな付加情報を持つ「人間の言葉」を使ってもなかなか他人の頭の中の成り立ちは分からないのに、補助的な、逆に言えば冗長な情報を削り落として書かれたソースコードからその意図を読み解くのは至難の業です。

それに加えて、Synclogueが相手にするのは、ソースコードがオープンに提供されていないソフトウエアがほとんどです。ソースコードが提供されていないので、手掛かりになるのはコンパイル済みのプログラムだけです。

これは、人間が読むことを意図されていない純粋な数列なので、解読作業はさらに複雑になります。

「ゴールの見えないタスク」との遭遇

debug-image-02

From Dwayne Madden
「名前のないコンパイル済みプログラム」との格闘は、想像以上に難しい

そんな解析作業が、今回話を聞いた開発者が担当することになったタスクでした。

コンパイル済みのプログラムを読むということ自体は、かつて経験していました。違うのは、他人が作ったプログラムだというだけで、それを除けば経験済みのことです。取り組むときの抵抗感は、彼にとってはほとんどなかったようです。

ところが実際に取り組んでみると、その作業が深く果てしないものだということが分かってきました。

ソースコード上では名前が付けられ、意味と紐付いていた変数たちも、そこではすべて名前を失ったただのメモリ領域になっています。そこには配列と構造体の区別もないし、本来は関数呼び出しだったはずのものが、前後の命令の中に展開され埋め込まれていることもあります。

もちろん、その作業自体は経験済みで、分かっていたはずのことです。それ以上に彼の心を折ったのは、自分が苦労して見つけ出した「違和感のある挙動」が、実は自分が本来探していた「バグの原因」ではなかった、ということが多発することでした。

名前のないコンパイル済みプログラムの霧の中でも、うっすらと手掛かりのようなものは見えていました。でもそれがゴールなのか、つまり本当に今探しているバグの原因なのかまでは分かりません。膨大な情報量の霧の中で、進むべきなのが前なのか後ろなのか分からなくなっていました。独りきりで作業しているということも、悪い影響を与えていたと言えます。

そんな「ゴールの見えないタスク」に頭を悩ませている折、新たにアルバイトをしたいという学生さんが2人やってきました。スキルは十分だったので、彼はさっそくSynclogueの日常業務である「デバッグ」の内容を説明しようとノートを開きました。

その時にふと、彼は自分がこの人たちにこれからお願いしようというタスクのことを、全然明確に定義できていないことに気付きました。開発者としての自分は、何となく「このバグの原因を見つける」という明確なタスクに着手していたつもりでいたのですが、そのタスクの内容を誰かに説明できるかと問われれば、「ほとんど勘」と言うほかない状態でした。

ゲームに学ぶ、「ゴールをデザインする」という作業

game-image

From Ángelo González
いつも楽しんでいる「ゲーム」を、一プレイヤーとしてではなく「ゲームデザイナー」の視点でとらえ直すと…

このように大きな壁にぶち当たってしまった彼ですが、ここで1つの解決策を立てました。それが「チェックポイントを自分で設定する」ことです。

「ゴールの見えないタスク」はあっても「ゴールのないタスク」はありません。ただし、作業としてはゴールが見えないので、見えないゴールの代わりに見えるチェックポイントを置くという発想です。

分かりやすく説明するために、彼はゲームに例えて話をしてくれました(ちなみに彼は難易度の高さで有名な『ドラゴンクエストⅡ』の大ファンなのです)。

例えばスタートからラスボスを倒すまでの間にランダムエンカウント戦(草原や洞窟を歩いていると魔物に遭遇するという類の戦闘)しかないゲームは、今どのくらい進んでいるのかが分からなくて不安になります。その代わりに、大陸間をつなぐ洞窟に中ボスを置くことができます。この洞窟を抜けて次の大陸にいくには、この中ボスくらいは倒せないとダメだよね、という基準を設定することができます。

ここで重要なのは、この時のあなたの役割が、プレイヤーではなく「ゲームデザイナー」になることです。

例えば「あるアプリで発生するバグの原因調査」というタスクでは、そのまま何も考えずにタスクに取り掛かった場合、いくつもの技術領域を行き来しながら調査を進めることになってしまいます。結果、非常にレベルの高い、果てのない作業を強いられることになります。

いわば、まだレベル1なのに、ザコから最終ダンジョンのモンスターまで、さまざまなレベルのモンスターが混在する草原でひたすら戦い続けるような状況です。

これではあまりに非効率過ぎると考え、「このレベルならこの敵は倒せるだろう」という設計を行って、必要な技術に応じて調査を段階的に分割して道筋をつけたところ、担当者はスムーズに作業を進めることができるようになりました。

重要なのは「ゴールを作る」こと、自分の役割に気付くこと

スタートアップには不明瞭なタスクがたくさんあります。でも、そのタスクが不明瞭でなければならないという道理はありません。不明瞭で「ゴールの見えないタスク」をやることになったら、次にそのゲームをプレイする人のためにレベルをデザインすることが重要です。

新しく誰かがそのタスクに参加するとしたら、最初はどんなアビリティがあって、何をどういう状態に持っていけばどのレベルに達したと言えて、ラスボスを倒す目的は何なのか……。

スタートアップの仕事には「ゴールが見えないタスク」が、着手するまでそれと分からない姿でいろんなところに潜んでいます。やるべきことがまだあいまいなスタートアップにとっては宿命といえます。

だからこそ、自分が着手しているのが「ゴールの見えないタスク」だと気付いたら、今はそれを「勘と勢い」で倒すべきときなのか、それとも次の勇者のためのレベルデザインをするべきときなのか、一度足を止めて考えてみよう、と思うようになったのでした。

現在、Synclogueの開発では要望のあったアプリについて調査するチームを発足し、モンスター退治……ではなく、世界中のアプリの90%が動作することを目標に、チームでゴールをデザインしながら「ゴールの見えないタスク」に立ち向かっています。

■SynclogueのWebサイト:https://www.synclogue.com/