成長のコツその3 信頼

最後に3つ目のコツを話していこうと思います。最後は、チームの話です。3つ目のコツは、「信頼」です。信頼というのは、文字で書くとシンプルですね。

プログラミングとソフトウェアエンジニアリングは違うよ、という話をしたいと思います。みんなはこのイメージがつきますか? プログラミングというのは、例えば学校の課題の中とか、あるいはみんな今手元で作っているもので短期的に動くものです。

それ自体は楽しいし、すごくすばらしいことだし、僕もすごく好きなんだけど、ソフトウェアエンジニアリングというのは、工学というだけあって、ソフトウェアというものをどういうふうに組み立てていくか、それをやっていくことです。

「ソフトウェアエンジニアリング」と「プログラミング」の違いとは?

端的に説明しているものを、ちょっと参考に持ってきました。これは僕もすごく好きな『Googleのソフトウェアエンジニアリング』の本です。「時間、スケール、そして作用しているトレードオフだ」という表現があるんですね。

つまり、ソフトウェアエンジニアリングにおいては、プログラムが生きている時間が長いということ。そして、たくさんの人や、たくさんのケースで使われるものだということ。そして、作用がめちゃめちゃあるということ。

だから使う人が多ければ多いほど、この機能が欲しいとか、こうあったらいいとか、みんなが思うこともたくさん出てくるし、こうしたいとかも出てくる。そして、それを調整したり、あるいはなにかの機能を足したりする時に、例えば、できてからまだ1週間のプロダクトと10年が経っているプロダクトだと、どうですか? 1個機能を足すのに、(10年経っているプロダクトは)すごく時間かかりそうなイメージがありますよね。

しかも複雑だから、どれくらい時間がかかるかがわからない。その複雑さを全部知っている人がいない状態にどんどんなっていく。それがソフトエンジニアリングという世界なんですよ。

これからみんながソフトウェアエンジニアとして働くのだったら、こういう世界に足を踏み入れるということになります。

あと言えるのは、やはりソフトウェアエンジニアの世界は、スケール、作用の話で言うと、やはりチーム競技なんですよ。多くの人が、みんなが書いたコードを読んでいる時間のほうが長いんですよね。たくさんの人がこういうことをやりたいと思う。そして、いろいろな失敗をする。なぜならたくさんの人が試すから。

でも、たくさん失敗するのはいいことですよ。みんながいろいろなことを考えている。これがやはりソフトエンジニアリングのスケールが起こすことです。そして時間が経てば経つほど、ソフトウェアというのは複雑になるんですよ。

みんなも想像がつきますかね。大きくなれば大きくなるほど、時間が経てば経つほど機能が増えて、リファクタリングしても、またモジュールが増えて、新しい設計パターンをやりたいというのができて、また増える。そして、「いや、こういうことをまた実現したいよ」と、また舵を右に切って、左に切って、いろいろな機能を付けて、どんどんコードベースが大きくなる。マイクロサービス化しても、それを支える基盤のコードがどんどん大きくなる。そういうことがまぁ起きるんですよ。

「さらけ出す」ことで自分自身も想像しなかった未来を実現できた

自分の経験則からもう少し話をすると、僕自身、1人目のCTOの時は、エンジニアチームもすごく人数が少なくて、全部自分で書けばいいでしょというストロングスタイルのエンジニアだったので、やればいいじゃんって思いがちでした。

途中でfluctでマネージャー、大きなチームでやろうとマネジメントをやった時に、当時10人ぐらいだった開発チームが30人ぐらいまで増えたんですけど、やはり30人とかになると、成長スピードも速いんですよね。機能もバーっと増えていくし、ビジネス側もやりたいことをバンバン言ってくるから、いろいろな機能作って、いろいろなお客さんにデリバリーしていったら、めちゃくちゃ機能が増えていく。

線形ではなく、グンと複雑になっていった。大きくなると、全体を知っている人がいなくなるんですよ。まさに複雑性の増加だったんですね。

