🖤

自社開発メガベンチャーをわずか半年で鬱退職した雑魚エンジニアの話

2023/05/20に公開13

はじめに

当記事を開いてくださりありがとうございます。私は表題の通り、私は一般にメガベンチャーと呼ばれる自社開発企業で機械学習エンジニアとして勤務しはじめてからわずか半年で、鬱を発症し退職することになったものです。この会社は待遇も良く、社風としても労働者思いのとても素晴らしい会社であったと私自身振り返って思います。
 そんな会社に運よく入社することができた私ですが、わずか半年で「鬱状態」と心療内科から診断を受け休職し、会社制度により退職することになりました。「え?そんなに素晴らしい環境なのにメンタル弱すぎでは?」と思われる方もいらっしゃることでしょう。返す言葉が全くありません。おっしゃる通りです。
 しかし同時に、「何故鬱になったの?」と思われる方もいらっしゃるのではないでしょうか。本記事ではこの点について鬱を発症した本人の目線から「どうしてそんなことが起きてしまったのか」という点について考察してみたいと思います。 まず初めに注意書きですが、**私は関わった方々のすべての視点を理解しているわけではなく、自分視点の主観的な理解しかお話しすることができません。その点まずご承知おき頂ければと思います。**また、以下の文章には私が当時言われたとされる言葉が出てきますが、これらは 100%厳密に記憶しているものではなく、あくまで私の記憶の限り記述したものとなりますのでご了承ください。

何故「鬱」になったのか

さて本題です。私は何故鬱になったのでしょうか?当然社内の詳しい事情についてはお話しすることができないため、適度に抽象化して経緯を説明させていただければと思います(話を分かりやすくするため、時系列が正確になっていなかったりする部分もあります。あらかじめご了承いただけますと幸いです)。

入社直後:ワクワクと不安

入社すると、まずキラキラのノートパソコンを渡されました。もちろん Mac Book Pro です。私はそれはまで Windows + WSL しか使ったことがなく、Mac Book Pro を使いこなせる自信も全くありませんでした。同期入社の機械学習エンジニアの方もすこぶる優秀です。入るや否や速攻で開発環境を立ち上げ、過去携わってきた案件や研究の内容、最先端の深層学習アルゴリズムの内容を楽しそうに話しています。私が手間取っていた開発環境の立ち上げも、一瞬で解決してくれて開発できるようにしてくれました。 率直に言って「すごいところに来てしまったな」とそんな風に思いました。私は最先端の論文を追いかけるほど機械学習や数理最適化のアルゴリズムに詳しいわけでもなければ、Kubernetes, Terraform といったような煌びやかなインフラストラクチャ周りの深い知識があるわけでもないのです。 私はとても不安な気持ちになりました。それでも「何かしら組織に役立たななければいけない。そんな気持ちで望もう!」と強く意気込み、全力で業務に取り掛かろうと思っていました。

プロジェクトアサイン

ところで、もう一つ特筆すべきことがあります。なんと、どのプロジェクトに携わりたいか、選んでよいとまで言われたのです!私の前職ではデータサイエンティストとして勤務していたのですが、意志などとは関係なく降ってきたタスクをこなすことが要求されました。例えば「ファシリテーションの新人向け研修をやってくれ」などといった業務です。そういったことが当たり前だと思っていた私はまた感動してしまいました。そこで私は、前職での経験が一番近そうなプロジェクトを選択し、そのプロジェクトにアサインされることになりました。

プロジェクトアサイン直後

さて、当然ですが私は仮にも機械学習エンジニアですからソースコードを共有されることになります。ワクワクと不安を抱えながら、github からソースコードをクローンして、読み始めました。すると「?」となりました。どうも全くソースコードの意味が分からないのです。その当時は「僕のコード読解力が足りないせいで読めないんだ…」と思い、かなり落ち込んでいました。しかし休職してからある本と出逢いました。それが以下の本になります。

https://amzn.asia/d/fQBbiup

