toraMasa's blog

toraMasa’s blog

新真虎のテックブログ

サイバーエージェントのAMoAdで3ヶ月間内定者アルバイトをしました!

自己紹介

22卒でサイバーエージェントに内定を頂いているバックエンドエンジニアです。

github.com

AMoAdについて

AMoAdはアドネットワークのプロダクトです。

定量的な振り返り

  • リリース: 12回
  • コミット数: 116
  • PR数 19
  • 書いたesaの数: 79
  • Slackの発言数(検索ボックスでfrom:meで検索して出てきた数): 627

はじめてエンジニアとしてインターンしたときと比較すると、PRとドキュメントの数はほぼ一緒(コミット数は不明)だけど、Slackの発言数がやたら多い。なんでだろう。前回どうやってカウントしたか忘れちゃったけど、カウント方法が原因なような気もする

やったこと

学んだこと

自分にとって新しい技術・知識の習得

  • Java, Scala, Kubernetes
  • アドテクノロジーについての知識
  • 自分にとって未知の技術でもキャッチアップする自信がついた
  • 未知の技術(言語)を高速に習得するコツ

レガシーコードについての知見。

  • 成功したプロダクトほどレガシーになる。むしろ成功したからレガシーになる(レガシーになるということは、サービスの寿命が技術のライフサイクルより長いということ)。逆に言うと、しょぼいサービスはレガシーにならない。それを脱却するにはなにはともあれテストを書くこと。
  • 既存のテストのものまねでテストを書くのではなく、あるべき場所にあるべきテストを書く
    • とはいえ、他とスタイルを揃えることは横展開しやすくなるので利点もあるなと思った
  • テストの実装スピードが自分のDXにすごく影響するなと思った。テストの実装に時間がかかるととても苦痛
    • 学生のエンジニアにしてはテストに対して意識高い方だとは思うけど、もっと勉強しようと思った
  • 結局気持ち(レガシーに立ち向かう気概とプロダクトに対する責任感)が大事なのかな?とも思った

アドテクのプロダクトならではの知見

  • トランザクションやキャッシュ周りの設計, AMQP・RabbitMQ, ログの永続化の設計, SQLの最適化など今まで(自分が)考えたことがなかったことを学べた
  • お金をめちゃくちゃ稼いでいるプロダクトだからこそ、リリースやアラートに対する緊張感が今まで自分が携わったサービスとは違うレベルだった
    • その分やりがいもあった

エンジニアとしての基礎的な知識

  • コードの読み方
    • テストコードを読むとコードの意図をつかめる。
    • デバッガーを使ってデータの流れを追う。
  • デバッグのやり方
  • エディタ(JetBrains系)の使い方
  • 優先順位に対する意識。今までは何か問題とか改善点を見つけたら何も考えずに取り掛かっていたが、今回のバイトでは優先順位を考えた上でどの程度までテストを網羅すべきか、どの程度リファクタリングに時間を使うべきか、などを判断して取り組めた(その判断の質に関しては自信がないが、少なくとも判断しようとした)。

その他

  • チームのすごい開発責任者を間近に見て、円滑な業務遂行やビジネスの方とのコミュニケーションなど色々学んだ。チームの雰囲気がとても良くて働きやすかったです。
  • 頑張ればなんとかなるということ
    • 一見難しそうだと思ったタスクも、頑張ればなんとかなった。逆に言うと、今までの自分は実装の困難さを過大評価していたような気がする。今まで実装できなそうと思って諦めていたアイデアの中にも、本当は実現できたものがいっぱいあるかもしれないと思った。
  • 実装の難易度と貢献度は比例しないということ
    • 簡単だけど周りにすごく喜ばれる実装と、時間をかけてもあんまり喜ばれない実装があると気づいた
      • 喜ばれる実装かどうかを判断する方法の仮説
        • 責任者やビジネスの方に聞く
        • MVPをできるだけ高速で作ってチームの人に見せる
        • ドメイン知識やビジネス要件をもとに判断する
    • 難易度が低い割に汎用的に喜ばれることもあるな〜と思った
      • レビューを依頼された瞬間にやる。自分がチームの方にやってもらってとてもありがたかった
  • MVCの弊害
    • どこかがファットになってしまうのはあるあるなんだと知った

