2012年10月29日月曜日

『スクラム道 EXPO 2012 - 午前のセッション』ノート


2012/10/28に開催された『スクラム道 EXPO 2012』午前のセッションのノートです。


◆和田 卓人氏「ペアプログラミング ホントのところ」

◇質問「ペアプロすべきか?」
・答え「状況による」
 →それはずるい
 →→経験者としてそういう結論になるのはわかるが…
・ペアプロは議論を巻き起こす
・見た目も派手

◇ペアプログラミングって何?
・書籍「プログラマが知るべき97のこと」
 →「いかに周りの人とお客と仕事をするか」という中身が詰まっている
 →→プログラマは技術が優れいてるだけでは充分ではない
 →→他人との連携でより大きな成果が上げられるようでなければならない
・2人で1つのマシン、1つのキーボード
 →ドライバとナビゲータ
 →2人でコラボレーション
・いろいろなイベントではモヒカンが切りあう形になっている
 →それも面白いが…
 →チーム(ペア)でプログラミングするもの

◇ペアプロをやっている人の結論
・外国でやっている人も国内でやっている人(自分)同じような結論に至る
・やっている人とそうでない人ではイメージがだいぶ違う

◇ペアプロの利点
・規律の強化
 →1人だとサボったり、コーディング規約が億劫になったりする
 →→1人だと悪魔のささやきに負けやすい
 →→2人でコードを書いているときは天使の方が勝る
 →ペアプロ中ってtwitterやネットサーフィンをしない
 →→仕事モードになっている
 →→→仕事と休みのメリハリが付きやすい
・より良いコード
 →品質は上がっていく
 →→すぐ隣にそのコード使う人がいる
 →→フィードバックが非常に早い
 →→→それが良い効果をもたらす
 →ペアは最小のチーム
 →→シンプルさはチームが決めるもの
 →→→複雑なコードは書かなくなる
 →力技でこなす「動けばよい」みたいなコードも書かなくなる
・快活なフロー状態
 →1人と2人とでは深く集中した状態(フロー)が異なる
 →→ペアならではでのフローがある
 →→→1人のときとは異なるフローの状態に入れる
・チームの士気向上
 →ペアプロをすると部屋が無言ではなくなる
 →会話をしていくことがチームの仲の良さ
 →→情報が伝わりやすくなる
 →→→チームがよりよい方向に行く
・コードの共同所有
 →プロダクトコードに持ち主がいない状態
 →→少なくとも2人は知っている状態
 →「ある個人しか知らない」というのはない
 →→保守性が高まる
・学習効果
 →ペアプロはばらつきを一番早く吸収できる
 →→エディタ・開発環境・ネーミングなどなど
 →教える側は知識の整理などが必要
 →→教える側にも学びがある
・チームの一体化
 →チームが同じ方向に進むという方向付けがやりやすい
・割り込み削減
 →ペアプロ中の人には割り込みにくいという調査結果
・つまり…
 →教わる側は当然学べる
 →教える側は滅多なことは言えなくなる
 →→実は教える側の方が学べる

◇1人でプログラミングするのと、2人でするのとの違い
・最大の違いは"喋るか喋らないか"
 →この差は非常に大きい
 →→1人の場合、考えてコードに落として …というのをグルグル回す
 →→2人の場合、声に出すので頭の中をもう一段整理しないといけない
 →Rubber Duckingという手法もある

◇機能しないとき
・管理者はハードウェアに投資したくない
・現場がペアプロに最適化されていない
 →机の並び方など
・現場では従来型の雇用方法を採用している
 →覚悟や適正など、ペアプロに向いたプログラマーを雇っていない
・現場では反社会的な行動を大目に見る
 →コーディング規約に従わない
 →ペアプロやらなくても「プログラマはそういうものだから」で看過されてしまう
・ペア作業の生産性が理解されていない
 →「生産性が半分になるじゃないか」という管理者の意見
 →→生産性は2割増しくらいになる
 →→仕様・スキルの伝達・Better Codeなどの生産性がある
 →ペアプロにはペアプロの生産性がある
 →→なかなか理解されない
