2年目新卒エンジニアが失敗を糧に新機能開発をやりきって感じたこと

2年目新卒エンジニアが失敗を糧に新機能開発をやりきって感じたこと

最初に

2022年4月に新卒エンジニアとして入社し、現在2年目でSEARCH WRITEのバックエンドエンジニアをしている太田です。

前回の記事では、僕が入社してから研修を経て初めて開発業務を完了するまでの道のりについて書きました。

その後は、SEARCH WRITE開発チームに入り、Web API開発をメインで行ってきました。
そして2年目の8・9月に、AIを活用した新機能の開発に入り、Web APIの開発を担当して、設計からリリースまでやりきることができました。

実は、その前に任された運用作業の負荷を下げるWeb API開発ではうまく進められず、失敗が多くありました。その失敗をふりかえり、得た学びを活かすことで次に掴んだWeb APIの新規開発を完了させることができました。

どんな挑戦や失敗があったか、それをどうふりかえり次に活かしたか、PLAN-Bの新卒エンジニア2年目はどういうことをしているのか、エンジニア志望の学生に僕の一例をお伝えできればと思います。

初めて掴んだWeb APIの新規開発に挑戦して失敗した話

2年目の6月。今までのSEARCH WRITEの開発が認められ、運用作業の負荷を下げるためのWeb APIの開発を任されました。

今までは先輩エンジニアが設計したものを実装していくことが多かったですが、今回は初めて設計から任されました。
初めての設計だったので、今までの経験からどういうWeb APIを作るのか、データベースにどのようにデータを記録していくのかを一から設計しました。設計した内容を先輩エンジニアにレビューしてもらい、足りていない観点などを教えてもらいながら形にしていきました。

運用API設計設計するときは考え込むだけではなく、オンラインのホワイトボード(FigJam)にどんどん書き込んでアウトプットする事を意識していました。

初めて設計をやってみて、コードを書いていくのとはまた違った難しさがありました。運用者がどのように使うかを理解しながら、解決したい問題に対して正しくアプローチできる仕組みを考えられているのかなど、今まで担当していた実装フェーズとは違うということを経験しました。
例えば、Web APIのエンドポイントを決めるにしても、汎用性のある設計になっていない。ばっちりだと思っていたデータベースのテーブル構成も先輩エンジニアから「ユーザーがどういう風に使うのかをイメージしながら設計できているのか」など指摘をもらい考え直すことが多々ありました。
指摘内容を改善しながら設計をすすめ、実装へと進めました。

実装については今まで様々なものを作ってきた経験もあり自信がありました。しかし、Web APIを設計から作る難しさは今までのものとは違いました。
設計に合わせた実装をしていると思っているが、なにか設計漏れ、実装漏れがあるのではないか、正しく実装をできているのかなどの不安を抱えていました。行って戻るを繰り返し、想定以上に開発に時間がかかり、約束した期限に間に合わせることができませんでした。結果的に、先輩エンジニアに巻き取ってもらうことになりました。

先輩エンジニアが実装した内容を確認すると、自分の実装した内容がことごとく変わっていて、修正内容を見ている時は悔しいという気持ちを通り越して、ただただ唖然としました。

運用簡易化API マージリクエスト↑先輩が実装したコードと僕が書いたコードとの比較。僕の書いたコードがことごとく赤くなっていて、修正されている。(赤が消した箇所、緑が追加した箇所)

修正内容について教えてもらったことがこちらです。

  • チームで決めているコーディングルールが守れていない
  • エラーハンドリングが適切ではない
  • テスト観点漏れ
  • DBのトランザクション制御ができていない

など多くの問題点を指摘してくださり、プロとしてのアウトプットのレベルを僕に提示してくれました。

自分で設計をしたものを形にしきることができず、実装した内容の質が悪くほぼ修正が必要だったことに、かなり悔しい経験をしました。
当時はかなり心が「うっ」となりましたが、1から実装するときに自分に足りない知識がなにかを把握できました。

この悔しさから、次またチャンスを掴んだ時は必ず再挑戦できるようにしようと、自分で勉強をし直しました。自己研鑽として勉強用にWeb APIの設計、実装を繰り返し、足りない知識の学習を進めていきました。次のチャンスを掴んだ時には必ず再挑戦できるようにコツコツと準備をしていきました。

Web APIの新規開発に再挑戦。今までの学習が花開いた話

2ヶ月後の8月、再挑戦をするチャンスが来ました。
SEARCH WRITEの新機能開発で、バックエンドエンジニアとしてWeb APIの新規開発を任せてもらえました。
この機能はユーザーや社内からも多くの期待を頂いているものでした。

