10年間のソフトウェアエンジニアキャリアを振り返る
こちらは、裏freee developers Advent Calendar 2018 13日目の記事となります。松崎と申します。お題について考えた結果、題の通りではありますが、私自身のことを書こうと思います。文章自体が、常語になっていることをご了承くださいm(_ _)m。
——————————————————————————
10年間のソフトウェアエンジニアキャリアを振り返る
今年(2018年)でソフトウェア開発者としてご飯を食べ始めることができるようになって10年が経つ。Advent Calendarを機会に振り返ってみることにした。
2008年6月
この年からソフトウェアエンジニアとして働くようになる。そこは、ユーザ主体の動画投稿サービス及びモバイル端末向けの企業。入社直後に任された業務は、提携企業のIPを利用した動画を既存の動画投稿サービスに乗せるサービスの開発となった。課金処理や、動画投稿処理、動画に関わるメタ情報付加などを担う内部ツール開発などを担当した。私はその時業務としてのソフトウェア開発は未経験状態であった。当時所属していたチームをはじめ、周りの人に助けられながら設計・実装をすすめ、無事サービスリリースすることができた。これが初めての職業としてのソフトウェアエンジニア体験となった。
その後、動画投稿サービスのうち、ユーザがアップロードした動画をストリーミング配信するための内部サービスを担当するチームに配属となった。当時動画をみる手段は細分化されていた。フィーチャーホンやPC、時代が下るにつれテレビやゲーム機、またはiPadなど。各視聴端末向けに最適化する作業をすることもやっていた。たとえば、mobile Safariに最適化した動画プロファイル・コンテナとなるよう再エンコードを調整して配信するなど。また登録会員のステータスや時間帯によって動画配信のために割いている回線帯域を有効かつようするため、利用動画のビットレートを調整するなど。業務コードを触れる、コミットできるため開発していてかなり楽しかった。業務時間後、興味が続いてしまい夜通しコードを読むようになっていた。設計や流行り始めたプログラミング言語に対して同僚と盛り上がった。
当時担当していた仕事はインフラ担当者と協同して物事を進める形をとっていた。そのためスケジュール管理や工数管理に対して他チームを強く意識しなければならない。インフラ担当者と協働できたことで、システムの下回りの知識をインフラ担当者から教えてもらえた。非常に助かった。このときの経験が今に生きていると思う。
その後、社内での人材管理システム(今で言うカオナビのようなもの)を作ったり、広報が利用しているCRMのメンテナンスをしていた。社内向けの仕事を日々こなしていた中、誘いがあり転職をすることになる。
2012年6月
年明け前から度々遊びにいっていたベンチャー企業に入社することにした。登記はアメリカで行われ、住所もアメリカ。日本では駐在員としてはたらくという形を取った。度々アメリカや、インドネシアを訪れて現地で働いている日本人やアメリカ人に会ったり、話を聞いたりしていた。日本国内にいても色々な人と会食に行ったりピッチイベントを手伝った。
エンジニアとしての作業はバックエンド側の実装を見直したり、インフラの構成を設計組み直しをしていた。この作業でAWSに対する理解が深くなり、今後の仕事に活かされることになる。1年ほど働いた後、サービスをピボットするイベントが発生し、去ることとなる。
2013年6月
会社を辞めた後、しばらく時間を置いた後に人を頼り、ソーシャルゲーム会社に入社した。入社後のミッションはKPIを取るためのサービスを0から構築するものである。SaaSを利用してDWHを構築し、すでに導入されている各ゲームタイトル向けのシステムから、DWHへデータを送信し、蓄積を行うためのパッケージを作った。ダッシュボード機能などを備えたアプリケーション開発をチームとして担当していた。
ゲーム開発はタイトルごとに予算が組まれ、期間が決まるためサーバを利用する会社はその時ゲームを作るために効率的に予算を使えるよう、業者が別々であった。人員などのゲームを中心とする開発リソースは後日追加ができるが、始まりとなるシステムを構築するためのインフラ費用・目的は開発時に予算を決めなければいけないため開発開始時の予算を考慮して組まれる。仕組みが若干ことなるシステムに対し普遍的に成果物を配布・稼働できるよう、どう設計しどう乗り切るかを考えることが楽しかった。当時流行り始めたDockerの利用を行った。2013年当時、LXCのバージョンは1.0ではなく、RHEL/CentOSがDockerを正式にサポートしたバージョンではなかった時代である(DockerのサポートはRHEL 7から)。この件について先走りすぎてしまった。
既存タイトルに対してパッケージを導入してもらうため、社内営業を行い、導入のため社内チームへ掛け合ったこともあった。折衝作業は楽しかった。タスク管理にはPivotal Trackerを利用し、イテレーションを定期的に見て、計測が行えるよう同僚が調整してくれた。そのため、通常勤務時間内で就業し、作業を終えることができた。当初導入を希望されていたタイトルや、既存で稼働しているタイトルにもKPIの仕組みを導入することができた。
先輩社員が非常に優しく、能力が高い優れた人がいた。プログラミング能力の拙い私にどのようにシステムを組み込んで行けば良いのか、問題が発生した時に慌てふためいてしまったときに落ち着かせてくれるなど色々とご迷惑をかけてしまった。
1年ほど経ち、入社時に任されていたミッションを終え、次は何をしようかと考え始めることになる。
2014年6月
とあるプログラミング勉強会で、登壇者がプログラミング未経験で採用され、どのように自分がコーディングを学んでいったか、サービスを構築していったかの話をしていた。このベンチャーおもしろそうだな、と思って登壇者に話をしてみた。その時、「よろしければオフィスに遊びに来ませんか」と誘いをうけたので、オフィスにいった。社名はネットで見知っていたが、具体的なサービスがどのようなもので、どんな業務に対して役に立っているのかなど詳しく知らなかった。オフィスに行った後、後日面談となり、内定を頂いた。その後しばらく、前職の仕事終わりにオフィスに遊びにいくようになった。
入社後インフラチームの一員として配属した。まず初めの仕事として任されたのは、社内で利用する電話応対用のシステム構築である。期待されるリリースひまでの日数が限られているなか、2名で開発を行い、試行錯誤の末設計から実装・運用フェーズまで持っていくことができた。なかなかハードな仕事であった。他、日々のデプロイやインフラ設計(AWSを利用している)の改善、アプリ開発者とのデプロイやインフラ構築のための内部折衝をしていた。データ保存のための設計やシステム負荷監視を実現するためのシステム設計・構築をした。通算してインフラ担当者として2年間働いていた。当時からサービスの成長が伸び続けている状態であり、今までの仕事では体験したことのないようなサービス負荷・世間の期待値の変化っぷりに驚き続けた。DBの負荷分散の設計・実装やサムネイル変換サーバ実装など黙々と設計と開発を進めた。
インフラ担当を続けているうちに、アプリケーション開発者として経験を積まないとインフラが何を理由にアプリケーション開発者から求められいるのか理解できていないのはまずいと思うようになった。そこで、個人的に会社にお願いをしてインフラ担当からアプリケーション開発担当チームに移動を願い出た。
アプリケーション開発者として働き始めた当初製品にたいして私自身の理解が進んでいないことばかりであった。システムの仕組みや業務の仕組みもわからないことだらけ。頭を捻りながら、周りに助けられながら都度必要な機能の設計と実装を行い続けた。アプリケーション開発担当として2年ほど過ごした。
この会社に在籍していた期間が、今までの人生においてプログラミング能力(設計や実装や他チーム調整諸々含めて)が成長したと実感している。従業員数も毎月のように増え、世間でのサービス利用者数も入社時とは比べられないほど多くなった。得られるトラフィック量や日々の課題解決など常に変化があった。プライベートでも付き合いが続く同僚もできた。キャンプにいったり泊まりにでかけたり。ポーカーやったり。色々遊んだ。非常に楽しい日々を4年以上過ごした。
その会社はfreee株式会社である。
振り返ってみて
10年間のソフトウェアエンジニア人生を振り返ってみた。まず気がつくのは転職回数が多い。技術の習得は業務向けWebアプリ、インフラを構築しながらOJTの様な形をとって進めていった。基礎が穴だらけになっている気がしている。自主学習で乗り切るのは良いことなのか、考え続けている。10年後に改めて振り返り直してみたい。
——————————————————————————
裏freee developers Advent Calendar 2018 14日目はjoe_reさんです。