この本を読んでみるとその理由がだんだんと分かるようになってきました。例えば、以下のような理由が挙げられます。

  • データの定義が存在しない。(これはコードそれ自体の問題ではないですね。)
  • SQL や Python コードにほとんどコメントが見られない。
  • 異様に長いデータフレーム操作が含まれる。df.assign().merge().pipe().pivot().unpivot().assign().pipe()… のような。
  • 適切な粒度による関数の切り出しが行われていない。
    • たとえば機械学習においては「学習データ作成」と「検証データ作成」の課程でほとんどの操作は共通化されるはずで、違う部分は教師データに対する操作のみだと期待される。
    • しかし、「学習データと検証データで何が違って何が同じか」を確認するのに毎回数百行のコードを読まないといけない。
  • Python コードに docstring や型ヒントが一切ついておらず、どんな変数が入ることが期待されているのか、あるいはどんな変数がアウトプットとなることが期待されているのかさっぱりわからない。
  • プラスアルファでその関数の処理において必ずしも知る必要のない変数が含まれていたりする。

つまり私にとっては「なぜこんなことしているんだ…?と意図のよくわからないソースコード」だったのです。このソースコードが既にプロダクションデプロイされている、というそんな状況でした。

雑魚エンジニア、始動

さて、私ことポンコツエンジニアも最初は「自らのコードリーディング能力が不足しているせいだ…」と思っていたのですが、ロバスト Python を読む前の段階においても「これはさすがにまずい…」と認識するようになりました。このままでは拡張性、保守性にあまりにも問題があると思っていたためです。少なくとも自分にはこのコードを保守できる自信がありませんでした。
 そこで、私は件のコードの責任者である先輩エンジニアの方にコードをリファクタリングすることを提案しました。すると先輩エンジニアはこう言いました。

「このコードは既に十分に綺麗だから、(コメントは追加してもいいけど)リファクタリングする必要はない」

…どうしよう。そんな気持ちが私の頭の中によぎりました。このままでは議論は完全に平行線です。私の部署は放任主義といった感じで、自分で主体的に動いて仕事を作っていくことが求められる部署でした。そのため、このままでは自分の提案を受け入れてもらうことができず、社内失業状態です。 そこで、頭の至らない私にとって選択できる解決策はあまり思い浮かばず、「第三者に判定してもらおう」と思い、ソースコードの一部を私の部の slack に共有し「このコード、率直にどう思いますか?」とお伝えしました。

すると「正直私はあまり触りたくはないですね…」というリプライが付きました。「(私が追加した)コメントがなかったら、何をやっているか本当にわからない」というリプライもつきました。どうも、私の所見と同じように感じる方もいらっしゃるようです。「ああ、やっぱりそうだよね。」と少し安心した気持ちで眺めていた私ですが、そこで件のコードの先輩エンジニアからこんなリプライが返ってきました。

「このコードは挙動が変わらないことを保証できなかったから、いじれなかっただけなんだ」

あれ?前と言ってること違うくない?率直にそんな風に思いました(というかそれならそれでコメントぐらい自分で読んで書いておけよ、と思わなくもありませんが)。そこで、「私がこんな風にリファクタしたらきれいに、読みやすくなりませんか」と提案したところ、こんなご回答が。

「挙動が変わらないことだけを願います。というか、ただクラスに書き換えただけに見えるのですが。」

どうやら「ソースコードを通じて意図を伝えることの必要性」や「読み手の認知負荷を引き下げる必要性」といった認識がこの先輩には存在しないようです。そこで「あれ、雑魚エンジニアの僕ではこの先輩の下ではもうやっていけないのでは…?」と率直に思いました。

誤解を招きたくないので補足しておきたいのですが、この先輩エンジニアの方に責任を押し付けたいわけでは決してないです。この先輩エンジニアの方はそれこそアルゴリズムなどは最先端の論文を追いかけているほどゴリゴリにできる方でした。社内勉強会でも時折発表されていましたが、難しい内容をとても分かりやすくかみ砕いて説明することのできる方で率直にすごかったです。その点を強調しておきたいと思います。

初めての評価

さて、そんなこんな色々と試行錯誤していた私ですが初めてマネージャー(件の先輩エンジニアとは別の方です)から四半期評価をされることになりました。そこでの評価はこんな感じ。

「今期はキャッチアップに時間を使っちゃってあまり何もできなかったね。もっと積極的に提案していってほしいな。評価は4段階中の下から2番目です」

