宮水の日記

宮水の日記

主に書評や資格取得について記事を書いています。

「アジャイルサムライ達人開発者への道」を読みました。

今回は、「アジャイルサムライ達人開発者への道」を読みました。

なぜ読んだのか
  • EMにおすすめされたので!
  • スクラムの元となるアジャイルの考え方について楽しく学びたかったから。
対象読者
  • どんな人でも
  • エンジニア初級者にとっては、プロジェクトを進めるにあたって持っておきたい心構えを非常に多く学ぶことができると思います。
  • エンジニア中級者・上級者にとっては、初心に返るのにとてもいいと思います。
この本で学べること
  • アジャイルプロジェクトの準備とキックオフをうまくやる方法。プロジェクトの意義や目的をはっきりさせ、誰のために何をするのか明確にする。
  • 要求を集めて、見積もり、計画を立てる方法。それもわかりやすく、風通しよく、誠実なやり方で。
  • ものすごい勢いで成果を上げていくための手法。プロジェクトを手入れの行き届いた機械のようにして、質の高いリリース可能なコードを生み出し続けられるようになるためにはどうすればいいか。

序章

アジャイル」はフレームワークであり、心構えであり、ソフトウェアを無駄なく、早く届ける手法であるとのこと。

第1部 「アジャイル」入門

第1部では、アジャイルなソフトウェア開発の全体像と、アジャイルチームがどう機能するかを説明します。

第1章 ざっくりわかるアジャイル開発
  • お客さんにとって「価値ある成果」とは何か

それは「毎週動くソフトウェアを届ける」こと

  • 毎週価値ある成果を届けるために大切なこと

①大きな問題は小さくする
 毎週成果を届けられるように。
②本当に大事なことに集中して、それ以外のことは忘れる。
 ドキュメントや実施計画書はあくまでも動くソフトウェアを補完するものでしかない。
③ちゃんと動くソフトウェアを届ける
 そのために、こまめにテストする
④定期的にお客さんからフィードバックを求める。
 間違っていたら軌道修正するために。
⑤必要とあらば進路を変える。
 プロジェクトではいろんなことが起こるので、計画を柔軟に変更する。
⑥成果責任を果たす
 彼らの資金の使い道を示すことができたら、成果責任を果たしたことになる。

  • プロジェクトの3つの真実

1. プロジェクト開始時点に全ての要求を集めることはできない
2. 集めたところで、要求は必ずと言っていいほど変わる
3. やるべきことはいつだって与えられた時間と資金よりも多い

第2章 アジャイルチームのご紹介

第2章は、「アジャイルなチームとはどんなチームか」についてです。

アジャイルチームは肩書きも役割も関係なく、分析、設計、実装、テストといった開発工程が途切れることなく続くということは良く知られていると思います。
でもそれ以上に、"責任"という言葉がたくさん出てきました。プロジェクトを他人事とせず、自分のこととして、責任を持って成果を出していける人。改善案を出していける人。そんな人がアジャイルなチームには必要なんですね。

第2部

第2部は、便利なツールやフレームワークの紹介です。

第3章 みんなをバスに乗せる

プロジェクトが失敗する理由は、主にみんなのゴールやビジョンがあってないから。
それを合わせるために、インセプションデッキというものを使用する。

第4章 全体像を捉える

さらにビジョンを明確にしていくために、エレベータピッチやパッケージデザイン、やらないことリストなどを作っていきます。コラムにあった、「エンジニアが実際の現場に行ってその地域にあった車を作った」といういい話も印象的でした。

第5章 具現化させる

3章と4章で「なぜここにいるのか」ビジョンのすり合わせができたので、5章では「どうやって実現させるか」をみていきます。

  • リスクと向き合う

実現させるにあたって、まずはじめにやることは、「リスクとの向き合い方」です。
チーム内でリスクについて認識合わせを行い、予め手を打っておくことです。

  • 荒ぶる四天王(時間、予算、品質、スコープ)との向き合い方

どれも最優先にはできないので、スコープを諦めてもらう場合があること、優先順位が同じになるものを作らないこと。
スコープ設定や計画に何ヶ月も時間をかける必要はないことなどが書かれていました。

第3部

アジャイルな計画づくりの基礎を扱います。ユーザーストーリー、見積もり、それから現実に合わせて変えられる計画の立て方を解説します。

第6章 ユーザーストーリーを集める

6章は、ユーザーストーリーについてでした。

  • 文章よりface-to-face

- ユーザーストーリーはお客さんにわかりやすいように
データベースにコネクションプールを導入する→現状の10秒かかるページの読み込み速度を2秒まで縮める

  • 制約をつける

ウェブサイトはサクサク表示する→サイトのページはどれも2秒以内に読み込めること

第7章 見積もり:あてずっぽうの奥義

7章は見積もりについてでした。

  • 見積もりで欲しい答えは一つ

このプロジェクトをやり遂げられるのか?

  • 仕事のサイズがどれくらいの大きさなのか

基準より大きいか小さいか「相対サイズで見積もる」のがアジャイル見積もりと計画作りの真髄。

  • プランニングポーカー

