オープンワークでエンジニアをしている入江です。 これまでiOSアプリの開発をメインで行ってきましたが、去年の8月頃からWebアプリ開発にも参画しており、 社内では珍しいキャリアということで執筆依頼を受け、今回記事を書くことになりました。
きっかけ
元々、iOSアプリだけに強い興味があるというよりは、純粋にいいものを作りたいという思いでエンジニアをしているので、個人開発で作るアプリにはFirebaseを使うなどしてバックエンド側も含めて開発してました。 Firebaseなどのクラウドサービスに頼らずに、自分で作れる領域を広げたくて、Webやバックエンドにも興味を持つようになりました。
社内での調整
興味を持ったものの、モバイルアプリ開発以外の業務経験は少なかったので、社内でWebエンジニアとして貢献できるかは最初の課題でした。 そのため、業務時間外で自分で新規のWebアプリを作ってみる・業務内ではアプリのAPIの実装タスクをやってみる、など基礎練習をちょくちょくやって、最低限の戦力になる努力はしていました。
そして、ある程度基礎ができた段階でマネージャーに相談したところ、「そのキャリアを応援したいので、なんとか調整してみる」と言っていただきました。 自分はiOS開発のリードエンジニアだったので、完全にモバイルアプリ開発から離れることが難しい状況でした。 そのため、マネージャーは、プロジェクトのアプリ開発が滞らないことと、自分の要望が叶うことの両方を実現できるように、難しい調整をしてくれたのです。 本当に感謝しています。
その調整の結果、iOSのリードという責任は今後も持ちつつ、実際に手を動かすアプリのタスクを徐々にメンバーに移譲し、その分Web側の開発に参加する、ということになりました。 Web側の開発というのは、オープンワークのメインサービスではなく、個人のキャリアにフォーカスした新サービス、OpenWorkキャリアの開発です。
自分以外のiOSメンバーには負荷が増えることになってしまい心配だったのですが、メンバーは、「いつまでも入江さんに甘えていられないんでね」と、自分の仕事を奪ってくれるようになりました。 (少年ジャンプ系の漫画では鉄板のムネアツ展開です。頼れるメンバーで本当に感謝)
また、OpenWorkキャリア側のマネージャーやメンバーも自分が兼務していることに理解をしてくれて、リソースやMTGの調整などの配慮をしていただいています。 本当にメンバーに恵まれたなと思います。
兼務のあれやこれや
兼務体制になってから1年近くになりますが、大変なことや楽しいことなど色々ありました。 兼務という点では大変だったことの方が多かったように思えます。
特に大変だったこととして、スイッチングコストがあります。全く別のプロダクトの、言語もスタックも違う開発を兼務しているので、頭の切り替えが大変です。 これに関しては、自分のスケジュールを十分に計画し、集中できるまとまった時間を取れるようにしておくことで、ある程度は軽減されますが、慣れが大きいと思います。 最初は非常に疲れますが、慣れてくるとスイッチングに疲れなくなります。とはいえスイッチングが少ないに越したことはないので、自分のスケジュールはよくよく計画すべきです。
また、Webやバックエンドの知識を習得しながら、モバイルアプリの最新技術も追わなければいけないので、時間的な限界を感じるときがあります。 ネットで稀に「フルスタックエンジニア」を揶揄するようなシーンを見かけますが、全部が薄い知見なのに、全部に手を出して、「とりあえず動く」品質の低いプロダクトを産む不誠実なエンジニアにはなりたくないと思っています。 1つ1つの技術をある程度のレベルまでしっかり習得していきたいので、本当に時間がいくらあっても足りないです。
兼務を成功させるコツは、120%頑張るという覚悟を持ちながら、実際のタスクはしっかり100%にまとまるように自主的に調整努力を徹底することだと思います。 兼務していると、普通に進めていると自分のリソースは確実に100%を超えます。これが常態化すると崩壊し、結果的に周囲にも迷惑をかけるので、基本は100%を超えないよう維持する努力をします。 しかし、やはり120%頑張らないといけない瞬間は必ずあるので、そもそも120%頑張る気概がないと兼務は難しいでしょう。(え、120%じゃ足りない・・?)
兼務の楽しかったこととして、色んなプロジェクトの、色んなメンバー・色んな技術と関われることです。1つの環境にずっといると、良い面も悪い面も盲目的になりがですが、いろんな環境にいると、それぞれの環境を客観的にみれるようになります。海外旅行に行って初めて日本のいいところ・悪いところに気づく、みたいなアレです。
得たもの
細かいもので言えば、OpenWorkキャリアの技術スタックであるGraphQLやNext.jsなどのモダンなスキルを得られたこと、 技術書やX上での議論で、今までよくわからなかった世界を理解できるようになって楽しいこと、などです。 また、モバイルアプリに加えて、Webやバックエンドの経験も積んだことで、より多くの課題解決ができるようになったことです。 とはいっても自分はまだまだ、まだまだ未熟ですが・・。
また、フルスタックになることで、チーム開発全体にもたらすものもあります。
基本的にネイティブアプリエンジニアはAPIの実装内部やドメイン・DBなどについては関与せず、APIのレスポンスを信頼できるインターフェースとする前提で開発を進めていました。 しかし、ネイティブアプリエンジニア・サーバーサイドエンジニアが分業することで、ドメインロジック・仕様・API設計と、多くの点で相互理解するためのコミュニケーションが必要でした。サーバーサイドエンジニアはドメインやDBの状態を説明し、ネイティブアプリエンジニアはアプリの都合を説明する・・といった具合です。 また、そもそも相互理解ではなく、「サーバーサイドの実装確認してください」「アプリの画面の実装はどうなってますか」というような、キャッチボール型のコミュニケーションもあり、ボールが返ってくるまで作業を進められないこともしばしばでした。
自分はこのような分業が少ない方が開発効率も品質も上がると思っています。 絵に描いた餅のような暴論に聞こえるかもしれませんし、1人ができることには限界があることも理解しています。 しかし、自分はこの境界がない開発スタイルを目指したいです。いますぐ他のメンバーにこれを強要するわけでも全くありません、まずは自分1人からだけでも始められます。
オープンワークは絶賛採用強化中です
今回の経験を通じて、自分の目指すキャリアの実現に向けて伴走してくれるマネージャーがいて、頼れるメンバーがいるなど、 オープンワークがいかに恵まれた環境か改めて実感しました。 自分のようにフルスタックなエンジニアを目指す方、違う道を目指す方も、ご応募・カジュアル面談をお待ちしております!
また、少し宣伝ですが、絶賛ユーザー増加中の新サービス、OpenWorkキャリアもよろしくお願いします! 働くユーザーにとって嬉しいサービスとは何かを真に追求した、オープンワークらしいサービスとなっております。ぜひご登録を! career.openwork.jp