確かに、表面上私がやったことはほぼゼロでした。それこそ「コメントを追加しただけ」だったのです。私は雑魚エンジニアでした。自分の中では一生懸命あの手この手で提案したりしていた(上述のソースコードのリファクタリングに以外にも、です)のですが、結局のところ私が変えられたのは「コメント」だけだったのです。

雑魚エンジニア、鬱へ

こうした「自発的な提案」が求められる環境における「提案の拒否」が相次ぎ、私はどんどん心をむしばまれていきました。だんだん職場の方も心配するようにはなってくれたのですが、その時にはもう(自分でも気づかないうちに)かなり追い詰められた状態でした。 ある日、マネージャーと面談をする機会があり「そっちのプロジェクトは大丈夫ですか」と聞かれたときに私は「率直に厳しいです。コメントもドキュメントもなくて何が書いてあるかわからないし…。」という話をしました。その時、マネージャーからお伝えいただいたのがこんなお言葉でした。

「あ、そういうコードを保守した経験ないんですね。別のプロジェクトにアサインすることもできるけど、その場合は個人で担当してもらうことになるけど大丈夫ですか?」

多分、この発言を機に私の心は崩壊したのだと思います。自分が「コードの保守もできない」雑魚エンジニアであることが問題だと指摘されたように私には感じられました。そして、その雑魚エンジニアには「個人でプロジェクトを回せるほどの自信」がもはや存在していなかったのです。

気が付くと、私はベッドから起き上がることもできず、具体的な自殺の方法を考える毎日を過ごしていました。「どう死ぬと楽に逝けるかな。」そんなことを毎日考えていました。そこまで来て、かなり色々な人(職場以外の家族など)から心配され、心療内科を受診し、「うつ状態」と診断を受けて休職することになりました。社内制度の関係で、休職は最大でも3カ月で、それを超えて復職できない場合「退職」となります。

私自身、休職を経てうつの急性期に比べれば大分まともに動けるようにはなってきました。本を読んだり、プログラミングしたりできるようにもなってきました。ただ、サイレースという日本で最強の睡眠薬を処方されてもなお浅い断続的な眠りが続く状態なのです。そして薬の副作用か分からないのですが、毎日悪夢を見ます。そんな状況で日中も割と眠い状況が続いていたため、これは復職困難だと判断し、退職に至りました。

得られた学び

この経験から何も学びを得ないのでは、「うつになっただけ」になってしまいます。それは本当にもったいないので、私自身何が学び足りえたかな、ということについて記述してみたいと思います。

1. 能力に見合った会社・待遇の仕事に就くべきだった

率直に、自分の能力不足を痛感しました。それはもちろんプログラミングや機械学習アルゴリズムに対する専門性もそうですが、社内政治や意思決定を勝ち取るための信頼形成能力なども含めてです。そういった能力が足りなかったため、結果として信頼を得ることができず、何も変えることができませんでした。

2. 志向性が合う会社に行くべきだった

自分が大切にしているもので自分より劣っている人の意見について、やはり無意識的にしろ意識的にしろ人は軽んじるものなのだな、と感じました。例えば、私でいえば「コードの保守性・運用性(=長期的な課題解決)」を重視すべきと考えているため、コードの綺麗さや意図を伝えようとする努力に対して高い期待値を持っています。それが低い状態で運用されているのを見ると、修正したくなってしまってしょうがないのです。 しかし、逆に先輩は「アルゴリズムによる(目先の)課題解決」を重視されている方だったのです。私は先輩と比較すればアルゴリズムに対する理解度は圧倒的に下です。ほとんどないといっても過言ではありません。だからこそ、私の提案は「とるにたらないもの」としてしまったのかなと感じています。
 つまり何が言いたいかというと「重視するものが何か」ということについてもっと志向性を合わせないといけなかったのです。この志向性(目的意識・価値観)がズレているとうまく仕事がしづらくなるのかなと思いました。私が大切にしたいと思っていた拡張性や可読性は、少なくとも私がアサインされたプロジェクトにおいては期待するほど重視されていなかったわけです。(実際にプロダクションコードとして動いていたコードは前述のとおりです)。

3. もっとコミュニケーションをとるべきだった

