Findy Engineer Lab

エンジニアのちょい先を考えるメディア

何が事業貢献なのか分からなくなっていた伊藤直也さんが再認識したユーザーエクスペリエンスへのコミット

ソフトウェアエンジニアは、どのように事業に貢献すべきか? 宿泊施設やレストランの予約サービスを提供する株式会社一休で執行役員CTOを務める伊藤直也さんは、2016年に入社しておよそ2年間、心の奥に抱えた悩みを解消できないまま仕事をしてきました。

伊藤さんは、2000年代から複数のWeb系テックカンパニーで技術部門のリーダーとして活躍し、現在でも利用される個人向けWebサービスのローンチをいくつか手掛けています。一休には入社以前からフリーランスで技術顧問を務めており、会社がヤフーグループ(当時)に入って経営陣が一新されるタイミングで、代表取締役CEOとなった榊淳さんの要請を受けて入社しました。

当時は全て.NETだったというサービス基盤の刷新や技術的負債の解消、開発組織の整備といったエンジニアリングにおいて重要な改善を進めてきましたが、あるとき自身が「事業に貢献していない」ことを明確に意識することがあったといいます。そこで気づいた仕事の仕方やビジネスに対する意識、そしてエンジニア個人が事業に貢献するとはどういうことかを伺いました。

プリンターすら使えない中で技術的負債の解消に着手する

── CTOに就任されてから8年になりますが、一休の開発体制にはどんな変化があったのでしょう?

伊藤 現在の全社員が約300人で、そのうちエンジニアとデザイナーが合わせて90人弱います。入社当初はエンジニアが50人おらず全社員も200人ほどで、開発者の人数だけでなく比率も大きくなっています。

── それは会社やエンジニア組織の役割が変化するタイミングでもあったということでしょうか?

伊藤 もともと一休の強みは、他のサービスでは扱っていないホテルやレストランを予約できることでした。それは営業部門が頑張って、人気や評価の高いホテルやレストランと交渉してきた成果です。ところが近年は、インターネットで予約できないホテルはほとんどありません。インターネット予約できるレストランも、ホテルに比べると少ないですが、増えています。

そのためユーザーの関心も変わってきました。現在では良いホテル・レストランをどれだけカバーしているかに加えて、サイト自体の使いやすさ・行きたいホテルの探しやすさ・値下がりしたホテルをリアルタイムで見付けられるといったところに予約サービスのバリューがあります。サービスとしてはマーケティングとプロダクトによる勝負も必要になっているんですね。

そのため、もちろん営業部門はこれからも必要ですが、開発部門のエンジニアが増えているんです。

── CTOとして入社する際に、すでに稼働しているサービスに後から参加する、とくにリーダー的な立場となるとエンジニアから信頼を得られるかなと難しいこともあったのではないでしょうか。

伊藤 技術顧問をしていたのでエンジニアとの関係は問題なかったのですが、CTOという立場でいわばパラシュート人事で入社したため、オンボーディングも一切ないままで業務に取りかかることになったのはたいへんでした。普通なら新入研修で業務システムの使い方くらいは学ぶじゃないですか。僕は、書類をプリンターで印刷することもできなかった。

それでもマネージメントだけでなく、社内コミュニケーションツールの選定といった情シス的な仕事なども発生するし、エンジニアのスキルや特性も掴まないといけない。トラブルが起きてもまだデータベースの構造が分からない。いろんなことが分からないまま、やることだけがたくさんある状態で、コードを1文字も書かないうちに半年が過ぎました。

今から思うと、プロジェクトのどれかに参加させてもらえば、システムやサービスのこともすぐに理解できたんでしょうが、当時は現場に飛び込めずに苦戦していました。

── そんな中、伊藤さんはまず技術的負債の解消に着手されていますね。