苦労したこと

ドメイン知識。

  • タスクを理解するにも実装にもまずドメイン知識がいっぱい必要。
  • はじめてのバックログでチームの方が話していることが全く聞き取れなかったのを覚えていますw

フロントがない

  • 今までtoCWebサービスしかやったことがなかったので、フロントエンドがない開発に戸惑いました

動作確認

  • 動作確認のために広告を作るのも苦労しました。結構手順が複雑なので、不具合があっても実装が悪いのか広告の設定が悪いのかの切り分けが大変でした。

工夫したこと

ドメイン知識にキャッチアップするための工夫

  • MTGの議事録を取る
    • スプリントバックログなどのMTGの議事録を勝手にとっていました。これはやってよかったとすごく思います。
      • メリット
        • 会議に集中できる
        • ドメイン知識の勉強になる
        • 周りのメンバーのタスクを把握できるのでチームの優先順位がわかる
        • 自分のわからないところが明確になる
  • ビジのMTGに参加させてもらう
    • ビジネス職のメンバーのMTGに参加させていただきました。特に発言はできなかったですが、勉強になりましたし単純に面白かったです(社会科見学感覚)
  • アドテクの本を一通り読む
    • アドテクの本を最初に8冊くらい読みました。だいたい3冊読んだあたりから会話についていけるようになりました

開発

  • 拙速
    • PRも設計もミニマムのものを可能な限り早く作って見てもらう、ということをしていました。自分の勘違いや設計上の問題点などクリティカルな部分を早めに修正できたので、手戻りが少なかったと思います。
      • 見てくださるチームの先輩方がいてくださったからこそですが
  • document書く・共有し合う
    • 文書化されていない手続きやREADMEを積極的に直していました。ドキュメントを書く、みたいな部分は今までも意識的にやっていましたが、チームによりすごいドキュメントを書く方がいらっしゃったので刺激を受けました。
  • テスト駆動開発
    • とにかく稼いでいるプロダクトなので、バグを出さないためにテスト駆動開発を試していました。

その他

  • ドキュメントやコードの気になる点・負債などをメモっておいて後で共有する
  • 自分のコミットログを日報に入れる
    • あんまり効果なかった

良かったこと

目標達成できた

  • サイバーで安心して働けそう
    • 長期インターンを経験せずに内定承諾したので、パワハラ会社だったらどうしようと怯えていました。なので楽しく働けるイメージが持てて本当に良かったです
  • 貢献と自己成長の両立
    • バイト代くらいは貢献できた(と思う)
    • 新しい技術学べた
  • 自分の実装が大きな額の案件に使われる(予定) 月締め会でも紹介してもらった

キャリア

  • 会社についての理解が深まった
  • 就活のときに持っていた価値観やこだわりが無意味なものだとわかったり、変わったりした
    • toCで慈善性の高いプロダクトが良いと思ってた→toBの広告プロダクトだったけどとても楽しかった

技術・知識

  • 新しい技術学んだ
  • アドテク詳しくなった、面白い
  • 周りの優秀なエンジニアから学べた
  • 本番でバグ出さなかった

その他

  • チームの方にランチに連れて行って頂きました。美味しかったです。

f:id:toraMasa:20210730191443j:plainf:id:toraMasa:20210730191453j:plainf:id:toraMasa:20210730191555j:plain

  • 売上好調な雰囲気の中で働くのが楽しかった

反省点

  • 積極性
    • 意見とかももうちょっと積極的に言えば良かった。様子見をしてるうちに終わってしまった
  • (多分無理だけど)全部出社できればより良かった。でもそれは(起きれないから)厳しそうとわかった。逆に週5だったらできるかも?