こんにちは。CTOの馬場( @netmarkjp )です。
新年らしい仕事をしてみよう、ということで、 現時点と今後のエンジニア界隈の展望をまとめました。
毎月やっている社内勉強会でも話しましたが、 自社の今後の戦略について考えるネタにするのと、 直近で SRE NEXT 2020 などのイベントがあり、 エンジニアとしてのポジショニングや振る舞いについて考える機会が多そうなので、 そのベースラインとして整理したという意図もあります。
観測範囲や観測者の立ち位置によってわたしと全く異なる見解になる方もいると思うので、 ぜひ情報交換させてください。
最近のWebサービス業界・界隈に関する所感
- DevOps以来の「すべて同じ人がプライマリの責任を持つ」流れが極まってきている。 開発も運用も同じ人 というやつ
- フロントエンド領域 / バックエンド領域 / DBMS領域(RDB、KVS、Document...) / その他ストレージ領域(ブロック、オブジェクト、...) などそれぞれがますます難しくなって専門化している
- 日本のマジョリティはDevOpsに取り組み始めたところ
DevOps以来の「すべて同じ人がプライマリの責任を持つ」流れ
最近話題の新技術はこの流れに乗ったもの、この流れを後押しするものが多いと感じています。
- Observability = 内部状態を推測ではなくデータとして獲得できるようにして、そのシステム・アプリケーションの経験が短くても適切な対応を取りやすくすくし、ひとりの開発者に求められる暗黙知を減らす
- Microservices = 業務ドメインを軸に責任を分割し、ひとりの開発者がもつ責任範囲を横に狭くする
- Service Mesh = ネットワークという不安定で扱いが難しいリソースをアプリケーションがうまく扱えるようwrapし、ひとりの開発者がもつ責任範囲を縦に狭くする
- フロントエンドとバックエンドをAPIなどで分離 = 技術要素を軸に責任範囲を分割しひとりの開発者が持つ責任範囲を横に狭くする
すべて同じ人が、とは言いつつ、とはいえ全体観がないとそれはそれで系全体として破滅してしまいます。 全体観も持って対応したほうが効率が良い/効果が高いトピックがいくつもあり、その部分を切り出して専門Roleにして専門のチームがことに当たるのが効率的です。
=> この専門Roleが 共通基盤エンジニア や SRE と呼ばれています
(一般的に)共通化するとよいトコロ・横串の視点が入るとよいトコロは以下のとおり
- パフォーマンス、キャパシティ、スケール(スケールアウトだけでなく、スケールオフ(CDNなど)も)
- セキュリティ
- 認証・認可
- CI
- CD
- モニタリング機構
- アラーティング機構
すべて同じひとがプライマリの責任を持つ流れから考えると、 上記専門Roleは全部やるべきところを一部肩代わりしてあげる役回りです。 開発者は Webサービスの観点で責任の主体(の一部)が開発者からそのチームに移動するわけではない 、 という立場をとるべきですが、開発者の意識変革の浸透具合は 実態はそううまくはいっていない 雰囲気を感じます。
ひとりの開発者がもつ責任範囲を狭くする実装:実際のところ現状はどうでしょう?
Observability、Microservices、Service Meshは、 Cutting Edge TOP 20%に入るような先進的な企業・システムに於いてもかなり厳しい状況だと感じます。
例えば Observability は内部状態を可視化し適切な情報を得ることで運用難易度を下げ、 開発者自身が運用フェーズの主体者になりやすくする効果があるはずですが、 「モニタリングはインフラやSREにお任せしている」という現場がほとんどで、 自分自身で情報をチェックし活用する開発者はまだ希少だと感じます。
また Microservices はシステムコンポーネントと組織を共に整理して効率を上げるはずが、
現実には 30個に分割された Microservices に対して開発者が 1チームの10人のみでMicroserviceを掛け持ち
といった風に
Microservices 掛け持ちが多く発生しており、
目指すところまでの距離はかなり遠そうに感じます。
Cutting Edge TOP 20%に入るような就労環境の良い企業でも軒並みエンジニアが不足しているところを見ると、 2つの、技術的な判断に影響を与えうる、非技術的な課題が見えてきます。
- 1.「できる人」(あるいは現職者)が求める内容が高度/難解すぎる
- 2.業界全体での圧倒的人数不足
少なくとも2.が解決する目処・きっかけは今のところ見当たらないので、 当面は現在の状況が続くと思われます。
また Top 20% / Intermediate 60% / Late 20% のニーズの差がスゴくなってそうという想像をしています。
(実際に見聞きする範囲で、DevOpsについてこれから本格的に取り組むつもりになった、という話を最近よく聞くのです...)
なお フロントエンドとバックエンドをAPIなどで分離 は著名な・大規模なシステムではよく聞くようになりました。 ReactやVueの普及に伴い、 それ以外のシステムの半分くらいでは意識され・採用されていると感じます。
結局われわれエンジニアが発揮すべきなのは何か?
DevOps以来明確になっている環境からの要請は「主体性の発揮」に尽きます。
開発者がビジネス視点を持つということでは なく 、 エンジニアリングの領域内に於いて壁を作らず主体的に動くことが求められています。
DevOpsに代表される主体性を発揮があり、 その先にDevOps、Microservices、Service Mesh、SREなどのプラクティスがあるわけですが、 果たして下地は整っているでしょうか...
続き
社内勉強会では、上記の話題に続いて自社の戦略などの話をしました。
詳細は非公開ですが、 まずDevOpsをしっかりやる 、 そのための具体的・現実的な支援を提供する 、 取り組みを引き続き行っていきます。