Upgrade to Pro — share decks privately, control downloads, hide ads and more …

冴えない開発環境の育てかた

 冴えない開発環境の育てかた

#CODT2021 (7/14~) でお話してきました。
https://event.cloudopsdays.com/codt2021/talks/10

athagi

July 14, 2021
Tweet

More Decks by athagi

Other Decks in Technology

Transcript

  1. 運用しているソフトウエア • GitLab (ソースコード管理) • Jenkins (CI) • Harbor (Container

    registry) • Nexus repository (リポジトリ管理) • LDAP (ユーザ管理) • 複数の自作ツール 4
  2. 元々の状態 • サーバ管理上の課題 ◦ OS は Ubuntu を利用していたが、更新がされておらず2020年の時点で EOLを迎えたバージョンを利用 ◦

    EC2 インスタンスを利用していたが、x4系(2015年- )のインスタンスを利用 ◦ クラウドインスタンスと物理サーバが混在 ◦ 運用しているソフトウエアの定期的な更新はされておらず、塩漬け ◦ 定期的なバックアップはなし ◦ 複数のサーバがSPOFの状態になっている 5
  3. 元々の状態 • 組織での課題 ◦ ドキュメント等はなく、サーバにあるものが全て ◦ コンソールから立ち上げているため再現性なし ◦ 管理の境界が曖昧 ◦

    社内の多くの人から利用されているにも関わらず、これらのサーバ等の運 用が片手間に行われており、関心が薄い ◦ CI パイプラインも属人化している 6
  4. 経緯(成長期) • サーバの管理とサービスの提供をミッションとしたチームが存在 • SaaS 製品を利用するより、(額面上はメリットのある) 自前運用を選択 • チームに十分な人がいて、チューニングやメンテが行われていた •

    外部からの要求に答えるだけのパワーがある状態(コードに修正を入れたり、自 作ツールを導入) • 落ちない開発環境という外部からの期待 10 チーム 期待 要求 要求 要求
  5. 経緯(衰退期) • チームからナレッジが失われる ◦ チームから人は抜けるが補充はされず ◦ なぜその仕組みが入っているのかわからなくなってしまう ▪ 不要になった判断ができず、消せない •

    動けば良いというアドホックなFix によるその場しのぎ ◦ コードの管理者が不在 ◦ 困った人がその場しのぎで修正 ◦ デッドコードが多い自作スクリプト 14
  6. 経緯(衰退期) • 運用上の問題 ◦ 外部から要求を持ってきた人は蒸発(ツールの導入だけされてメンテナ不 在の状態に) ◦ Day2(運用) 以前が評価されるため、Day2 に目が向かない

    (一見解決し ているように見えるが新たな問題を生み出している) ◦ 野心があり、自前で運用していたチームも運用しきれなくなる。一方で、利 用者も多くいたため、削除出来ずにチームに運用業務が回ってくる 15
  7. 当時を考古学してみる • デメリット ◦ 横断して開発環境を管理していたが、要求を受け付けるだけで、要求する 側に対して、あるべき状態を提示できていなかった ◦ Day1 まで手伝ってくれるが Day2

    について考えていなかったか、運用まで 手伝ってくれる人がいなかった ◦ 組織が存続するために成果や宣伝が必要で断ることができなかった 18
  8. 複雑さの計測 • トレーニング時間 ◦ ドキュメントが貧弱だったり欠けていると参画者 が戦力になるのに時間がかかる • 説明の時間 ◦ 全体像を説明するのにかかる時間

    • 管理の多様性 • デプロイされている構成の多様性 • 年代 ◦ 何もしないとシステムは腐る ◦ 利用者の実装に依存するようになる(ハイラムの法則 ) 23
  9. レガシーシステムから離れる過程 • 回避 ◦ 問題に正面から取り組まない ◦ 実質的に技術的な負債を受け入れる • カプセル化/拡張 ◦

    レガシーシステムをラップ ◦ 徐々に置き換える準備のための一時的な手段 • 置き換え/リファクタリング ◦ 外部とコミュニケーション・ドキュメンテーションが必要で高コスト ◦ 現状の振舞いから逸脱しないようにする必要がある • 退役/監護義務 ◦ 移行しなかったチームにレガシーシステムを渡す 24
  10. どこから変えていったか • 現状の把握(予想した経緯と現状の差分) • 業務の継続性の回復(ドキュメント化、IaC化、属人性の排除) • 認知負荷の削減 ◦ 今は利用されていない(価値が出ていない)設定やコードの排除 ◦

    ソフトウエアの更新 • デファクト・スタンダードに寄せる • セルフサービスでパイプラインを作成できるようにした ◦ 自分たちもパイプラインを容易に作成できるようになった • 「葬り」を行う ◦ 問題の量を減らす ◦ 新しく何かを作ることはしない 25
  11. 変えようとしたときのハードル • 数年の更新差分を含むので deprecated が abolished になっていて壊れる ◦ 中央集権的な状態であったのが逆に幸いして一括で対応できた(数年更新をサボっ たつけが回ってきた)

    • 周りのチームへの説明 ◦ 将来的にフローを変更するにあたって味方を増やすために早め・多めの連 絡を取るようにして透明性を確保した 28
  12. Collabolation から X-as-a-Service へ • Collabolation モードでチーム間の役割・責任は共有する。境界は曖昧になる一 方で迅速な問題解決と組織の学習が手に入る • XaaS

    モードで別チームから提供されるサービスを利用する。責任や境界が明確 な場合、利用者は迅速にサービスの利用を開始できる。一方でプロダクトマネジ メントが不可欠 35 Skelton, Matthew; Pais, Manuel. Team Topologies
  13. Collabolation から X-as-a-Service へ [若い組織(成長途上の組織)] → [ 理想的な組織] → [年老いた組織/腐った組織]

    • 継続的に振り返りを行いながら、自分たちのチームは価値を提供できているか を確認していく • チームが持っているタスクのうち、定型(自動化できる)タスクや葬ることが可能 なタスクの評価を継続的に行う 37 Skelton, Matthew; Pais, Manuel. Team Topologies ?