SEARCH WRITEにはコンテンツ立案という、記事を作る作業を支援する機能があります。
今回はAzureのChat API(GPT-3.5) を使って記事構成案を簡単に作れるようにするための新機能を開発しました。僕はAIの回答データ取得や、ユーザーの入力情報を取得・保存を行うWeb APIを開発する事になりました。

当時は再挑戦の機会を得た嬉しさや「やってやる!」という気持ちを持ちつつも、また開発を完了できないのではないかという不安も入り混じったまま開発がスタートしました。

まずは設計から始めました。どういうテーブル設計にするのか、リクエスト内容やレスポンス内容はどうするのかなどを前回の失敗を踏まえて考えていきました。
前回の開発に比べると、データ保持の仕方、AIの回答の制御など初めてのことが多くとても難しかったです。任せてもらっている以上は責任を果たせるようとにかく考え、先輩エンジニアにレビューもしてもらい進めていきました。
一部仕様変更がありましたが、無事設計ができました。自分の考えた設計内容を元に作ることができるのはとても嬉しかったです。

そして実装が開始し、前回の自分に足りていなかった、学んだ知識を活用して開発することを意識しました。

自分で勉強もしていたおかげで、全体の構造をイメージしながら、ハマる事はありつつもほとんど自己解決をして、実装を前に進める事ができました。
仕事以外でも自分で考えたWeb APIを実装してみることで、今何をすべきなのか理解が早くなりました。実装がとても楽しかった感覚があります。
例えると、今まで打ってきた点と点が線になっていく感覚があり、開発力が上がっていると成長を自分で実感することができました。

とは言えまだまだ経験不足で先輩達の開発スピードには追いつけません。ただ、そこはもうとにかく適宜相談して、チームメンバーの力も借りながら、完了させる動きを意識していました。それだけでなく少し背伸びをして、僕の開発が完了したあとにプロジェクトリーダーが持っているWeb APIの開発を一部巻き取り、僕の方で進めていくこともできました。
今までの自分ではチームメンバーの開発を巻き取ることは難しかったですが、前回の悔しさを糧に学習・成長をしたことでいつも以上に開発に貢献することができました。

自分が1から作ったWeb APIと他メンバーが作った処理やフロントとを繋ぎ込み、動作確認できた時は「自分が1から作ったWeb APIと機能が動いている!」と感動しました。またそれ以上に再挑戦がうまくいったことにとても安堵しました。

コンテンツ立案AI機能開発左側のChat APIデータ取得、右側のユーザーの入力情報の取得や保存を行うWeb APIの開発を担当

そしてAI機能のリリース準備を行い、リリース手順書の作成を僕が担当し、無事にリリースが完了しました。
リリース後、多くのお客様がAI機能をご利用してくださっているデータを見た時、嬉しい気持ちと共に自分が作った機能だと胸を張って話せるようになりました。

これまでは開発が完了しても「本当に自分の技術力は上がっているのか」成長の実感がありませんでしたが、この開発を通して、初めてエンジニアとしての成長を実感することができました。

開発ができるようになるには業務内だけではなく、業務外でも自分で作ってみるのが技術力向上の近道です。
1年目はJavaやSQLなどを学んでも、それを使ってWeb APIを作ってみる経験が圧倒的に足りず、得た知識をアウトプットできていなかったです。

今回の再挑戦がうまくいったのは、次のチャンスに備えて自己研鑽を重ねてきたことが最大の要因だと思っています。

エンジニアは職人のようなものだと1年目に教えていただきましたが、職人として認めてもらうためにとにかく学んで作ってみることを繰り返すのが近道だ、ということを改めて痛感しました。

最後に

開発未経験で始まった新卒エンジニア2年目が、新規の開発をやりきるまでの失敗と成功の話でした。

就活生の時にエンジニアで内定を頂いた時は、「未経験なのに本当にやっていけるのだろうか」とチームの中でガツガツ開発をしている自分を全くイメージできませんでした。
そう思っていた中、2年目の夏でチームメンバーと共に新機能をユーザーに届ける所まで進むことができました。
チームの中で開発ができるレベルになるために、自分で積極的に学習をしていく努力が必要だということも痛感しました。

僕は「ただ作るだけのエンジニアではなく、ユーザーにワクワクを届けられるような価値をデリバリーできるエンジニア」になりたいと思っています。
指示されたものをただ開発するのではなく、ユーザーや社内からの要望をどう技術で解決するのか考えて、設計をして、チームを巻き込んで開発を前に進めて行く役割を担えるようになりたいと思っています。

そして今回の開発が僕のなりたいエンジニア像になるために重要な一歩だったと思っています。