見出し画像

Junior/Middle/Senior/Staff Software Engineer の違い

Ken Wagatsuma

前提として、各社ごとに Seniority の細かい区分は異なります。会社によっては、「この基準を達成していたら、あなたは Senior Software Engineer ですよ」というように、明確な基準を設けているケースがあります。特に人数の多い Big tech では、構造的に人事査定するために基準を明言化する必要があるでしょう。

この記事で書かれている Seniority の違いは、あくまで私見です。自分がチームを作るならば、大体こういったレベルを期待するだろう、という指標に過ぎません。

Junior Software Engineer

一言で言うなら、「仕事を完遂させるために他人のサポートが必要なレベル」です。

ここで、仕事を完遂させるために不足している技能は、人やプロジェクトの資質によって異なります。

自分で優先順位を決めにいくスキルであることもあれば、単純にプログラミング力やテストでカバレッジを担保する能力である場合もあるでしょう。

そもそも、「自分に何が足りていないかが分からない」ケースも多いので、メンタリングや 1on1 を通じて、学習計画の立案や実行をサポートしてあげるケースも含まれます。

また、ある程度技術力があっても、その会社で活躍するために必要なドメイン知識が不足しているケースも含まれるでしょう。

Middle Software Engineer

Junior Software Engineer として経験を積むと、いわゆる Middle Software Engineer に昇格します。会社によって呼称は大きく異なりますので、「Senior と Junior の間」くらいに構えておいても良いかもしれません。

会社によっては、この「Senior と Junior の間」に二つから三つのタイトルを揃えていることもあります。それだけマスボリュームゾーンということなのでしょう。

一言で言うなら、「Senior 以上のメンバーによってスコープが定義された仕事を、一人で完遂できるレベル」でしょう。

Junior Software Engineer との大きな違いは、任された仕事を一人で完遂できるかどうかです。印象としては、一ヶ月から長くても三ヶ月(1 Quarter)分の仕事をイメージしています。

用件定義をして、設計をして、レビューを必要な人に取りに行って、実装をする。レビューをもらいながらテストも行い、品質を担保したソフトウェアをリリースまで持っていける。それが条件です。

仕事を任されたとき、自分にどのような技能が不足しているかを理解し、必要に応じてキャッチアップしたり、周囲に助けを求めたりすることができるのも必須です。時々、新卒ソフトウェアエンジニアなのにいきなり成果を出す地頭の良いタイプがいますよね。個人的には大学時代の経験によって、この基本が既に身についているタイプなのかと思っています。

ただし、「自らビジネス要件を理解し、スコープを定義する」レベルは求められないと思っています。逆に言うと、まだ「仕事を作る側」ではなく「仕事を振られる側」。会社の業績やチームの文化によって成果が大きくぶれるのも、Middle Software Engineer の特徴でしょう。

「仕事を作る側」になっていくのは、後述する Senior 以上の仕事だと考えています。

Senior Software Engineer

「仕事を作る側」の階段を登り始めるのが、この Senior 以上だと考えています。

仕事を作るためには、ビジネス理解が必須です。自分達がどのようなソフトウェアを作っているのか、誰のために作っているのか、どのようなマーケットに位置しているのか、収益モデルはどうか。

なぜなら、ビジネス理解によって、経営目線で考えた時のタスクの優先度が見えてくるからです。

例えば。技術負債が蓄積してきたことを感じて、リファクタリングを行う中規模のプロジェクトを始動させたいとしましょう。この時、単純に「リファクタリングをしなきゃ!」と声を上げるのは Middle 以下ですが、なぜリファクタリングをこのタイミングで行う必要があるのかを、数値とともにビジネス目標と合致させながらマネジメントを説得できるのが Senior Software Engineer です。

ステークホルダーマネジメントも求められてくるのがこのレベルです。誰の合意を取る必要があるのか、誰の力を借りる必要があるのか。「政治力」に近いのかもしれません。

ただし、イニシアティブをとっていける範囲は、あくまで「自分のチーム」に閉じている。それが Senior Software Engineer のレベルだと考えています。

全社が抱える課題を解決するために動けるのが、次の Staff 以上ではないでしょうか。

Staff Software Engineer

Senior Software Engineer との大きな違いは、「チームを横断して課題を可視化して解決まで動けるか」と言う点だと考えています。Senior がイニシアティブを取れる範囲が、チーム横断に広がったイメージです。

ただし、執筆時点での私のタイトルは Senior ですので、Staff 以上の世界はまだ見えていません。Staff 以上のタイトルについて学ぼうと、以下の書籍を手に取っています。

会社によっては、Principal Software Engineer と呼んだり、Techlead と言うリード職を設けているところもあります。いずれも、そのチームが他のチームと議論するときに、技術的な柱となる人物です。

まとめ

以上をまとめます。

  • Junior: 仕事を完遂させるために他人のサポートが必要

  • Middle: 仕事を一人で完遂できる(ただし、その仕事は Senior 以上のメンバーによってスコープが定義される必要がある)

  • Senior: 自分のチームに閉じたスコープだが、経営課題とビジネスモデルを理解して、仕事を創出・定義・実行することができる

  • Staff: チーム横断のスコープで、仕事を創出・定義・実行することができる

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
Ken Wagatsuma
🇬🇧 英国在住シニアソフトウェアエンジニア https://kenwagatsuma.com/