What I've learnt from been an architect for 3 months

年始にアウトプットを増やすと言いながら、もうすぐ今年4分の1が終わろうとしたので、そろそろ何か書こうと思います。
最近特に新しいことやってないので、ちょっとした思い出話したいと思います。
今更ですが、去年八月からプロダクトのアーキテクトに任せてもらいまして、
粛々と3ヶ月やって見ましたが、うまくいかなかったので、概要と学んだことを記録したいと思います。

そもそもなんでやろうと思ったのか?

今のプロダクト2016年後半リリースしたもので、さらにその前に別プロダクトの一部として開発して、Gitの履歴は2015年まで遡れます。
私が最終入った時はちょうど開発規模拡大するタイミングで、結構大人数で開発しました。
ただその開発のスタイルは最初の頃とはあんまり変わらず、1年ぐらい続くと、膨大な技術的負債が溜まってしまいました。
毎週リリースするものがどんどん減りながらも、ほぼ毎回問題起こしている(すぐロールバックできるが)状況でした。
もっと品質をあげて、問題を原点から減らしたい、自分を含めて、チームの効率を向上したいため、アーキテクト(改善要員)をやらせていただきました。

やりたかった事

色々開発課題を整理して、主に実現したい目標は「プロダクト品質向上」「リリースを加速・安定させ」「エンジニアチームのパフォーマンス向上」の三つを考えて、いろんなことをやろうとしました。

プロダクト品質向上

  • API仕様をコードに落せ、テストできるようする
  • 単体テストを増やす
  • 技術的負債の可視化と解消を促進する
  • 重複コードの可視化と解消を促進する

リリースを加速・安定させ

  • 品質の担保が増えるように、開発フローの見直し
  • 安全にリリースできる仕組みを検討

エンジニアチームのパフォーマンス向上

  • エンジニア行動指針定義
  • エンジニアスキルマップ
  • 共有・学習促進

実際やった事

初めての試みなので、やることの度合いや粒度が全くわかりませんでした。
実際、やろうとしてことの半分もできませんでした。

  • APIテスト
    => 必要な箇所を洗い出して、例を作って、チーム全員に共有しました。最初は一部の人が協力的で、リストの3分の1ぐらいのドキュメントを追加し、テストもパスできるようにしました。でもその後、うまく開発フローに取り込めず、あやふやの状態でやめました。
  • 負債管理ボード整理
    => 溜まっている技術的負債が対応されるため、一覧できるためのJIRAボードを作って、既存の負債チケットを写しました。
    ただ、大半か技術的なことしか書いてないため、なぜやるのか、やったら何が嬉しいのかがわからず、特に対応する人が現れませんでした。
  • 重複コード整理
    => 技術的負債の大き課題の一つで、重複コードを改善するため、重複のあるファイルの一覧を作りました。
    やはり、共有しても、何をどうすればいいの何かが伝えずに、対応する人が出現できませんでした。
  • 品質基準決めと毎週計測して、可視化する
    => 全員の意見をまとめて、必要な基準を決めましたが、計測が毎週個人が手入力しているし、特に改善点について検討してないため、
    その中バグチケットを自動的に数えるChatBotしか残ってませんでした。
  • 技術の勉強を促進するため、部署内の勉強会を開催
    => 色々あって、勉強の場になれませんでした。
  • 開発フロー各ステップでしっかり品質を守れるように、見直し、資料をまとめました
    => 適用せずに、Scrumやることになりました。

なぜうまくいかなかったのか?

専任の人がいれば、改善にフォーカスでき流と思いましたが、自分の未熟さはもちろんあり、結局改善はひとりの問題ではなかったことにきずきました。
実際、ScrumやXPについて改めて勉強して、一つ重要視される価値観は「コードの共同所有」というものがあります。
今回の場合に当てはまると、プロダクトはチーム全員のもので、ひとりが頑張って改善するところで、できることは限られているし、他のメンバーが意識しないうちに、簡単にその改善を覆すことができます。きちんと全員(ほとんどの人)に改善の価値を理解してもらわないといけないです。
もう一つの問題として、仕組み化してませんでした。ひとりの作業は属人的で、ひとりがやめるとすぐなくなるし、仕組みしない限り、スケールできませんでした。

まとめ

色々体験して、弊社のクレドはやはり正しかった、これからもスクラムの中で、それらを意識して、改善していきたいと思います。

  • 価値あることを、正しくやろう
  • できる理由から始めよう
  • 逆算→突破→展開→仕組み化
  • 巻き込み、巻き込まれよう