伊藤 さすがに半年ほどすると、ある技術基盤の大きな問題が見えてきました。その技術負債を解消するにはアーキテクチャの設計から考える必要があり、かなりスキルのあるエンジニアをアサインしないといけない。アサインを考えたり周囲を説得するのにもコストがかかるので、自分1人で始めたんです。

数カ月にわたって黙々とコードを書き、ある程度まで作れたらサービスに組み込むため「一休レストラン」のプロダクトチームに引き継ぎました。この成果はセミナーでも発表して、外部からも高く評価されました。他にもオンプレからクラウドへの移行など、基盤に関わる改善はいろいろと手掛けました。

技術的負債と向き合う - Speaker Deck

一方でこうした改善の成果は、会社の経営陣からの評価とはギャップがあったんです。もちろんシステム改善に対して評価が低いわけではないんですが、本当に役員が、CTOがやるべき仕事なのか? その認識が、榊CEOとその当時の僕でズレていたことは確かです。

自分は事業に貢献してないのか? 何をすれば貢献なのか?

── 技術的負債の返済であったり、オンプレからクラウドへの移行であったりはサービスの基盤に関わることですから、CTOの仕事なのは間違いないように思います。

伊藤 当時の取り組みが必要なことだったとは、今でも思います。仮にもう一度そのときに戻っても、同じように1人で取りかかるんじゃないでしょうか。

ただそれだけでは、役員としては不十分なんです。それを痛感する出来事が、2018年の春先に役員合宿でありました。日中は淡々と会社全体やビジネスのことを話して、夜の懇親会には榊さんが「せっかくだから皆の良いところと悪いところを3つずつ挙げよう」と言い出して、といっても「コミットメントが高いよね」とか「もっとプレゼンが分かりやすいといいね」といったレベルだったんですが。

それなのに僕のときだけ、3つ目の悪いことが「naoyaさんは事業に貢献していないよね」という根本的な指摘だったんです。自分でも何となく気にしていたことを、ついに言われてしまっただけに、ショックも大きかったですね。この夜は、ずっとこの言葉を反芻して眠れませんでした。

── 基盤整備によってシステムが安定したことには十分な価値があると思いますが。

伊藤 はい、それは榊さんも分かっていたと思います。ただ、その成果による事業への貢献は間接的なものですね。僕が事業そのものにコミットした成果ではない。僕にはそれまで自分でサービスを企画して作ってきた経験もあるので、新しいユーザーエクスペリエンスを顧客に提供できてこそ直接的な事業貢献につながることは、自分でも分かっていました。

役員ならば会社全体の問題にコミットすべきで、仕事を技術領域に固定しているなら、それは技術部長止まりということなんです。だから、榊さんの指摘に反論もできないし、かといってすぐに解決策が思いつくわけもなく、しばらく悶々としていました。

── 直接的に事業に貢献する仕事ができるようになったきっかけには、何かあったのですか。

伊藤 役員合宿の少し後ですが、一休レストランの根幹にあたる「在庫システム」を作り直せないかと榊さんから相談されました。在庫システムはレストランごとの空席を管理するもので、予約サービスのコアとなる機能です。

既存の在庫システムは設計が古かったため、2回転目の予約が取りづらいなど柔軟性を欠いていて、非常に使いづらいものになっていました。結果、皆が運用でカバーするので、運用業務が年々複雑になっていました。このままではいつか破綻することが明らかなのですが、誰も問題を構造化できていなかった。僕もそれまでならレストランの業務知識がないので、一休レストランのチームに「これやって」とアサインしていたと思います。

ですが役員合宿での出来事があったので、今回ばかりは「僕がやります」と宣言しました。レストランのこともシステムのことも分かってないけど、とりあえずやってみよう。基幹の業務システムのど真ん中に初めて飛び込むことにしました。

エンジニアが利用者に会うと仕事のオーナーシップが生じる

── 業務知識がない中でサービスを作るにはなかなか難しいと思いますが、どう進めたのでしょうか?

