アルパカ三銃士

〜アルパカに酔いしれる獣たちへ捧げる〜

2019年の仕事周り簡易まとめ

この年は他の会社に入社していたら絶対に経験できないだろうなということを経験できたので本当に良い年だったと思う。優秀な人が多い会社なのでそういった方々と一緒に仕事をすることができたおかげで「どんな考えを持って仕事をすべきか」というのが少しだけ見えた気がした。

もっとあるだろうけど、一旦思い出したことを簡単にリスト化した

  • ソフトウェアデザインへ寄稿した
  • 組織
    • 一時期 merpay へ異動していた
      • 0 から背景のキャッチアップ大変
      • 開発文化、技術的なカルチャーギャップを感じた
    • 開発面だけでなく CS, 加盟店審査が何を意識すべきか見えたのは良かった
    • Microservices とチーム
      • ドメインとチームは別の概念
        • 全体の中である部分が定義されたものを指す
          • item, user, listing, catalog など
      • core, common, misc, utils といったドメインを作ると破滅する
        • 「これどこにおいたら良いかよくわからないからとりあえずここで」というイベントが起こる
      • 複数のドメインが扱うメイン(コア)な存在のドメインを 1 つのチームに置くと破滅する
        • Microservices は関わりを持った人がサービスの終了まで Ownership を持ったほうが良い
        • 一つのチームで沢山のサービスやプロジェクトを意識しなくてはいけなくなる
          • 少なくとも Tech Lead はそうする必要があるので話し合いがメインとなり、開発に携われなくなってしまう
        • 基本的に 1 チーム 1 つのドメイン を意識してチームを作れると安定すると思った
        • 現場のエンジニアだけでなく、そのレポートラインも「どんな機能があり、どういうふうにドメインを分けられるか」を把握してない限り、組織的な改善が行われないままに終わることも知った
    • ドメインドッヂボール
      • この機能だれが持つべきでしょうか!?といった永久に渡る議論
      • 曖昧なドメインも存在する
        • i.e: 配送機能、商品機能、ユーザー操作も含まれる機能
        • これだけのために新しいドメインを定義すべきかという議論も生まれる
      • 自分たちの定義に反してるので我々のものではないのでそっちで頼んだという意見も度々出てくる
      • 複数ドメインに関わるような施策の場合は直接的な話し合いより Design Doc を書いてレビューしてもらったほうが終結が早い事がわかった
        • Design Doc に書くもの
          • どんな機能か、問題の解決策
          • アーキテクチャの図、周辺環境の図
          • 他にどんな解決策があるか
            • それぞれの Pros, Cons
    • Tech Lead, EM, PJO とはなんなのか、何をすべきか
  • MySQL
  • GCP
    • Cloud Functions 触った
    • Spanner をいっぱい触った
      • Spanner ヌルヌル動く
      • Transaction の扱いが MySQL と全く違う
        • MySQL である行を FOR UPDATE で書き込み wait 状態にして...みたいなのができなかった記憶
      • 開発環境辛い(エミュレーターが無いので直つなぎ)
      • Spanner を直つなぎするようなテストを Circle CI で動かすと遅い
        • CI のリージョンが US なので Spanner も US リージョンへ変えたところ爆速になるという知見を手に入れた
    • Cloud Storage 大好き
    • AppEngine も触った
    • IAM を使った権限制限の意識を始めた
    • Cloud PubSub が大好きになりました
    • GKE も良い
  • 個人的なあれ
    • 初の goccy さんとの会話!!
    • Perl を書く副業を始めた(Perl -> Go を行うことを前提で入ったが結局 Perl を書いてる)
    • Clean Architecture 的なディレクトリ構成を一般ピーポーよりは把握できた
    • tmux を使った同時並行に複数タスクを進める技を身に着けた
    • Google Docs, SpreedSheet がめっちゃ便利だということに気がついてきた
    • GitHub を使った歴史をたどっていく技術が身についてきた
      • 基本は git blame
      • git blame したあとに PR 番号などを探し、チケットも探す能力
    • リファクタリング、新規作成、リファクタリングリファクタリング
    • GCP Cloud Professional Architect になった
    • 大雑把な工数見積でも大切ということが分かった
      • 経験したことのない技術を扱う場合
        • 検証にかかる工数の見積もりを出す
          • 終わっても工数の見積もりが出せないケースが存在することを知る
    • OKR の Objective を達成率 100% を目指すような人は警戒したほうが良いということを学習した
      • 本来は 60~70%の達成度で成功とみなす Objective を作成する
    • PagerDuty, Datadog の使い方ほぼ理解した
      • Monitoring 大切