> 1人の専門家より、複数の素人の平均の方が正しい(!)という研究結果もある。

やり方:
1 顧客がストーリーを読み上げる
2 開発チームが見積もる
3 開発チームで議論を重ねる
4 再び開発チームが見積もる

第8章 アジャイルな計画づくり:現実と向き合う

8章は、現実と向き合う方法です。

  • 時間が足りないときは

いつまでも最初の計画に執着しない。やることを減らすのがアジャイルチーム。

  • マスターストーリーリスト

プロジェクトでこなすべきToDoリストのこと

  • リリースを定義する

チーム内でリリースの定義を決めておく

第4部

プロジェクト運営。立てた計画を、お客様が実際に使えるソフトウェアとして具現化するための作戦を学ぶ。

第9章 イテレーションの運営:実現させる
  • テストは開発と一緒

 プロジェクトの最後にならないと全体として動作するかわからない状況に甘んじない

  • ユーザーストーリーの詳細は、必要な分だけを、必要なときに分析する
  • カンバン

 プロジェクトの進行状態を"誰でも"把握できるツール。

  • ”価値のあるプロジェクト”

 分析、開発、テストといった作業を一つにまとめあげてこそ。

第10章 アジャイルな意思疎通の作戦
  • ストーリー計画ミーティング

 これから取り組むストーリーの準備が整っているか、顧客と一緒にストーリーの準備が整っているか確かめる。開発チームが見積もりの数値を確認したりするのもこのタイミング。

 開発チームと顧客が一緒になって次回のイテレーションの作業を計画する。ベロシティを確認し、次に取り組むストーリーを整理する。

 昨日やったこと、今日やること、困っていることを毎日チームに共有する。10分くらいに収めるのがコツ。

  • 建設的にフィードバックするコツは"だけど" と言う言葉を避けること。
第11章 現場の状況を目に見えるようにする
  • 状況を見えるようにしておくには

 ストーリーボード、リリースボード、ベロシティとバーンダウンチャート、インセプションデッキなどがあればOK

  • 共通の言語

 プロジェクトで使う言葉を共有する。開発チームも顧客もわかる言葉を使う。
「エリック・エヴァンスのドメイン駆動設計」を読むこと。

第5部 アジャイルなプログラミング

第12章 ユニットテスト:動くことがわかる
  • ユニットテストがあれば、プロダクトに変更を加えても期待どおりであることを確認することができる。
  • 変更を加えるたびに手動でシステム全体のリグレッションテストを実行する手間が省ける。
第13章 リファクタリング:技術的負債の返済
  • 技術的負債は気づいたら背負っている。そうなる前にこまめにリファクタリングする習慣をつけておく。
第14章 テスト駆動開発

 ルール1:失敗するテストを一つ書くまでは新しいコードを一切書かない。
 ルール2:「危なっかしいところ」を全てテストする

  • 既に実装されたコードがあると考えながら、先にテストを書くと良い。
第15章 継続的インテグレーション:リリースに備える
  • ビルド時間は10分以内に留めるのが望ましい。
  • ビルドを大切にすること。ソフトウェアはいつも動くようにしておこう。
  • リリースに備えるとは、心構えのこと。今日書いたコードは今日テストしてリポジトリに統合する。バグがあれば即座に直す。「あとで直す」と先送りにしてはダメ。

感想

ずっと読んでみたかった名著、アジャイル・サムライ読み終わりました!

f:id:kattyan53:20200824200920p:plain
f:id:kattyan53:20200824203534p:plain

プロダクト開発の本質を突きながら、所々ユーモアがあって楽しく読み終わることができました。いやー... 2年前に読みたかったです。
先日「アジャイルな見積もりと計画づくり」という本を読んだのですが、それよりももっと"概念"というか、抽象的なアジャイルのお話でした。

エンジニアになったばかりの人は必ず読んでおいた方がいい本だと思います。

「もっと細かいことわからないと見積もりできないよ!」
「時間がないからリファクタリングは後にしよう」
「テストも後にしよう...」
「CIってなに?よくわからないけど、動いてるからヨシ」
「え!?そんな機能あるなら早くいってよ!」
「このコード、どっから変更したらいいんだ...」

全部私が今までの開発で通ってきた失敗でした... orz
もし、私が2年前にこの本を読んで多少なりともアジャイルの考え方を理解していたなら、もう少し良いアプローチ方法や問題への対処法を考えらえたはずです。

それにしても、アジャイルな考え方って素敵ですよね。この世の仕事って、なかなかアジャイルな考え方で進められる内容の仕事って少ないと思います。
これからどんな新しい機能ができて、どんなコードにしておけばいいかなんて誰にもわからない。
そんなこれから起こる未来にできるだけ対処していくための先人たちの知恵って、めちゃくちゃかっこいいですね。

色々書いてありましたが、一番大切なことは「顧客にとって本当に価値のあるプロダクトを安定して届ける」ということですね。
いろんな事情があると、だんだんと忘れがちになってきますが、このマインド(User Firstな気持ち)を忘れずにこれからも開発に取り組んでいきたいと思います。