先ほど志向性が合う会社に行くべきだったと言及しましたが、とはいえ価値観は多かれ少なかれ人それぞれ違うものです。だから、こういう摩擦が発生することはどうしてもあるものだと認識しています。お互いの価値観を知るために、もっとコミュニケーションを取らないといけなかったんだろうなと思っています。最も、私が件の先輩エンジニアに「質問をしてもいいですか?」と聞くと

「少しだけならいいよ。」

と言われることが多く、コミュニケーションをなるべく抑えてしまったことも理由の一つだったのですが。傷つくこと覚悟でコミュニケーションを取りに行けばよかったなと思いました。

「君の提案には目的意識がない」

と言われたこともありました。その時の私の提案にはもちろん目的意識があったはずなのですが…。衝突することを恐れてコミュニケーションを深めることをやめてしまったのが反省点です。

4. 短期的な評価にこだわりすぎるべきでなかった

まずこのポイントが今回私が学ぶことのできた最も大切なポイントであったということをお伝えできればなと思います。短期的な評価にこだわりすぎるべきではなかったなと思いました。どうしてかというと、短期的な評価は不確実性も多分に含まれており、必ずしも合理的になされているとは限られないためです。 「結果がすべて」 という言葉があります。私が叔父に言われ続けた言葉です。私自身この考え方を信念とすることに一定の合理性があるものと考えています。しかしこの言葉への認識を間違えると、自分ののど元に刺さりかねない諸刃の刃であるなとも、感じるようになりました。
 例えば、センター試験を例に挙げてみましょう。短期間の間に模試を何回か受けることもあるかと思いますが、点数が変動することって結構ありませんか?この点数の変動を「短期間において自分の能力が上がったり下がったり」したと考えることが合理的でしょうか?そう考えるよりも「たまたま発生した問題との相性によって点数が変動している」と考える方が私には自然なように感じられます。
 同じことが仕事の結果に対しても言えたりしませんか?ましてやセンター試験の例とは異なり、仕事の評価についてはそこまで厳格な点数の基準があるわけでもありません。そうである以上、 たまたま成果を出したと認められたり、たまたま成果を出すことができなかったと認められることもある はずです。その結果がもたらされたすべての要因を上司に考慮してもらうことなど、現実的には不可能なのです。実際上司は私の状況を理解していないからこそ、「もっと積極的に提案していってほしい」というフィードバックを返してきたのです。実際のところ私は提案自体は積極的に行っていたにも関わらず、です。 誤解を招きたくないので再度強調させていただきますが、「上司の判断がおかしい」と言いたいのではありません。上司の立場からすれば限られたリソースでなるべく正当な判断が出せるよう、表層的な結果を根拠に評価することは合理的であると私は感じています。しかしながらあくまで結果や評価は常に納得性のある(=自分の能力や努力を反映した)ものとは限らないから、短期的に部下の立場としてあまり傷つきすぎなくてもよいとお伝えしているのです。

5. 選球眼を養わねばならないということ

このブログを書きながら、以下の本を偶然見つけ、読んでいました。

https://amzn.asia/d/ea9VyI5

もし IT 系に来られてメンタルを病んでしまいそうに思われている方にはぜひ一度手に取ってみてほしいと思っている本です。この本ではメンタルを病んでしまった方々の経験談がたくさん記述されています。色々な事例が登場しますが、私にとって最も印象的だったのは「気づいたときにはもう手遅れ」になる人が意外と多いという事実でした。つまり「まだ大丈夫だ、いける」を繰り返すことがとても危ういということです。
 もちろん気合で乗り切れる場面もあるかもしれないので、それを一概に否定するわけではありません。ただ、その限界が訪れるのは大丈夫だ思った次の瞬間だったりするので、注意してほしいということです。 野球の例えがどれくらいの人に通用するか自信がないですが、敢えて例えるなら、手元で急に曲がって自分に突っ込んでくるスライダーのようにイメージしていただけるとよいのかなと。「インコース!打てる!」と思って振ったボールが体に直撃するようなものです。とても痛いし、下手したら大怪我につながります。
 ある友人は私に「そんな際どいボール見送ったって最悪ストライク一つ取られるだけでしょ」といいました。その通りです。でも私にとってはその一球は「ここで打てなきゃ終わる!」という一球のように感じられていました。だからこそ振るしかなかったのです。しかしながら本当にその一球は自分にとって「ここで打てなきゃ終わる」ほどの大事な一球だったのでしょうか?大怪我のリスクを背負ってまで必要なリスクだったのでしょうか?もしかして「短期的な評価にこだわりすぎていた」のではないでしょうか?そんな風に当時を振り返っています。