伊藤 僕が「やります」と宣言して最初にやろうとしたのは、コードや設計書を読むことです。また、それまで手掛けた個人ユーザー向けのB2Cサービスでは、特定のユーザーにフォーカスするのではなく、ネットワーク越しにユーザーの行動を観察したり想像したりして、データに基づいて高い精度でユーザー全体を分析することで開発してきました。

B2Bでもそうやってできると思っていたのですが、結論としてできませんでした。業務システムの開発は、そういうものではなかったですね。

── 特定業界の業務システムを開発するために必要なことは何でしょうか?

伊藤 B2Bでは、毎日そのシステムを使ってる利用者の業務そのものを見ることで、自分が作っているサービスを理解する解像度が一気に上がるんです。榊さんにも「お店に行けば、空席管理の何が問題かすぐに分かるよ」と言われたのですが、当時の自分の引き出しにはそういうカードがなかったんですね。もともと知らない人と話をするのが苦手だからプログラミングを職業にしたところもありますし。

できれば社内で済ませようといろいろ言い訳していたら役員会で「いいから行ってきなよ」と言われてしまって、営業に相談してある高級ホテルのレストランを紹介してもらい、スーツを着て訪問しました。

そのレストランの方は、空席管理やレストラン予約にとても詳しくて、話を聞いていると何が問題か、もう一発で分かるんです。それから他のレストランも訪問しましたし、最初のお店には2〜3週間に1回くらいのペースで通って、いろいろなことを教えてもらいました。

── サービスを利用する現場を見ることから分かることが多いというのは納得です。

伊藤 利用者の業務を見ることは、業務システムの開発においてもちろん必要なことですが、1人のエンジニアとしてのメリットはそれだけじゃないんです。実際の現場に行くと、そこで困っている人を目の当たりにするわけです。その人から話を聞くと、当たり前ですが、問題を解決してこの人たちを助けたいと思うんですね。

自然とその問題を自分が解決すべきだというマインドになり、仕事に対してオーナーシップが生まれる。やる気というか、使命感が出てくる。そうやってエンジニアが主体的に問題を考えられるようになることが、一休という会社のミッションにも直結してくるんです。

現在の一休の技術部門は、こうした僕の経験が反映された結果なのか、エンジニアがエンジニアリングのことだけに集中してそれでOKという組織ではなくなっています。

エンジニアとビジネスが受発注の関係にならないように

── 伊藤さんのように経営に参画しているならまだしも、一般のエンジニアがビジネスを考えるのは難しい方も多そうです。一般的に何をどう実践するとよいのでしょうか?

伊藤 僕自身、エンジニアとしてビジネスに貢献するとはどういうことなのか? 一休に来てからとても悩みました。技術的負債を解消したりサービスが止まらない仕組みを作ったりしても、榊さんには間接的にしか貢献していないと言われてしまった。じゃあ、何をしたら貢献したことになるのか?

結論としては、主体的に問題解決に関わっていくことです。ところが、エンジニアに「ビジネスに貢献しよう」という話をすると、売り上げに貢献しなければいけないと考えて、コンバージョンレートとか利益率といった数字を上げるための機能改善を考えてしまいがちです。

しかし、決して僕たちエンジニアに売り上げを立てろとか、企画を考えろと言われているわけではない。テクノロジーの専門家として、顧客のユーザーエクスペリエンスの問題解決にコミットすることが求められていて、それに対して主体的に関わっていくことがビジネスへの貢献なんだと今では考えています。

── エンジニアがビジネスへ主体的に関わる、ということについてもう少し説明してください。

伊藤 一般的にビジネス部門とエンジニア部門は、いわゆる受発注の関係になりがちです。エンジニアは基本的に忙しいので、ビジネスからの要望に対してすぐに動くことができない。そのため「優先度はどのくらいですか?」「いつまでにやればいいですか?」と聞き返すのが癖になっています。

