web系自社開発の新卒が半年働いて感じたこと
初めに
初めまして!
web系自社開発企業でエンジニアをしているwebジニアです。
今回は、私がweb系自社開発企業でエンジニアとして半年間働いてみて、感じたことを書き残していきたいと思います。
前提として、半年間働いてきた中で、そのうちの最初の3ヶ月は社内サービスのフルリプレースを企画〜設計〜実装〜リリースまでを行い、それ以降の3ヶ月で10年以上続くレガシーな成熟しつつあるサービスの保守運用を行なってきました(現在進行形)。
どちらもRailsによって作られてたサービスで、インフラにはGCPを使用して、ローカル環境はDockerを使うというweb系では多くみられる?形かなと考えています。
その中でも今回は、後半の3ヶ月で行なってきた10年サービスの保守運用にフォーカスして感じたことを書き残します。
これから、web系の自社開発系の企業に就職を考えている人などの参考になればと思います。
それではいきましょう!
想像よりもコードは書かない
まず、初めに出てくる感想は「想像よりもコードを書かない」です。
これは、もちろんサービスのフェーズにもよると思います。
それこそ、新規立ち上げフェーズでは多くのコードを書くと思いますし、私が経験したフルリプレースなども多くのコードを書きました。
しかし、10年も続いているレガシーになりつつあるサービスの保守運用を任されると想定の三倍はコードを書きません。
では、何に時間を使っているのかというと仕様理解や影響範囲の特定、今後の運用を考えた要件定義や設計に時間を使うことになります。
具体的に一つ一つ見ていきましょう。
仕様理解
10年続くサービスでは、コード量も莫大になっていますし、マーケティングの方などが考えた施策によってビジネスロジックなども多くコードに含まれています。そうなると、運用していく中で上がってくる施策を実装する前に既存コードの理解に多くの時間がかかることは想像できると思います。
この仕様理解を徹底して行わないと、設計した要件が要求と異なることや実装してみたけど、施策立案者の方のイメージと異なったり、結局出戻りにつながります。
この無駄な工数を生まないためにも仕様理解にはしっかり時間をかけて、徹底して行うようにしています。
影響範囲の特定
コード量が多く、ビジネスロジックがたぶんに含まれているサービスの場合、仕様を理解するだけでは足りません。今回の施策の要求を満たすために実装を行うことでサービスのどこに影響が出るのかをしっかり確認する作業も必要になります。つまり、要求や要件で指定された箇所の仕様だけでなく、変更を加えることでサービス全体にどのような影響があるのかを特定することが非常に重要になつということです。
この作業を怠ると、要求は満たせていたけどリリースしてみたら、別の箇所で障害が発生するなどの事故につながります。
今後の運用を考えた要件定義や設計
この項目は、自社サービスを作成していくエンジニアなら最も重視するべき点かなと考えています。
「今後の運用を考えた要件定義や設計」とはどのようなことかを具体的に説明していきます。
まず、10年もサービスを運用していると技術的負債がどんどん溜まっていきます。例えば、初めはお試しでとあるキャンペーンを打つという施策が始まりました。
スピーディーにリリースを行い、ユーザの反応を見ながら施策の継続可否を考える。というようなオーダーはそこそこよく見られる要求なのかなと考えています。
このような施策を実施するときに、現状は「DBの追加やカラムの追加などを行わず」に「modelに新たなグローバル変数を置く」という手段で対処するのがbetterであると決まり、そのように実装していきます。
そこから長い時間をかけて、このキャンペーンの施策を継続することが決まり影響範囲がどんどん広がっていきます。気づいたらDB化していないことで少しの変更を加えるのにも多くの工数がかかるようになっているという状況はよくあります(私が運用しているサービスでは笑)。
このような技術的負債を生まないようにするために重要なのが、「今後の運用を考えた要件定義や設計」になってきます。
今回の例でいうとスピーディーにリリースしたいという要求を叶えるために工数のかかるDB化などは行わずにグローバル変数を置くだけで対応するというアプローチが結局、長期で見たときに負債を抱える原因となっています。
ここの難しさは本当に時と場合による。としか言えないところです。笑
目的と要求、長期の視点など様々な要素を意思決定の材料として整理して、よりbetterな選択を取れるようにしていきましょう(私はまだできないです笑)。
web系自社開発エンジニアに求められるバリュー
ここまででweb系自社開発のエンジニアがどんなことを意識して、仕事をしているのかが少し理解できてきたと思います。
そこで、次は「どんな人材がweb系自社開発で求められるのか」について述べていきます。
結論から、述べると「提案力」に尽きるのかなと考えています。
もちろん、役職によって求められることは異なりますが、一メンバーであれば、この提案力がないとただのSESと同じなのかなと思います。
例えば、ある要求がマーケから降りてきた時、その要求をただ満たすだけの要件定義を行い、実装を行うではそのメンバーのバリューはSESの人や業務委託の方と差がなくなってしまいます(SESや業務委託はそこをバリューとして契約されているので何も悪いことはありません)。
しかし、自社サービスのエンジニアとしては、これでは自分なりのバリューを出すことはできないと思います。本当にその要求を満たすことがサービスのためになるのか、売上に最もインパクトを残す要求なのか、それこそサービスを長期で運用するという視点は要求に含まれているのか。
自社のサービスをエンジニアだからわかる視点で、「提案をする」ということがweb系自社開発のエンジニアに求められているバリューなのかなと私は思います!
創意工夫の余地があるのですごく楽しいです。
もし、要求や要件に従って実装するだけに飽きを感じてきた方やそもそも自分で提案をいっぱいしていきたいという方は自社サービスを持っている会社のエンジニアをお勧めします!
Discussion