・現場では的確でない開発者を雇っている
・現場は過労と人員不足に陥っている
 →「この期に及んで二人でコードを書くなんて」
・開発者は一緒に仕事をしている人達全員を好いているわけではない
・開発者はそのような面倒なことをしたいとは思わない
・たいていのソフトウェアの現場では、優秀さのことを本当は気にかけていない

◇ペアプログラミングをエゴの問題
・角谷さんとKent Beckさんとのやりとり
 →ペアプロするとき自分のキー配列とかの好みはどうする?
 「おまえの好みとチームの成功とで大事なのはどっち?」
・ワインバーグによるエゴレスプログラミングの十戒

◇ペアプロを入れるかどうか
・結局はIt depends.
 →気に入らない人という人も一度やってみると即座に気に入る(塹壕とScrum本)
 →→(結局)8割は気に入る
 →→それでも2割には通じない

◇ペアプロは楽しい
・楽しいのが一番
 →「楽しい」はものごとを前に進めるためのプリミティブな原動力



◆吉羽 龍太郎氏「Doneの定義 虎の巻(再演)」

◇出荷可能な製品とは?
・Doneの定義
 →実施しなければいけないことの一覧
 →→プロジェクトとして定めた『出荷可能な製品』を作るため

◇(個人的には)次の単位でDoneを定義したりする
・バックログ単位
・スプリント単位
・リリース単位

◇何が出来たら完了なのかを決めるもの
・どこまでやったら終わりかが分からずにやると…
 →悲惨なことになる
 →→だからゴールを決めてからやる

◇手戻り
・本人だけできていないつもりで延々と作りこむ
 →時間の無駄が発生
 →→(ex. 誰が見るのか分からないのに、一生懸命レイアウトを整える)
・本来やっていないといけないことをやり忘れる
 →セキュリティとか考えずにとりあえず作る
 →→後でセキュリティホールが見つかったりする

◇アジャイルな進捗の判断は0 or 1
・ウォーターフォールは80%などあるが、アジャイルにはない
 →アジャイルでは、できたか、できていないか
 →アジャイルは判断が必要ということ
 →→その基準がDoneの定義
・バーンダウンチャートの数字が信用できる理由は?
 →Doneの定義に従って進めているから
 →Doneの定義がないと見せかけの進捗でごまかせてしまう

◇プロダクトバックログの受け入れ基準との違い
・受け入れ基準とは
 →どこまでできたら終わりか?を書くもの
 →→機能要件適合性の判定のためのもの

◇体験談
・悪い受け入れ基準
 →『ソースコードが綺麗なこと』
 →→あやふや
・良い受け入れ基準
 →ソースコードをCheckStyleで検証し、重要度N以上の違反がないこと
 →→全員が合意できる
・変な基準を強制される
 →品質はコンテキストに寄る
 →→金融・医療・ウェブでは異なる
 →→→社内品質基準は顧客の期待と関係ない
 →そもそもゴージャスすぎる
・守っているかどうか判断できない
・そもそも定義の中身を知らない

◇Doneの定義を守れない理由
・なぜの分析が足りない
・別の圧力に負けれる(スコープの圧力など)
・チームがオーバーコミット
・そもそもDoneの定義が曖昧

◇どうやって改善するか?
・振り返りで改善
 →プロセスが改善されることでDoneの定義が変わっていく
 →1スプリント目と10スプリント目で同じなのは逆にやばい
 →→それは、従来のウォーターフォールの書き方を変えただけ
 →プロセスは自分達で変えることができないといけない

◇Doneの定義の更新
・自明のDoneは外す
 →チームが成熟するとでてくる
 →→もっと進むと『リリースのDoneの定義』をスプリント内でやれたりする
 →→→でもやりすぎには注意

◇Doneの定義の縮小
・気をつけなければいけないこと
 →明確に守れていないものを外すのはまずい
 →→本当に顧客の期待に応えられているかを考える

◇Doneの定義充足の検証
・Doneの定義を見ればチームの技術力がわかる
 →自動化できるものは自動で
 →→より本質的なものに時間が使えるようになる

◇Doneの定義をいつ決めるか?
・見積もりや契約の前に大枠が決まっているべき
 →そうでないと工数がぜんぜん異なる