まとめ

会社の方々にはせっかく雇ってくださったのに、まともに使えないエンジニアで申し訳ありませんでした。しかし、同じように悩むことになるエンジニアの方もいらっしゃるのではないかと思いますので、一人の失敗談として笑い話にでもしていただければ幸いです。このブログが、今辛いと感じながらも働いている誰かの人生を少しでも楽にすることができたらいいなと心から願っています。

Discussion

Hidden comment
きむきむ

文章を拝読する限り、認知のゆがみを発症している可能性が高いのではないかと思います。
僕自身も一年目鬱になりかけました。

https://www.uraraka-soudan.com/column/91

たぶん鬱が治りきってないのではないかと。
精神科ほどセカンドオピニオンが必要な分野もないので、必要であれば他受けてみてもいいかもしれません。

こちらの本とか読んでみてはいかがでしょうか。

https://www.amazon.co.jp/いやな気分よ、さようなら-コンパクト版-デビッド・D・バーンズ/dp/4791108485/ref=mp_s_a_1_1?crid=2IKDRNFTFR8GW&keywords=嫌な気分をさようなら&qid=1684641906&sprefix=嫌な気分をさようなら%2Caps%2C270&sr=8-1

JoanOfArcJoanOfArc

こちらコメントいただき有難うございます。
私自身も自らに認知の歪みがあると思っておりまして、
実はたくさん臨床心理や鬱に関する本を拝読させていただいております。
ただ、こちらの本については存じ上げなかったので、どこかのタイミングで読ませていただければと思います。
セカンドオピニオンについての提案も有難うございます。

すずきたかまさすずきたかまさ

気持ちはわかる!
あまり囚われず、次が合う会社だといいですね

JoanOfArcJoanOfArc

コメントいただき有難うございます!
しっかり療養して、回復したらあまりネガティブに考えすぎず、次うまくいくように頑張ります!

zakitomozakitomo

自分もある転職先ですぐにうつになりかけました。関わる業務の要望をちゃんと聞いてくれる、いい会社でしたが自分の力量が足りず、お力になりませんでした。今思えば、当時の上司はやり手でしたが部下を育てるというよりは、ふるいにかけて残った強い部下を選ぶような感じでした。弱い?自分が合わない転職先を選んでしまったのが悪いのですが中に入ってみないと分からないので、反省はしつつ、「はい!次!」と気持ちを新たに切り替えてます。会社選びは不確定パラメータがてんこ盛りのプログラムを解析するようなものだと思うので。

JoanOfArcJoanOfArc

会社選びは不確定パラメータがてんこ盛りのプログラムを解析するようなもの

私もおっしゃる通りだと思います。しばらく療養して回復したら、気持ちを切り替えて再度頑張りたいと思います!コメントいただき有難うございました。

marukawamarukawa

例え話として、私は本当に優秀なエンジニアは崖の縁に柵をコツコツ作る人だと思ってます。
しかし、現実に評価される人は崖から誰かが落ちそうになったら、その瞬間にリポビタンDのCMみたいに手を差し伸べる人です。
また、コードを増やす人よりコードを減らす(整理する)方が大変だし偉いと思います。
その意味でも正しいことをやろうとしていたように見受けられます。

なので、たまたま評価軸が合わなかっただけだと思いますよ。

JoanOfArcJoanOfArc

有難うございます。そのように言っていただき心が救われる思いです。
わざわざコメントくださりありがとうございました。

kkk123kkk123

とても面白い内容でした。感想です。
私もいわゆるITエンジニアで人を評価する立場ですが、単に保守性が低いという理由でリファクタリングしたことが評価された、と言いう成功体験はあまりしてほしくないと思ってます。