それに対してビジネスが「このくらいの時期に欲しい」と伝えると、エンジニアが「じゃあ、その優先度を上げる代わりにこちらの優先度を下げるので、納期が遅れるか機能を削ることになります」と答えるコミュニケーションになりがちで、お互い「どうもやりずらいな」と感じたりする。これは受発注の関係になっていますよね。ビジネスが発注してエンジニアが受託する。放っておくとそうなりがちです。

一休のエンジニアも、以前はビジネスから言われたことを納期までにやるという受注マインドが強い組織でした。これではエンジニアがビジネスに貢献していないとまでは言いませんが、良い形だとは思っていません。

── エンジニアに限らず、仕事を頼まれたときに締め切りを確認するのはよくありますよね。

伊藤 もちろんそうです。ただその期日を決めるのに、あくまで相手に責任を負わせるのか、自分もそこに責任をもって関与するのかの違いだと思います。

相手も自分も、同様の目的にコミットしているので、期日を決めるのは相手だけの仕事ではないはずなんです。顧客の要望や営業の現状を考えると、どのぐらいの時期にその成果物があればよいか。今抱えているプロジェクトやタスクも含めて、どうすればそれらが叶うか。

エンジニアもそういう考え方でいれば「優先度はどのくらいですか?」「いつまでにやればいいですか?」と相手に判断を投げるコミュニケーションではなく「これぐらいの時期でどうでしょうかね」と一緒に考えるコミュニケーションができるだろうと思います。些細なことではありますが、受動的ではなく主体的に事業にコミットするというのは、こういうことの積み重ねだと思います。

ビジネス、開発、四方山|naoya

主体的に仕事をすることで調整できる裁量を増やせる

── スケジュールも作業量も同じなら、仕事としては何も変わらないのではないでしょうか?

伊藤 いいえ、それは作業量であったりチームの取り組み方を変えることができないという前提に立っていると思います。全体を見ると変わります。労働時間についても、受発注関係でない方が融通が利くんですよ。例えばプロダクトの仕様を、要件からUI、設計や実装まで一手に引き受けているとしますよね。それをどのように仕上げるのかは自分の責任だとします。

そうであれば、限られた時間を全体としてどこに割り振るべきかは自分で調整できます。状況に応じて、UIの作り込みを後に回して先に機能はリリースするとか、そういう判断が可能です。自分がより広い責任を負っていれば、スケジュールと作業量とにズレが生じたとき、時間以外のことも含めてコントロールできるわけです。相手に責任があるとスケジュールや仕様の裁量もなく、自分でコントロールできません。

先日、あるチームで作っていた機能が予定より遅れるという話が出ました。特に説明がないままスケジュールだけが修正されていることに線表を見て気付いたので、メンバーに尋ねたら「ちょっと遅れます」と言う。そこで僕は「遅らせる選択肢しかないのか?」という話をしました。別に遅れることが悪いと言っているのではなくて、スケジュールを後ろに倒す以外にも、リリース時点での仕様を調整することもできるし、他のエンジニアにヘルプに入ってもらうこともできる。特定の顧客にリリースを限定することで、一時的に開発スコープを小さくすることだってできる。

そのメンバーは、スケジュールしかコントロールできないと思い込んでいたんですね。顧客からの要望に対してプロダクトをどのように仕上げるか、誰をそのタスクにアサインするかはチームが自分たちで決められるようになっている以上、スケジュールしかコントロールできないということはないんですよ。

── 仕事に対するオーナーシップがあれば、自分の裁量も増えるということなんですね。

伊藤 自分たちに責任と裁量があれば、いろんな要素を自分たちでコントロールできる。そうやって仕事をしてほしいんです。そのためには、責任をすぐに相手に投げてしまわないこと。責任をこちらで負えるように日頃から信頼貯金を貯めていくことが大事です。責任を負うこと自体はたいへんだけど、仕事は楽になるんです。