自分でやればいいじゃんというスタイルは、やはり限界が来るんですよ。なぜなら全部がわかんないから。時間をかけて、読んでいったりすればわかるんですけど。この時に、このままじゃ無理だなと思って、やはりソフトウェアエンジニアリングをやっているんだと思ったんですよ。

複雑すぎて見積もりすら難しい。それが起きた時に僕は、チームメンバーにどんどん聞いたんですよね。「どうすればいいと思う? ちょっと俺もわかんないんだよね」って言って。「このキュー機能を作りたくて、こういうメトリックを取って、このお客さんにこういう機能をこの早さで、この粒度で設計したいんだけど、どういうアイデアありますか?」と、どんどん聞いたんですよ。

もう調べてもらって、任せる。レビューはするけど、基本的な設計とかどんどん任せてやっていったんです。どういう方向に向かっていったらいいと思う? という質問をいろいろな人にして、いろいろなアイデアを取り込みました。

その結果、僕自身が想像しなかった未来に行ったんですよ。fluctは海外展開もしていて、USもあるし、いろいろなところで展開しています。もともとなかった音声動画の機能も付いて、コンサルティング事業も拡大して、誰も想像してなかったけど、そうなっていった。そういうことが起きていったんですよ。

この時にやはり感じたのは、「さらけ出す」こと。エンジニアとしていくら優れていたって、経営者としていくら優れていたって、やはりさらけ出さないと。俺もわからないんだよとか、俺もここが不安なんだよねと共有ができないチームは、絶対に信頼関係を築けない。

だからこそ、自分から「ここは俺もわかんない、助けてほしい」と言えるチームであることは、めちゃくちゃ大事だと思っています。わからないことをさらけ出すことは、むしろプラスだと思います。

その結果、やはり信頼は積み重なっていって、チームで大きな挑戦がしやすくなるんですよね。挑戦しやすいと失敗の数も増えるけど、長期的に見ると成功に絶対つながるんですよ。だからこそ、さらけ出したり頼ったりすることを起点に、信頼が積まれていく。それをみんなのコツとして意識してほしいなと思っています。

なので、3つ目のコツは信頼です。信頼し、任せること。これからキャリアを歩んでいく中、きっとなにかのチームで、なにかのプロジェクトをやっていくと思いますが、チームでやるものだからさらけ出してください。

信頼すると自分に絶対戻ってきます。自分が想像もしなかった未来に一緒に行けるから、それをぜひやってみてほしいなと思っています。

エンジニアが圧倒的に成長するコツのまとめ

というわけで、まとめです。エンジニアが圧倒的に成長する3つのコツということで、今日はマインドの話をしてきました。

1つ目に好奇心、2つ目に一日一歩進む、そして、3つ目に信頼の話をしました。どうでしたかね。

言い換えるなら、こういうことかなと思っています。みんながこれからキャリアを歩んでいく中で、好奇心を押さえ込まずにやはり楽観的にいてほしいなと、(楽観的で)いきましょうということ。

そして、みんなが進めば進もうとするほど、不安は出てくるけど、挑戦に不安はつきものだから。だからこそ、毎日前に進んで、自分に自信を持てるようにしてほしいなと思っています。

そして、3つ目は信頼の話で、さらけ出してチームの力を信じて、みんな自身がチームを進められる人になってほしいなと思います。一言でまとめると、やればできると、やりましょうと。やらなければ何も得られないけど、やればできると思うから、ぜひかっこいい大人になってほしいなと思っています。

(コメントを見て)「JUST DO IT」って、めっちゃチャットに流れてるね。

最後にPRです。インターンシップがあります。これはもう10年以上やっているエンジニアのインターンシップで、「Tresure」というのをやっています。僕も参加したんですが、Goを使ったものづくりをしますので、ぜひ応募してください。発表は以上です。ありがとうございました。