(特に若手によくある)手段が目的になっちゃっている状態な気がします。
率直に言うと、事業ありきのサービスなので事業数値が上がらないリファクタリングは、事業評価者からするとリソースの無駄遣いでしかないという評価になる気がします。
例えば、担当のサービスが 1 年後にクローズしてしまう未来があった時に、あなたが 1 年かかるリファクタリングをやります、クローズしちゃいましたが、私の書いたコードは保守性が高いです。と言われても本末転倒です。そうでなくても、そこまで活発に手を入れられないコードであればそのままでも良いかもしれません。

社員であれば他のサービスや部署に再配属されてノーダメージですが、会社としては損失を少なからず被るわけです。もし、あなたが経営者であれば、リファクタなんかしてないで、少しでも事業を継続させるために何かできたんじゃないか・・と考えるでしょう。
マネージャーからのフィードバックでもっと提案してほしいとあったのは、そうゆう方向性の提案だったんじゃないかと思います。

先輩がリファクタリングに乗り気ではなかったのも、そうゆう視点であなたのリソースを割くのをためらったんじゃないかと思いました。
また、入社間もない新人に黙々とリファクタリングをやらせるよりも、もっと活躍でき目立てる様な機会を与えたかったんじゃないかとも思います(社風が良いのであればその可能性は高いんじゃないかとの希望的観測です)。

もちろんリファクタリングなんかするな、というわけではなく、「中長期的な視点で俯瞰した上で事業貢献できるこんな機能を追加したい、アルゴリズムを実装したい、ただしそのためには今のコードだと保守できないのでリファクタリングさせてほしい。」というアプローチであれば周りの評価も違ったかもしれないと思いました。
とは言え、ほとんどの人がそんな動きを入社してすぐにできるとは思えませんが・・

とは言え、(あなたが新卒か中途かにもよりますが、)周りの先輩やマネージャーが意図を説明しないのも若干環境に恵まれなかった様に思います。
あと、それなりに優秀だと思って採用した人が半年で鬱になり退社してしまうのは、社内ではそれなりのインシデントだと思うので人事担当者やチームメンバーは再発防止策などの検討もしたのではないですかねwこれも希望的観測ですが。

長文で書いてしまいましたが、とは言え、そんなに気にしないで次の現場では抱え込まずに気楽にやっていけばいいんじゃないかと思います。

JoanOfArcJoanOfArc

わざわざ長文コメントくださりありがとうございます。

文章があまり長くなりすぎることを避けて記述しきれておらず恐縮なのですが、
実は事業にインパクトを与える提案をセットでしていて、まさに

「事業貢献できるこんな機能を追加したい、アルゴリズムを実装したい、ただしそのためには今のコードだと保守できないのでリファクタリングさせてほしい。」

という形で提案させていただいておりました。誤解を招いてしまい申し訳ございませんでした。
そのように先輩エンジニアの方にも説明していたのですが...。受け入れられなかったのは自分の実力不足(単にアルゴリズム技術などに限らず、信頼形成などを含めたコミュニケーション能力の不足)だと思っています。

ただ、仰っていただいたように中長期的な視点を理解し、何が事業貢献するうえで最適かという点については今後もより一層注意して取り組んでいきたいと思います。学びのあるコメントを頂きまして本当に有難うございました。

demerzeldemerzel

kkk123さんとほぼ同意見です。自分はあなたとその先輩両方を経験しました。その中から自分が得た結論はあなたが言うように結果次第です。そして結果はお金です。特にその会社の雰囲気はそうだとと思います。リハァクタの必要は、常に決まってるわけでなく、そのサービスがこれからどれだけ利益を生むか、リファクタリングにかける工数と新しいその他の提案とお金に換算して優先が決まります。事業化されているときのコードはどんだけ汚かろうと、ギリギリまで触らないのはこの世界の常識です。あまり事業会社は向いてないかもしれません。提案というのは、そういう会社ではお金につながる話です。

JoanOfArcJoanOfArc

仰る通りかと思います。当時の私の状況を kkk123 に対する返信に記述しておりますので、よろしければご確認いただけますと幸いです。

PppPppPppPppPppPpp

非表示になってるコメントが一番いいねもらってる…みんなコメントをわざわざ表示したのか…?笑