でも、人は責任を負いたくないと考えてしまうんですね。気持ちは分かりますよ、責任を負うのには胆力が必要ですから。そして責任を負いたくないから「いつまでですか?」と聞いてしまう。その途端、スケジュールを決めるのは相手の裁量になる。責任から降りて、自分から立場を下にして、受発注の関係にしてしまっています。

納期が短いとか、技術的負債を返済する時間がないと考えるとき、もしかしたらその原因を作っているのは、そこに至るまでの過去の自分の振るまいの蓄積かもしれないんです。時間をどう使うかの裁量を自分のもとに持ってくることができていれば、あとは自分のコントロール下なのですから。周囲の期待に応えられるよう成果を出しているなら、残った時間を何に使うかも含めて自分の責任でしょう。

一休に入って最初の2年間は、僕自身も分かってなかった。

── 仕事を主体的に自分からやりたいと思うのは難しいかもしれないですね。

伊藤 はい、そこが一番難しいと思います。そこに火を付けるひとつの方法が、顧客に会いに行くことなんだと思います。他のエンジニア���顧客に会いにいくと決まって「早くやりたい」という顔になって帰ってきます。この問題を自分が解決しないとって。

そうやってオーナーシップを持つと、その領域を自分のものだと思うようになります。周りが細かい口を出すと「そこはこう考えて、こういう理由でこうしたいんです」と反論するようになりますよね。こうなってきたら安心して任せられます。問題を主体的に解決したいと思っている人は、そう簡単には妥協しませんから。

── エンジニアが現場に行きやすい環境なんですね。

伊藤 僕が体験したこと・考えたことを話してきたこともあったのか、会社全体がそういうカルチャーになってきました。新しい機能を作るときも、営業に相談するといろいろなレストランをよく知ってるから、参考になる話が聞けそうなお店にアポを取って、一緒に行ってくれる。

僕が今やってるプロダクトチームは、営業に限らずカスタマーサクセスとの距離も近い。「顧客がこういう課題を抱えている」とカスタマーサクセスが話していると、エンジニアが近づいてきて解決策を考えて、すぐに動きだすこともあります。

ぐちゃぐちゃでウェットなやり方でどんどん変えていく

── ビジネスとエンジニアが受発注ではなくまさにワンチームで開発しているようですね。

伊藤 プロダクトが大きくなってもこうした動きを維持できるか分からないですが、少なくともビジネスと開発をシステマチックに分けて、企画をチケット化して一定期間ごとに機能をリリースしていくといったやり方にはしないと思います。

もっと組織もやり方ぐちゃぐちゃでウェットじゃないといいプロダクトは作れないという信念があって、プロセスを言語化して固めた瞬間にうまくいかなくなる。社内では、その場その場で起きていることに適応しないとダメだからプロセスを固めすぎるなという話をしています。

もちろん朝会やタスクの見える化なんかはやるんですが、決められた方法はなくて、そのとき最善と思うやり方にどんどん変えています。カンバンとかタスク管理ツールも作ったけど、状況に合わなくなったら別のツールにしていった結果、最近ではただのスプレッドシートになっていますよ。また状況が変わったら、やり方も変えると思いますが。

── 特定のツールや手法を導入しているわけではないんですね。

伊藤 してないです。タスク管理だってホワイトボードに、今やらないといけないこと、今週リリースするもの、などが2〜3行書いてあって、毎日更新されていればいい。それでチームが大事なことにフォーカスできるなら十分なんです。その時々で自分たちの「これが最良だ」「うまいやり方ができている」という実感を大事にしています。若い頃からずっとこの感覚です。

あとは各自が目標のためにどうコミットするかという話であって、うまくいくようにコミュニケーションを調整すればいい。僕の経験では、これはB2CでもB2Bでもあまり変わらない。どんなソフトウェアを作るときも、その時にやるべきことにファジーにコミットしていくのが最良だと考えています。

伊藤直也さん近影

取材・構成:青山 祐輔
編集・制作:はてな編集部