ども、@kimihom です。
今までの Web サービス開発では、運用しながら開発していくということが問題なくできていた。しかし、最近その運用と開発を同時に進めていくことの難しさを感じているので、記してみる。
負荷 という新たなる課題
今まで、長らくサービスローンチ前と後とで、顧客がいるかいないかの大きな違いが出てくると考えていた。ローンチする前はひたすら開発だけしてればいいだけの、自分の開発最優先な素晴らしい世界であった。
サービスをローンチして、仮にうまく行った場合、多くの顧客を持つようになる。その顧客からの要望や問題に対して迅速に対応する必要が出てきて、ローンチ前の自分の開発が全ての世界から離れていく。
それも私はだいぶ慣れてきて、開発と運用のどちらもやっていけるなと判断していたのだった。しかし、そんなことはなかった。
サービスローンチして4,5年、負荷という新しい課題が出てくるようになった。これは1顧客からの要望や問題などとレベルがだいぶ違って、サービス自体が遅くなったり止まったりすると、全ての顧客に影響を与えてしまう問題がある。最優先で取り組まなければならないことが増えたことになる。
そして、その障害とも言える問題が発生した時、効果的なインフラ構成という新しい知識が緊急で必要になる。
一度でもこの経験をすると、やはり誰もがインフラ管理をちゃんとできるインフラエンジニアが欲しいと考えることだろう。こうなってくると AWSやGCPで自前でサーバー構築しようとなっていく。
その気持ちが最近よくわかるようになった。私は普段、 iPhone アプリ開発してて、急にサーバーのインフラのインフラの調子が悪くなって、Swift から SQL という言語の切り替えが必要になってきてしまう。Swift だけやってればどんだけ早くアプリが出来上がったことか。そんなことも考えてしまう。
全ての最新を追いかけない
インフラもフロントも全て担当するエンジニアがいる。では彼が DBの最新を追いかけ続け、React の最新も、Ruby も Go も JavaScript も、ましてや Linux も。全ての最新を追いかけ続けられるか。そりゃ無理だ。
一番簡単な答えは、「それぞれに担当者を設けて追いかけてもらう」ってこと。エンジニアが10人20人いても足りないと嘆くのはこの簡単な答えを選んでいるからだ。
じゃあどうするか。私は PaaS や 外部クラウドAPI などを利用し、自分の追いかけなければならない技術をできるだけ少なくしている。そしてアップデート頻度の少ない、定着された技術・フレームワークのメリットを感じるようになってきた。 それらを選びつつも、大事なものだけをアップデートし続け、最新を追い続ける。技術を選んで選びまくるのさ。
じゃあ最新を追いかけなくてもいい技術はずっとスルーでいいのか。残念ながらそういうわけにはいかないので、定期的に確認する必要がある。今回、iPhone 開発してて急に、改めて DB の インデックスを貼り続けて学んだわけである。
終わりに
最近、Web からスマホアプリへと新たなチャレンジを続けているが、その中で起きた運用ステップでの大きな問題の発見と対応。
開発・運用エンジニアをどちらもやっていく難しさを改めて感じた。
じゃあどうすればいいのか。その答えは探し中だけど、私の次なるチャレンジとなるであろう。