・誰が決める
 →プロダクトオーナー + スクラムマスター + チーム
 →→プロダクトオーナーは外部のステークホルダーの声も聞く
・決め方
 →必要な作業を付箋に書き出す
 →実施タイミング(Release, Sprint, etc.)でグループ分け
 →リスト化して印刷して、皆が持つ

◇荒ぶる四天王
・品質は固定パラメータ
 →スコープ達成の圧力に負けない

◇大事だと思うこと
・プロジェクト開始時点で決める
・スプリントで全部やろうとしない(最初は無理)
・チームが成熟したら拡張
・品質は固定パラメータ
・途中で縮小しない
・自動で検証
・定義をみんな知っている


◆市谷 聡啓氏「Your Mind is the Scene of Development」

◇なぜインセプションデッキ?
・プロジェクトに然るべき人が集まっているかを確認
 →いないと後で話が変わる
・プロジェクトがしかるべき方向を向いているかを確認
・「チームメンバーが誰もいないところで合意したことを前提にしているからプロジェクトがダメになる(The Agile Samurai)」

◇インセプションデッキとは
・10個の問いから構成されている

◇いつデッキを作るか?
・プロジェクトキックオフ? 最初のイテレーション?
 →それでは遅すぎる
・契約前、予算取り前
 →検討する段階で作る
 →正しい制約を作るために

◇予算が確定した後にデッキを作るにしても、プロジェクトの前提は後からは動かしにくい
・だからステルスデッキ(受注前のインセプションデッキ)
 →前提を作る
 →目的に適した制約を作り、プロジェクトを開始する

◇プロジェクト開始前・開始後で進め方が違う
・開始前(ステルスデッキ)
 →ステークホルダーにはインセプションデッキとあえて言わない
 →→相手の期待値が上がる
 →あくまで制約をあぶりだすための仕掛け
・開始後(インセプションデッキ)
 →目的を明らかにして作る
 →→プロジェクトの方向を明らかにするために

◇インセプションデッキのCRUD
・Create
 →プロジェクト開始前と後
・Read
 →最初はデッキの内容のチームへの定着を図る
 →→週一回全員で点検するなど
・Update
 →デッキの更新はプロジェクトの方向が変わるということ
 →→その認識を併せる
・Delete
 →デッキが用を成さなくなったとき

◇ゴールデンサークル
・why, how, whatの順で考える
 →インセプションデッキの前半5枚がwhy
 →後半5枚がhow
 →ユーザストーリがwhat
・howが変わる
 →インセプションデッキに影響が及んでくる
・whyが変わる
 →プロジェクトの方向が変わる
 →→ステークホルダーが認識しているかを確認
 →→→プロジェクト全体で判断し合意する

◇インセプションデッキの弱点
・whoが弱い
 →エレベータピッチの「対象顧客向け」しかない
・whyを考えるためにはwhoは必要

◇エレベータピッチ
・whoの分だけエレベータピッチを考え、作る
 →ターゲットが複数
 →→ニーズが複数ということ
・複数ニーズに対してプロダクトは1個でよいのか?
 →そういう疑問をステークホルダーと話し合う

◇やることやらないことリスト
・いきなりやらないことを出すのは難しい
・目的
 →スコープを明らかにする
 →加えて、開発への期待を明らかにするためにも使える
 →→開発の苦い経験を明らかにしてもらう
 →→ここを見誤ると、この後の開発での相手の期待がわからなくなる

◇プロジェクトコミュニティ
・誰がどういう理由でソフトウェア開発に関与するのか、気付くのは案外難しい
 →顧客には顧客組織が分かる
 →開発は開発の人しかわからない
 →→コミュニティを明らかにする必要がある
・開発のよくある役割を確認する
 →顧客に過去の開発であった役割を思い出してもらう

◇重要なこと
・練習重要
 →本番は本番の結果を出さないといけない
・質問力重要
 →良質な問いかけがプロジェクトの行く末を左右する
 →→アクションラーニングオススメ





和田 卓人様, 吉羽 龍太郎様, 市谷 聡啓様, スクラム道様、ありがとうございました。

0 件のコメント:

コメントを投稿