CTOの役割と組織における技術的ポートフォリオの組み方

はてなCTOのid:stanakaです。 はてなアドベントカレンダー2014も最終日となりました。 今年のアドベントカレンダーは、スマートフォンアプリ開発からシステム系論文の話まで幅広いテーマが集りました。 読んでいて優秀なエンジニアがいるなぁ、としみじみ思います。

ちなみにアドベントカレンダーは25日までじゃないのか、という話がありそうですが、本来は24日までだそうです*1

CTOとは何か論

最終日の今日は「CTOの役割と組織における技術的ポートフォリオの組み方」について考えているところを書いてみます。

最近、なぜかCTO論が盛んで、あちこちでよく耳にするようになってきています。 rebuild.fmでのnaoyaさんのマネージメント話や、WEB+DB Pressの舘野さんの連載などでもCTOやエンジニアのキャリアについての話が盛り上がっています。 つい先日でたWEB+DB Pressの藤本さんとnaoyaさんによるCTO特集も読み応えがありました。

私も先日、IVSの併設イベントで「CTOに求められるもの」という講演をさせていただきました。 100人のCTOがいれば、100の役割があると思いますので、この講演での私の事例もその一つと考えていただければ、と思います。

またCTOの役割の中でも開発マネジメントの側面についてはnaoyaさんの開発組織のマネジメントが珠玉ですので、こちらを読むのが早いです。

技術的ポートフォリオと組織能力

今日の話はCTOの役割の一つに数えられるであろう「技術的ポートフォリオの組み方」についてです。

はてなは主にWebサービスを提供している会社ですが、そこで必要とされる技術は、ざっくり以下のようなものです。

  • サーバーサイドアプリケーション関連(主にPerl / Scala)
  • フロントサイド関連 (主にJavaScript)
  • スマートフォンアプリケーション(iOS / Android)
  • インフラ (Linux / DBMS / 各種DataStore / AWSなどのIaaS / 各種ネットワーク)
  • 開発環境関連( CI / デプロイ / 各種開発周辺ツール )
  • 自然言語処理、機械学習

はてなのエンジニアはおよそ30名弱なのですが、その人数でこの領域全体をカバーしています。 また、それぞれの領域の中でも求められる具体的な技術については、時期とともに変化があります。

例えば、サーバーサイドアプリケーション関連の技術については長らくPerlを主要な言語とし、Perlで利用するライブラリやフレームワークを新しくしてきたのですが、最近、ここにScalaが加わりました。 (ちなみにPerlを辞めたわけではなく、引き続きはこれからも適材適所で使い続けます。) またインフラ周りについても、数年前までは自作PCを作って使っていたのがベンダーからサーバーを購入するようになり、最近ではAWSのようなIaaSを使うハイブリッド環境に変化してきています。 (インフラレイヤーのより上位への変化は決して小さくないインパクトです)

このような技術的な変化 / 進化は常に起きており、その中で自社のエンジニアにそれぞれどのような技術を身につけてもらい、また将来を見据えてどのようなエンジニアを採用していくか、というのはCTOの大事な役割の一つでしょう。

いま時のWebサービスやスマートフォンアプリを開発している会社では、Webサービス、スマートフォンアプリをさっと作り、すばやくリリースすることが重要視されており、多くの会社は徐々にそれを身につけつつあると思います。

その背景として、数年前からリーンスタートアップ的手法や各種のモダンな開発プロセスの普及があると考えています。 プロダクトを最初はミニマムに作り、実際のニーズに応じて作り込んでいくという方法論はとても強力で、 このような手法でサービスを機動的に作っていくのは確かにとても大事です。

一方で、このような開発手法を支える技術的なノウハウは、それなりの時間を掛けて組織内に蓄積していく必要があります。

GMOペパボの技術責任者の栗林さんも組織能力を圧倒的に成長させることにおいて、技術に関する組織能力を高めることの重要性を指摘しています。

またもう一つ、PFIの岡野原さんによる技術と時機において、成功した技術と失敗した技術の時機についての考察があります。 中でも「(4)一方で準備は数年前からはじめていなければならない」という一文が非常に心に残りました。

高速道路とその先へ

実現しようとしているサービスの優位性が技術的なものかそうでないかで、この先の考え方は大きく変わってくると思います。 ただCTOとしては、はてなが提供するサービスには(もちろん他の様々な要素も極めて重要ですが)技術的な点での優位性を持たせることを常に目指したいと考えています。

最近ではスマートフォンアプリ開発を一から勉強して短期間でリリースした、という例も目にしたりします。 もちろんそれでヒットすることもあるでしょうし、それを否定する気はまったくありません。

ただ技術的な観点では、それは先人がちょっとずつ技術的環境を整えてできあがった高速道路を走っている、ということだと思います。 つまり2014年末の時点でスマートフォンアプリで技術的優位性を築こうと思ったら、高速道路がまだ敷かれていない領域に乗り込む必要があります。 例えば、画像認識技術だったり、ユーザーのコンテキストを認識する技術だったり、よりスピード感のある開発プロセスの導入だったりするでしょう。

もちろん、この類のことはスマートフォンアプリに限らず、ウェブサービス一般について言えることだと思います。

高速道路がない領域に乗り込むために、僕は次の2点を意識しています。

  • まず、高速道路がある領域はしっかりと高速道路を利用する
  • 高速道路の先を開拓するために、技術的な目線を高める

前者ははてなインターン研修用教科書を公開するような取り組みや、開発フローの改善に表れているように、できるだけスムーズに開発できるように心掛けています。

また後者についても様々な取り組みを行っているのですが、最近は世界の最先端の技術に触れる機会を増やすためにも論文輪読会を定期開催しています。 (最近、僕はあまり参加できてないですが、ちゃんと参加したいです。) 詳しくはアドベントカレンダーの昨日のエントリ「インフラエンジニア向けシステム系論文」にも書かれています。 ちなみにですが、はてなは比較的Ph.D持ちのエンジニアの比率が高く、全体の2割ほどになっています。

このような取り組みを続けて、自社の組織内に様々な技術へのアンテナを持ち、かつ、それらが血肉となるようにしていきたいと考えています。 その中から、しっかりとした技術的な価値と優位性のあるプロダクトを出していけるように研鑽していきたいものです。

おわりに

もちろん、CTOであるところの僕も今後もしっかりと技術にコミットしていきたいと思ってます。(もちろん経営にも。) また日本ではCTOの役割としてマネジメントの側面が強調されることが多いのですが、僕としてはもうすこしコードに関わりたいと考えていて、miyagawaさんのTweetで言及されているエントリに共感しています。

#define CTO

ということで、来年2015年は今年よりコードを書ける年にする、というのを抱負にしたいと考えています。

では、皆さま、よいお年を!!