2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
リンクをコピー
記事をブックマーク
炭田高輝氏(以下、炭田):それでは、「アジャイルで不確実性に向き合うための開発タスクの切り方」の発表をします。よろしくお願いします。
はじめに自己紹介をさせてください。BASE株式会社でネットショップ作成サービス「BASE」のエンジニアリングマネージャーをしている炭田高輝といいます。BASEには2020年に入社して、エンジニアリングマネージャーはかれこれ1年くらいやっています。
(スライドを示して)本日のアジェンダはこちらです。最初に「不確実性とは何か」について説明して、次に「受け渡し型開発の構造的な課題」も見ていきたいと思っています。最後に「ユーザーストーリーでバッチサイズを小さくする」にはどうすればいいかを見ていければと思っています。
まず「不確実性とは何か」ですが、まず定義として一般的に挙げられるのは、このようなかたちだと思っています。白黒はっきりつけられない、曖昧さ、確率が残っている状態や状況のことを指すことが多いかと思います。
なので、不確実性を減らすということは、つまり確率をどちらかに寄せる作業。白黒つけたりすることです。例えば、この実装で負荷の問題が起きるのか起きないのか、どちらなのか答えを出して結論を出すことで、曖昧さがなくなって不確実性が減ったとみなすことができると思います。
サービス開発における不確実性は、主に有名なところでいくと、目的不確実性と方法不確実性があるということです。
不確実性は実際チャンスでもあると思っていて、サービスが売れるのか売れないのかについて白黒つけることができればビジネスチャンスですし、アーキテクチャを決定できれば、そのプロダクトにとってすごく大きな前進になると思います。
不確実性は厄介なものになっていると思いますが、すべてが悪いわけではなく、むしろチャンスになり得ると自分は思っています。不確実性があるという現実は変えられないので、そこに振り回されずにコントロールしながら白黒つけていくことが重要じゃないかと思っています。
不確実性に振り回される5つのパターンを考えてきたので、ここでみなさんと一緒に見ていこうと思っています。
まずは突発パターン。突然新たな不確実性が噴き出してくるようなパターンがあると思っています。例えば「差し込みでこの対応をお願いしたい」という会話を、みなさん聞いたことがあるんじゃないかと思います。
2つ目が手戻りパターン。出した結論がちょっと間違っていて、不確実性が高い状態に逆戻りしてしまう。「あれ? これってお願いしていたものとちょっと違うんですけど」みたいな会話が出てくるんじゃないかと思います。
3つ目は大群パターン。不確実性がある事象の多さにちょっと圧倒されて、どこから手をつけていいかわからないような状態です。
4つ目は氷山の一角パターン。不確実性の大きさを正しく観測できない。例えば「思ってたよりぜんぜんやること多いじゃん」みたいな。僕も言ったことがありますが、そういう状態のことです。
最後が忘却パターン。前に不確実性を減らしたのに、その知識が失われてしまったパターンです。この5つがあるかなと思っています。
この発表では、これら5つのパターンに関して、不確実性に振り回されずにコントロールするための開発タスクの切り方を紹介していきたいと思っています。
不確実性の解釈の仕方や「自分はこう思っている」というのはみなさん思い思いに持っていると思うので、もしよければZoomのチャットに、「僕はこういうふうに不確実性を捉えています」「こういう解釈をしていたブログがおもしろかった」みたいなものがあれば共有してください。後で僕も読みますので、ぜひお願いします。
次に進みます。「受け渡し型開発の構造的な課題」について見ていこうと思っています。
受け渡し型とは何かというと、工程間で成果物やデザインができたので、次にスケジュール見積もりをお願いして、スケジュール見積もりの後、バックエンドの実装(を始める)というように、成果物を受け渡していく開発のことを、この発表では「受け渡し型の開発」と呼ぼうと思います。ウォーターフォールやシーケンシャル開発、リレー形式の開発と呼んだりもします。
この受け渡し型開発には、どうしても避けられない構造的な課題があると思っています。それは、要件定義からリリースまでの間に、一度に多くの作業を行わざるを得ないことだと思っています。
着手からリリースに至るまでの作業量が多いことを、この発表の中では「バッチサイズが大きい」と表現しようと思っています。これから、バッチサイズが大きいとどう不確実性に振り回されるのかを具体的に見ていこうと思っています。
まずは、先ほど出てきた1つ目の突発パターン。突然新たな不確実性がドンと噴き出てくるパターンです。「差し込みでこの対応をお願いしたいんですが、きりの良いタイミングないかな?」と言われた時に、受け渡し型の開発だと「うーん、ないね」となることが多いと思います。
バッチサイズが大きいと、基本的にリリース前後しか良いタイミングがないと思うので、タイミングが少ないか、そもそもないことになってしまって、無理に入れるとさらにバッチサイズが大きくなってしまいます。
手戻りパターンでは「あれ、これってお願いした機能と違うのですが」とテストで気づくことが多いと思います。判明した時点で前の工程の作業が無駄になるので、バッチサイズが大きい分、無駄になってしまう作業も大きくなってしまいます。
大群パターンを見ていくと、一度に多くの機能を実装して、最後にドンと結合テストを行うので、その結合テストや受け入れテストで多くの不具合や仕様変更のコメントがあって、一気に不確実性に襲われてしまい、「どうすれば良いかわからない」と思うこともあるかと思います。
あとは氷山の一角です。「見積もりの内容よりぜんぜんやること多い」ということがよくあると思っています。僕もこのようにしゃべったことがありますが、どうしてもバッチサイズが大きいと含まれる不確実性の大きさを見極めることが難しくて、その結果として、実体より小さく見積もってしまうことが多いと思います。
最後は、忘却パターンです。結合テストで、「あれ? これって前に話した気がするんですけど、結論はなんでしたっけ?」みたいな会話が交わされることがよくあると思っています。バッチサイズが大きいと、やはり情報が活用されるまでの期間が長くなって忘れてしまうことが多いと思っていて、最悪の場合、再び調査したりする必要があります。
実際の現場ではこれらが複合し、複雑に絡み合って出てくることが多くて、今まで見てきたパターンでは、バッチサイズの大きさゆえにこの5つのパターンが発生しやすかったり、対応しにくいことがあると僕は思っています。
どうにかしてバッチサイズを小さくできないかと考えます。そこで、ユーザーストーリーが使えるということを見ていこうと思います。
まず、受け渡し型開発のコード上の課題はバッチサイズの大きさだったので、開発タスクの切り方を工夫することで、バッチサイズを小さくすることにトライします。
バッチサイズを小さくする上で一番大切なのが、工程を分けず、すべての工程を含むように開発タスクを小さくしていくことです。
よくあるのが、バックエンドのタスクファイルを細かくしてAPIの実装・設計、データストアの設計などに分けていくパターンだと思いますが、これはバッチサイズが大きくなってしまうので避けるべきだと思っています。すべての工程を含むように、横に切らずに縦に切るイメージで開発タスクを小さくしていきます。
その時に、ユーザーストーリーを使って、最低でも受け入れテストを必ず含むように小さく分割していくのがおすすめめです。よくあるスクラムやアジャイルでいくと「その都度リリースして」みたいに言われることが多いですが、なかなか難しい場合もあるんじゃないかと思っています。
ただ、受け入れテストまでであれば、頻繁に行うことを許容できるチームが多いのではないかと思っていて。それによってユーザー目線に近いチェックを入れることができます。
(スライドを示して)ユーザーストーリーとは実際に何かというと、フォーマットでこんな感じに書くことが多くて、「ユーザーとしてアクションをしたい」「それはビジネスメリットのためだ」とシンプルに書けます。
ユーザーストーリーを使うことでどんないいことがあるかというと、結局ビジネスメリットが達成できるかどうかを受け入れテストで確認することができます。ユーザーストーリーに分割する、イコール自然なかたちで、受け入れテストまでの全工程を含むかたちに開発タスクを分割できるようになります。
ここで実際に分割するところを見ていこうと思っていますが、まずは、ToDo管理アプリケーションの簡単な例を見ていきます。
その前に比較として、受け渡し型開発の場合の話をしようと思います。よくあるのが、登録用のAPI開発、ステータス更新用のAPI開発というように細かく分けていくことだと思っていますが、残念ながら構造上、ユーザー相当の検査が行われるまでバッチサイズを小さくすることはできません。
対して、ユーザーストーリーを分けていく。まずは、最初の大きなユーザーストーリーを見ていこうと思います。「ユーザーとしてToDo管理をしたい、やる必要があるタスクを忘れずに実行し完了させたいからだ」ということで、最初のユーザーストーリーができました。
これを細かく分けていくと、登録と状態の更新と削除の3つに分けることができました。
次のスライドで、一番上の登録についてもさらに分割していきます。「ユーザーとしてタスクのタイトルを登録したい、ユーザーとしてタスクの詳細を登録したい、なぜなら……」と続いています。もちろん、ほかにもサブタスクや実施日など、いろいろなケースが浮かび上がると思いますが、このようにユーザーストーリーを保ったまま着手可能な大きさになるまで開発タスクを小さくしていくことで、バッチサイズを小さくすることができます。
バッチサイズが小さいとなにがいいのかというと、先ほどの5つのパターンに対応しやすくなります。例えば、きりの良いタイミングをユーザーストーリーごとに作ることができるし、手戻りが起きた場合でも捨てられるのは1つのユーザーストーリーだけ。あとは、少しずつ処理するので、どこかで一気に不確実性の大群が襲ってくることはまれです。
また、作業単位が小さいことで不確実性のサイズを捉えやすい。氷山の一角の氷山をできるだけ小さくするイメージです。また、期間が短いことで着手からリリースまでの忘却の発生も抑えることができます。
ということで、バッチサイズを小さくすることで、方向転換が簡単になったり無駄が少なくなったりして、リーンでアジャイルなチームに近づくことができると僕は思っていますが、そのためには工程に分けずに、受け入れテストを含むようなかたちで開発タスクを分割することがおすすめです。
とはいえ分割にも慣れが必要かなと思っているので、困った場合はぜひ近くのスクラムマスターに相談してほしいと思っています。(スライドを示して)もしくは、ここにあげているような書籍やブログが参考になるので、見てみてもらえるとうれしいです。
最後にまとめです。工程に分けて成果物を受け渡していくような開発は、どうしてもバッチサイズが大きくなってしまって、不確実性をコントロールするのが構造的に得意ではないことがわかったと思います。
そこで、全工程を含むように小さく分割することで無駄が減って、不確実性をコントロールしやすくなります。ぜひみなさま参考にしてもらえるとうれしいです。
ご清聴ありがとうございました。
(次回に続く)
関連タグ:
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略