無料ブログはココログ

One fact in one placeとチケット駆動開発 - Software Processes are Software, Too -

プロセスプログラミングを提唱したオスターワイル(Leon J. Osterweil)氏のことば

  “Software Processes are Software, Too”
 (ソフトウェアプロセスもソフトウェアである)

をヒントに、開発とマネージメントの共通点として、今回は「One fact in one place」と「チケット駆動開発」を考えてみます。開発者からマネージメントをするようになった方には経験を生かした管理を、管理をされている方には技術的な裏付けを知る機会になれば幸いです。

One fact in one place

データベースの正規化で使われる言葉です。ほかのデータから算出できる推移従属のデータを除いて、データを1か所に限定することです。同じデータは1か所にしかないので、常に一貫性のあるデータ集合を求められるようにします。他のテーブルと関連付ける場合もデータベースの機能を使えば、矛盾の生じない構造を実現しつつ多くの情報を管理することができます。

チケット駆動開発

チケットで障害やタスクを管理するRedmineTracなどを用いて、情報共有しつつ開発を進めていく方法です。これらのツールはITS(Issue Tracking System) あるいじはチケットシステムと呼ばれ、チケットを介して議論やステータスの管理ができます。プロジェクトの様々な情報をこのチケットに紐づけて管理すれば、最新の状況をチーム内で共有できます。

チケット駆動開発をうまく実践するには、チケットで情報を一元管理することです。ITS本来の使い方である障害や課題だけでなくタスクもチケットで管理し、バージョン管理ツールやWikiの情報もチケットと関連付けます。こうすることでプロジェクトの様々な情報をチケットと紐づけて管理できます。

何らかの理由で表計算ツールなど他の形式にする場合も、チケットから生成すれば情報の一貫性が保てます。とはいっても情報の粒度や目的などで自動生成できない時もあるでしょう。そのような場合も一から作成するのでなく、チケットの情報を確認しながら作成する、関連するチケット番号を記載するなどで、情報間の矛盾を減らし、正確で詳しい資料を作ることができるでしょう。

このような考え方はチケット駆動開発だけではありません。開発ドキュメントは工程間で抜け漏れなくトレースできないといけませんし、お客様への説明も一貫性がないといけません。アジャイル開発のストーリーカードとタスクカードの関係も同じでしょう。チケットシステムを利用しなくても、情報を小さな単位で整理して矛盾が生じないようにしましょう。

この記事はSRAアドベントカレンダーでも公開しています。

マルチスレッド処理と進捗管理・配員・作業分割/割り当て- Software Processes are Software, Too -

プロセスプログラミングを提唱したオスターワイル(Leon J. Osterweil)氏のことば

 “Software Processes are Software, Too
 (ソフトウェアプロセスもソフトウェアである)

をヒントに、開発とマネージメントの共通点として、今回は「カプセル化」と「組織パターン」を考えてみます。開発者からマネージメントをするようになった方には経験を生かした管理を、管理をされている方には技術的な裏付けを知る機会になれば幸いです

マルチスレッド処理

複雑な問題を短時間で処理する方法の一つです。複数のスレッドを用いて並列処理すれば効率的です。シングルスレッドの処理をマルチスレッドで処理する場合、以下のような順になるでしょう。

  1. 並列処理の準備
  2. スレッド開始処理
  3. スレッドの主処理
  4. スレッド終了処理
  5. 並列処理の後処理

これらはマルチスレッドを考慮して設計します。うまく設計できればスレッド数に応じて効率化されますが、うまく設計できないで主処理以外のオーバーヘッドが多い場合はスレッドが増えても効率化できません。特にすべてのスレッドの完了を待つ場合は最も遅い処理に全体が引きずられるでしょう。

進捗管理・配員・作業分割/割り当て

並列処理の簡単な例は進捗管理です。リーダーが各メンバーから順にヒアリングするには多くの時間が必要ですが、メンバーそれぞれが進捗を報告すれば短時間で終わるでしょう。しかし、各メンバーがバラバラな形式で好きなタイミングで報告するなら、内容の把握や確認でかえって時間がかかるかもしれません。手分けする準備として情報共有の仕組みを用意しておけば、メンバーの処理が標準化でき、その管理や集約も容易になるでしょう。

配員の場合はさらに工夫が必要です。進捗や成果物の共有環境を用意するのはもちろんのこと、メンバーが独立に同程度の品質を保てるようにします。具体的には横展開できるように先行して部分開発してサンプルを用意します。サンプルは成果物だけでなく、部分開発を踏まえたルールや手順などを用意して、サンプルをたたき台に作業を横展開できるようにします。

作業の分割にも工夫が必要です。作業量を平準化しやすいように時間のかかる作業は細かな作業に分割します。また、マイルストーンに合わせないといけない作業とそれ以外を分けておき、予定通りに進まないときに作業の空きがないように工夫します。

作業の割り当てにも工夫が必要です。作業者の得意な作業を割り当てれば一見、効率的ですが、作業には偏りがあるので、作業量がバラツキが出て手が空いてしまったり、誰かが体調を壊すとプロジェクト全体が止まってしまうことになります。このようなことを防ぐには、教育的な視点で作業を割り当てたり、処理の実装とテストで担当者を分ける、ペア/モブプログラミング(作業)などを長期的な視点で取り入れると良いでしょう。

この記事はSRAアドベントカレンダーでも公開しています。

 

カプセル化と組織パターン - Software Processes are Software, Too -

プロセスプログラミングを提唱したオスターワイル(Leon J. Osterweil)氏のことば

 “Software Processes are Software, Too”
 (ソフトウェアプロセスもソフトウェアである)

をヒントに、開発とマネージメントの共通点として、今回は「カプセル化」と「組織パターン」を考えてみます。開発者からマネージメントをするようになった方には経験を生かした管理を、管理をされている方には技術的な裏付けを知る機会になれば幸いです

カプセル化

カプセル化(リンク先はwikipedia)は情報隠蔽の手法で、オブジェクト指向にも取り入れられています。カプセル化することで外部には必要な情報のみが公開され、内部のデータや処理は守られます。オブジェクト指向において、外部からはメソッドを介してのみ情報を得ることができます。

オブジェクト間で連携するには、呼び出しとデータストア共有の2つの方法があります。呼び出しは責務を果たしてくれるオブジェクトのインタフェースを定めてその参照を知って知っていることで、オブジェクトに対して定められた方法で呼び出すことで、オブジェクト間で連携できます。データストア共有ではデータベースのようなデータストアを介する方法です。データ構造をあらかじめ決めておいて、オブジェクト間でデータの参照や更新を行います。

組織パターン

組織パターンは,開発チームをどう編成すればいいのかをパターンとして整理したものです。組織パターンはアジャイル開発のひとつであるスクラム開発にも取り入れられていて、プロダクトオーナーとスクラムマスターは、それぞれ門番、防火壁に相当します。チームへのインタフェースを限定し、外部からチームを守ります。チームをカプセル化するわけです。アジャイル開発に限らず、チームを外部から守り、必要な情報を提供できれば、チームは外部のストレスを受けないで開発に集中できます。また依頼すべき役割を担うチームを知り、適切な方法でアクセスすることでチーム間の連携ができます。

データストアによる情報共有はその方法によってメリット・デメリットがあります。

  • タスクカード:壁やホワイトボードに張り出すことでチームの状況を見える化します。無意識に目に入るので常にゴールを共有できます。その反面、色分けなどで工夫しないと管理や検索が難しいので電子化されることも増えています。
  • チケット:RedmineやGitHUBなどのチケット(イシュー)を使ってタスクを管理します。優先順序などそのままでは扱いにくいので、タスクカード風のUIをもつJIRAやプラグインが使われることもあります。
  • 資料:チーム内で資料を共有します。いつでも再確認ができる反面、資料の質がコミュニケーションの質になります。
  • ミーティング:もっともアナログな情報共有です。音声による情報共有はニュアンスなど情報量鵜が多いので、チケットや資料などの共有と併せて実施されます。人数や時間によって工数がかかります。

システム開発と同じように、どのようにチーム間あるいはチーム内で連携するかで、成否が決まります。ウォータフォールや味あるなど既存のプロセスを利用するとある程度の品質は得られますが、そのプロセスのメリット・デメリットを把握していないと効率的な開発は行えないでしょう。

この記事はSRAアドベントカレンダーでも公開しています。

[#TiDD] ポケモンGOにチケット駆動開発のポイントを学ぶ

ポケモンGOにリサーチというタスク駆動の要素が加わりました。ポケモンGOには飽きが来ていましたが、また楽しめる様になりました。リサーチの効果を考えると、チケット駆動開発に繋がるポイントがあると思いますので、まとめてみました。

リサーチには日々こなしていくフィールドリサーチと、タスクフォース的なスペシャルリサーチがあります。このうちフィールドリサーチがチケット駆動開発に似ています。

適度な粒度

タスクは適切な規模になる様に分割しましょう。

(ポケモンGOでは)

ポケモンGOは博士に頼まれて、図鑑の完成に向けてポケモンを捕まえるゲームです。図鑑を揃えるには、ポケストップでもらえたりショップで買えるアイテムを使ってポケモンを捕まえたり、タマゴを孵化します。

ショップでアイテムを買うにはポケコインが必要で、リアルなお金で購入するかジムで敵チームのポケモンを倒し維持します。ジムで戦ったり、維持するにはポケモンを鍛える必要があるので、ポケモンを捕まえて博士に送ってアメにしたり、相棒ポケモンにしてアメを増やして進化や強化します。

図鑑を完成させるには、このように色々な努力が必要で、ゴールがなかなか見えてきませんし、プレイしていてもゴールに近づいている実感はなかなか得られませんでした。リサーチは短期的なゴールをプレイヤーに示して、不安を感じずにプレイを進めることができます。

(実際の開発では)

ゴールはチームで共有しないといけません。また、そのゴールに至る節目としてマイルストーンが示されて、全体のロードマップや進捗を確認できなければいけません。

タスクはマイルストーンを達成するために必要な作業をチケットに分割したものです。タスクを全て実行するとマイルストーンやゴールに達成できないといけません。また、個人が短期的に努力できるほど(半日〜数日程度)に小さくなければいけません。

やらされ感が少ない

やらされ感が少ないとモチベーションを高く保つことができます。

(ポケモンGOでは)

前述の様にゴールに向けて様々なタスクを実施する必要があります。しかし、達成感を得られるのは新しいポケモンをゲットしたときやレアポケモンを進化させた時ぐらいでした。

リサーチを達成するとリワードというご褒美がもらえます。ボールや木の実などポケストップで得られるアイテムが中心ですが、ちょっとしたご褒美でも達成感が得られて嬉しいものです。

難しいリサーチほど良いリワードがもらえます。やりたくないリサーチは捨てることができますので、納得できるリサーチを実施して希望するリワードを得ることができます。

(実際の開発では)

開発中に評価されると嬉しいものです。タスクをたくさんこなしている人や難しいタスクをこなした人は打ち合わせの際などで賞賛しましょう。

また、こつこつと実践している人にも息抜きが必要です。定期的に何か嬉しいことがあると楽しく仕事ができます。おやつタイムや飲み会、お食事会などメンバーに合わせて考えてください。

大切なのは納得感です。押し付けられたと感じさせない様にみんなで議論し、自ら進んでコミットメントすることが理想です。しかし、そうも言えない場合も多いので、「しょうがないなぁ」と納得できるほどに情報共有し、ちょっとした息抜きや賞賛の場を作ることが、やる気を保ってくれるでしょう。

教育的であること

能力の高い技術者が不足しているのは、教育が考慮されていないことが一因です。新しいことに挑戦してもらうことで、成長を促しましょう。

(ポケモンGOでは)

リサーチには様々な種類があります。何でも良いから10匹捕まえる。特定の種類を捕まえる。ポケストップを回す。進化させる。強化する。ナイスボールなど小さな的にあてる。カーブボールを投げる。カーブボールでナイスボールなどを投げる。さらに連続で投げる。などです。

これらは、一通りの遊び方を理解させる効果があるほか、今後必要になる技術を徐々に学ばせます。ポケモンの種類を知ることはバトルに役立ちますし、カーブボールはスペシャルリサーチを達成する際に必須の技術です。

フィールドリサーチは選択できますので、自分の技量に合わせて徐々に高度なリサーチに挑戦できます。

(実際の開発では)

単純に効率だけを考えると、技術力の高いエンジニアに作業が集中してしまいます。しかし、その作業の中には、時間がかかるものの他の人でもできることがあるでしょう。

もし今後も増える作業なら、早めにできる人を増やすことが合理的です。その分だけ、できる人が別の作業をできるからです。

無理矢理に作業指示するのではなく、背景を説明して少しずつ成長してもらいましょう。その成長が技術者の喜びであり、チームの成長に繋がる様に。

おわりに

ゲーミフィケーションという言葉がありますが、ゲームの要素を取り込むまでもなく、ポケモンGOには学ぶべき所が色々あります。特に今回取り上げたリサーチは、チケット駆動開発の参考になる点がたくさんあります。

仕事は楽しくしたいもの。楽しければモチベーションが上がりますし、生産性も高くなります。

ご褒美に慣れると、ご褒美が無いとやる気を失う危険もあります。チームの状況に応じて、色々と工夫してください。

このエントリーをはてなブックマークに追加


[#TiDD] プロジェクトを成功させるチケット管理

QuaSTom高品質ソフトウェア技術交流会 2017年度第2回例会で講演させていただきました。

Redmineの勉強会ではないので初心者の方が多いかと思いきや、9割の方がチケットシステムを使われていて、そのうちTracが24%、Mantisが8%、残りがRedmineを使われていました。

幹事の松谷さんに用意していただいたグループディスカッションも、みなさんのお悩みや経験で盛り上がりました。やはり、メンバーにきちんと理解してもらえないとうまくいかないようです。

同じような議論は、90年代後半以降のプロセス改善ブームの頃にもありました。みなさんの意見をうかがっていると、やはり「ツールの導入はプロセス改善である」という思いが強くなりました。

ディスカッションへのコメントで「ゴールはプロジェクトの成功」とお話ししたことや、講演のおまけでお話しした「サーバントリーダーシップ」もリーダーシップの議論をされているとのことで喜んでいただけました。

久しぶりに大いに刺激を受けることができました。ありがとうございました。

おまけ

講演の仲であまり詳しく説明しなかったチケット駆動開発のレフトウィングとライトウィングのお話は、以下の発表が元になっています。

[#redmineT] 裾野が広がるRedmine「チケット駆動開発導入のヒント - 自律と規律 -」

(今回はお話ししませんでしたが、改善にはフィードバックやタイミングも重要だと思っています)

この発表の際にも使わせていただいた乗松さんの資料(PDF)の23ページ「SPIモードの遷移」は認証の罠を標準化の罠に読み替えるとツール導入にも同じような問題が起きると思いますので、参考にしてください。

このエントリーをはてなブックマークに追加


Redmineが得意なプロジェクト

Redmineの機能を考えると、どのようなプロジェクトに向いているかがわかります。

プロダクトライン

Redmineのチケットは全てのプロジェクトで通番になっています。他のプロジェクトのチケットを容易に参照できますので、プロダクトラインの開発時の様に過去のプロジェクトの参照が必要な場合に有利です。
参考:『Redmine実践ガイド』に書き忘れた事 - 管理を容易にするチケット番号の一意性 -

System of Systems あるいは トップダウンに分解できる

Redmineのプロジェクトとチケットは、それぞれの親子関係を持つ事ができます。 System of Systems と呼ばれるような、複数のプロジェクトから構成されるシステムも小さな単位に分割して管理できます。
参考:[#TiDD] チケットによる情報の関連付け(チートシート)

多様なコミュニケーションが必要な大規模システム

Redmineには他のITSにもあるWikiのほか、フォーラムやニュースなどの情報共有の仕組みがあります。また、ガントチャートによる可視化やREST APIなどシステム連携機能もあります。大規模システムにも対応できる多様な機能が標準で用意されています。(大規模な開発が多いので参考にある様に「説明会を開くべし」と言う意見が多いのでしょうね)
参考:[#redmine] Remineを活かしたプロセス支援 - 失敗しないプロセス支援 - #rxtstudy

作者のJPL(Redmine.jpブログ)は、このような開発をしているのかも知れませんね。

ちなみに上記に当てはまらない、一度限りのプロジェクト、単独システムあるいは構成が変わり易いシステム、チケットで十分あるいは小規模な場合は、Redmineにこだわらなくて良いプロジェクトと言えるでしょう。

なお、Redmineの特徴を説明しましたが、ITSの導入には知見者あるいは導入意欲を持った人の存在が必要になります。また、過去の資産をどうするかということも、ITSを選択する際の重要なポイントの一つでしょう。

このエントリーをはてなブックマークに追加


[#UAS] Ultimate Agile Stories の寄稿5本を一挙公開!

Ultimate Agile Stories (UAS)は全5册からなるアジャイル同人誌です。

この本は、アジャイルのコミュニティの人達の熱い思いを綴った記事をまとめたものです。頒布による利益は、東北の震災の年から5年間寄付されてきました(まだ在庫があるので、寄付したぐらいの赤字だそうです)。

私もアジャイル関係のコミュニティに出入りしていましたし、日本XPユーザー会関西支部(XPJUG関西)でチケット駆動開発の分科会があったことなどから、全ての本に寄稿させていただきました。

これまで、次の本が出る度に1年前の寄稿を公開してきました。しかし昨年、とうとう最終号になってしまいましたので、これまでの寄稿をまとめて公開します。

UASには、アジャイル放談という飲みながらそれぞれの思いを熱く語り合った記事があります。そろそろ若い人に任せた方が良いのではないか、などと思いながら、なぜか全てに参加させていただきました。

この他にも有名な方々の記事がたくさん載っていますので、機会を見つけてぜひ購入してください(トップのリンク参照)。



UAS5の寄稿

<UAS5の紹介>
[#UAS] アジャイル開発とフィードバックそしてリスク - Ultimate Agile Stories Iteration 5 -



UAS4の寄稿



UAS3の寄稿

<UAS3の紹介>
[#Agile] 自己組織化あるいは自律的組織 #UAS3



UAS2の寄稿

<UAS2関連記事>
[#TiDD]ウォータースクラムフォールよりも五月雨WFの方が変化に強い!(かも)



UAS1の寄稿

このエントリーをはてなブックマークに追加


[#TiDD] パタンランゲージで経験を活かしたプロセスを構築する

プロセスが好きだと言うと若い人は怪訝そうに見られる。品質保証の人からは「SEPG(標準プロセスを制定するグループ)とかですか?」と聞かれる。アジャイルな人達は「プロセスやツールよりも個人と対話を」と言われる。

そんなことは無いはずです。一般に「プロセスはタスクの集合」と定義されるからです。つまり、ソフトウェア開発をしている人は皆、プロセスを実行しているからです。

モデリングの失敗

このようにプロセスが他人事の様に語られるのは、プロセスのモデリングに失敗しているからです。「ソフトウェアプロセスもソフトウェアである」と言われていますが、これまでのプロセスのモデルはプロセス特徴を表現できなかったからです。

そもそもプロセスモデリングは、プロセスの知識を伝達、理解、改善、管理、 支援、自動化するものです(参考:[#TiDD]失敗しないチケット駆動開発 - プロセスモデリングの視点から+告知 -)。しかし、ウォーターフォール(WF)の標準プロセスやスクラムは、メタなプロセスと汎用的なプラクティスを示したもので、過去の具体的な経験を伝え、そのノウハウをソフトウェア開発として活かす仕組みは、肥大化し易い標準プロセスによる管理や開発チームの習熟に依存しています。

例えばユーザデモ

たとえば「段取り8分」といわれるように段取りは重要ですが、例えばユーザデモをどのように調整するかといった基本的な事もうまく支援できません。

【標準プロセス】
仮に標準プロセスに実施方法を書いたなら、「うちはこのやり方です」と顧客に言ったり、何らかの事情でテーラリングしたくても制約を受けてしまう事があるでしょう。
逆に詳しく定義しなかった場合は、それぞれのプロジェクトでWBSなり線表に落としますが、どのような条件があってその計画にしたかがわかりません。このため、前回は顧客が用意してくれたので、デモ用のデータや会場の準備を忘れるかもしれません。
経験の少ないマネージャーなら、マイルストーンの設定だけで必要なタスクが漏れているかも知れません。

【スクラム】
スクラムではタスクの依存関係や期限をうまく管理しないいけませんが、タイムボックスからあふれて間に合わないなんてことが起きるかも知れません。
ベテラン揃いなら色々な工夫や調整を行うのでしょうが、それはプロセスで支援されるのではなく、開発に関わる人達の習熟に任されています。勉強会やコーチが必要な訳です。

どんなモデルなら支援できるか

これらのプロセスモデルをソフトウェアの概念に当てはめてみると、クラスや機能であって、段取りに必要な関連や状態概念が不足している様です。

【クラス指向】
WFの標準プロセスは抽象クラスの責務でモデル化されています。WBSに代表される様に細かな構造に分解してプロセスを定義します。インスタンスに相当する内容は自由だが責務だけは果たす様に求められています。CMMを提唱したハンフリー氏らはプロセスのスキップが最も大きな問題と考えていて、抜け漏れチェックが重視されています。ただし、このモデルに基づいてもインスタンス化する際に考慮が必要な内容は直接は支援されず、組織内で定義し、訓練によって実現しないといけません。

【機能指向】
スクラムのロールモデルは機能で分割され、ロール間やロール相互のコミュニケーションに必要なアーキテクチャ、具体的には外部との連絡、コンセンサスの共有、などの仕組みを持ちます。実現する順序はバックログで管理されますが、バックログの調整はオブジェクトである人に依存しています

このように プロマネ、リーダ、プロダクトオーナは苦労しています。それは具体的なプロセスで考えないといけない段取り、つまり状態があまり支援されていないからです。

【状態指向】
実際にプロジェクトを実施する際には、具体的な開発対象の状態が考慮されます。具体的には、いつまでに何を作るかを考えてそれに至る道筋を考えています。これがいわゆる段取りです。上記2つのモデルでは具体的な開発対象を直接扱いませんので支援が行えないのです。そこで開発対象の状態を考慮したプロセスが必要になります。

パタンランゲージ

そこでパタンランゲージです。開発の計画を立てる際は、ゴールや制約に合わせて、過去の経験した作業を当てはめ、必要に応じて作業を組み立て直します。まさにマネージャがしてる事です。

パタンランゲージを利用する際は、この工程をパタンランゲージとプロジェクトランゲージ2段階で行います。関係者からのインタビューで良いと思ったものをパタンランゲージとして整理し、制約を考慮して組み合わせてプロジェクトを段階的に構成していきます。

パタンランゲージはどのような問題(フォース)をどのように解決するかを集めた、いわゆるパターンの集合です。誤解を恐れずに言うと、そのドメインに特化したDDDのユビキタス言語に相当するものだと思います。

プロジェクトランゲージでは パタンランゲージを構造化・洗練したものを表の縦軸に、プロジェクト横軸に取った表を作成します。実施する交点につける印が多くなる様に、制約を考慮してプロジェクトの実施順序を決めます。ちょうどユーザーストーリーマッピングを左に回転させたようなイメージです。

(参考:本橋、中埜、羽生田、懸田、江渡、パタンランゲージからプロジェクトランゲージへ共創のプロセス(PDF),AsianPLoP 2011)

パタンランゲージで経験を活かしたプロセスを構築する

ここで先ほどのユーザデモを考えてみましょう。ユーザデモはパタンの一つですので、パタンランゲージに加えられるでしょう。

それだったら従来のプロセスでユーザデモを追加したのとあまり変わらないのではないかと思われるでしょう。実はこの時点で他のパタンと同列に並んでいる所が後で効いてきます。

プロジェクトランゲージを作成する際はセンターと呼ぶ概念や対象物を明確にします。ユーザデモがより重視されるならレビュー作業を中心的なものにするかも知れませんし、逆にユーザデモをキーマンに対してだけ実施するかも知れません。

従来だとユーザデモのような作業は足し算でしかなく、標準プロセスや元のフレームワークを変更する事はできません。パタンランゲージは関係者で協議して方向性を決める(センタリング)しますので、バランスの良いプロセスを再構築できるのです。

どこから始めるか

パタンランゲージのやり方は、小規模プロジェクトでよくやっている事です。示された制約と使えそうな経験を思い浮かべ、依存関係のあるまとまりでその実施順序を決めていきます。

ソフトウェア開発の規模が小さくなると実施できる事が限られます。関係者で議論する事でバランスの良いプロセスを構築して、顧客の要望に応えていたのです。

経験を集めてパタンランゲージを構築する方法は、チケット駆動開発で作成した過去の履歴を分類して活用できると考えています。

まずはチケットにどのような経験が蓄積されているかを調べ、その結果を次回のSEA関西&RxTstudyの勉強会で紹介するつもりです。

まとめ

具体的な計画をする際に現れる制約をモデル化せずにクラスを作ったり、枠組みを作っても上手くいきません。その状態で頑張れば頑張るほど、大事な事が個人に閉じてしまいます。

今回紹介したパタンランゲージのアイデアは、過去の経験を元にプロセスを構築する方法です。チケットをうまく利用する事で、プロジェクトに適したプロセスを構築できると思います。

【告知】
すでに募集している次回のRxTstudyの講演内容を変更し、上記のような考え方とチケットの関係を説明するつもりです。ぜひ、ご参加ください。

第65回 SEA関西プロセス分科会&RxTStudy #15 「チケット管理システムによるプロセス支援と今後の課題」 (07月30日) https://rxtstudy.doorkeeper.jp/events/44608

このエントリーをはてなブックマークに追加

WFかアジャイルではなく、将来のソフトウェア開発を考えてみた

未だにネットワークの世界では、アジャイル開発だとかウォーターフォール(WF)開発だとか騒がれていますが、プロセスはそんな単純なものではありません。

それぞれに得意分野があり、現在の多くのプロジェクトに効果的な選択ができるでしょう。 それぞれでどんな工夫をしているかはとても参考になりますが、どちらで成功しているから他方はだめだとか、どちらで自分が不幸なのかを語っても他の分野では役立ちません。

そこで、ソフトウェア開発の流れを考えて、未来の予想をしてみます。今の現場にとってふさわしいプロセスは、将来のソフトウェア開発にふさわしいとは限りません。でも、将来に向けて今から検討しておけば、いつか役に立つと思います。

厳格なウォーターフォール(WF)開発

そもそものWFは、大規模なソフトウェアを開発する方法として生まれました。大規模なソフトウェアでは全体が混乱したり、仕様変更により肥大化しがちで、予定の期日や予算で完成しなかったからです。

そこで、計画を重視して進捗を見える化しました。工程という考え方を導入して分割統治が図られ、各工程でのドキュメントを中心とした成果物や、信頼性を中心とした品質のメトリクスを管理する事で下流工程での混乱を防ごうとしました。

批判対象になっているWFはこのようなプロセスだと思いますが、巨大な一つのシステムを開発する際には一定の成果をあげてきました。

アジャイル開発の登場

20世紀末になるころには、計算機の性能向上、ネットワーク機能、オブジェクト指向を中心としたソフトウェア開発技術の向上によって、短期間、多機能、広い意味の分散処理、多様なシステムが実現可能になりました。

開発の環境や対象が変わるに伴い、従来の様に一度に大きなものを作る事が避けられる様になりました([#TiDD] 最近のソフトウェアを考えるとアジャイルに向かう)。

ボトムアップに実装を積み上げていくアジャイル開発は、リスクを低減する方法として、自社開発企業やユーザビリティを重視する一般ユーザ向けソフトウェア開発に利用されました。

現実的なWF開発

アジャイル開発が生まれる遥か前から、厳格なWF開発が実施不可能な現場では、最適化が行われました。具体的には、工程の完了の前に次工程を開始する、仕様変更の管理を柔軟にする、プロトタイピングによりリスクを低減する、段階リリースする、などです。

このように現実に最適化された開発は、スコープを可変にするアジャイル開発になかなか移行できません。特に決められた期限までに最低限必要な「一式」の機能を実現しないといけない業務システムではその傾向があると思います。

現実的なWF開発では仕様変更に柔軟に対応するほか、請負開発ですので請負側が瑕疵担保責任を持つ事で、発注側のリスクを減らすことができます。決められた期間に必要な「一式」の機能を実装するには有利な方法です。

その反面、納期が迫ってからの仕様変更には残業や増員による対応が必要で、開発者の負担は大きくなります。批判は当然ですが、このような開発が少なくなる事はあっても、発注側にメリットがある間は無くなりはしないでしょう。

近未来の小規模ソフトウェア開発

近未来の小規模ソフトウェア開発は、以下を想定しています。

  • 生産性が高く、高機能なソフトウェアを少ない工数で開発できる
  • 少人数でチームが構成され、開発期間も短い
  • 高度に自動化され、短時間でデプロイできる

生産性が極端に高くなると継続的にバージョンアップする環境に追随する事が難しくなり、アルゴリズムを「どのように実現するか」と考える時間よりも、最新の環境で「実現できるか」を確認する時間の方が長くなります。

リスクが高くなると請負では高価になりすぎるので、顧客にとって準委任契約の方が安価に望みのソフトウェアを得られる可能性が高くなります。準委任契約だと発注側と受注側で契約範囲の議論は少なくなり、要望を満たせる良いソフトウェアについて前向きな議論が容易になるでしょう。

その一方で準委任契約だったとしても、従来のプロセスと前提が異なるので見直しが必要になります。

近未来の大規模ソフトウェア開発

一方でこれまで規模や予算の関係で実現できなかった大規模開発も行われる様になります。クラウドで支援されたアーキテクチャを利用して、システムのスケーラビリティや分割統治が実現できる様になります。

しかし、それは管理的視点での分割ではなく、技術的視点、つまりアーキテクチャー中心の分割になります。アーキテクチャ設計が先行して行われますので、実装プロセスはともかく、プロセス全体では段階的(WF型)になります。

このような開発の特徴は「一式」の機能を一度に揃える事です。しかし、実装時のリスクはドンドン高まりますので、ある程度は実装を優先した開発になってくるでしょう。

近未来はスクラムが難しくなる

準委任開発が増えるならアジャイル開発、今ならスクラムの導入が増えそうなものですが、アジャイル開発の「考え方」と「やり方」は利用するもののアジャイル開発とは似て非なるものになると思います。

私もNode-REDの開発をして近未来感を感じていますが、新規性の高い開発ではアジャイル、特にスクラムはうまくいかないと感じています。具体的には以下のような理由です。

変更を早く反映したい:アジャイル開発では開発者が集中を維持するために、イテレーションやスプリントと呼ばれる繰り返し開発のタイムボックス中の仕様変更から守られています。しかし、技術的な問題は関連する作業の継続を難しくしますし、短期間・少人数の開発では問題は即座に解決する必要があります。

ロールモデルよりも関係者の協調が必要になる:少人数での開発では小さな問題が全体に影響します。ロールを分けて開発メンバーを守るよりも、お互いに協力して知恵をだしあうことが求められます。また、そもそもロールを兼務するようでは組織パターンを利用している意味はあまりありません。

増員も時には必要:チームビルディグは重要ですが、期限の限られた仕事では増員が必要な事や、フェーズによって減員が必要な事もあります。そこでチーム単独でなく、同じ分野のチーム間で人をプールしたり、情報共有する仕組みが必要になります。

近未来のソフトウェア開発の難しさ

近未来のソフトウェア開発を考えると、厳格なWFもアジャイル開発も厳しいものがあります。開発者に負担にはなりますが、現実的なWFが今あるなかでは柔軟にさえ思えます。

そもそもWFは肥大化しない様に外側から束縛し、アジャイルは骨組みを作って肉付けをチームビルディングに任せている事から、現実の問題にプロセスで対応することを直接支援していません。

小規模開発は工数増加による被害も小さいので、これまであまり注目されてきませんでした。しかし、近未来には実装の単位がドンドン小さくなり、品質を維持しながら現実の問題を解決できる実施方法が必要となるでしょう。
(参考:クリティカルチェーンの定義から小規模プロジェクトの難しさを考える

近未来のソフトウェアプロセス

建築の世界では大規模で無機質な開発の後に、無秩序な小規模開発が増えて、魅力的な街づくりが難しくなりました。そこでパターンランゲージが注目され、関係者が集まって現実の問題回避に必要な具体的な解決パターンを導き出し、それらと実際の制約を元に現実的なプロジェクトランゲージを構成し、魅力的な街づくりをする方法がとられています。

ソフトウェア開発もこれまでの様に良いプラクティスを全てやるのではなく、関係者で現実をふりかえり、品質を維持するための制約、チームビルディング、開発対象の実現方法、リーズナブルな運用の方法をパターン化し、より良いプロセスを構築することで、現実問題を解決できるプロセスが構築できると思います([#TiDD] パタンランゲージで経験を活かしたプロセスを構築する)。

そして、その具体的な情報の収集源としてチケットが有効だと思います。

【告知】
すでに募集している次回のRxTstudyの講演内容を変更し、上記のような考え方とチケットの関係を説明するつもりです。ぜひ、ご参加ください。

第65回 SEA関西プロセス分科会&RxTStudy #15
チケット管理システムによるプロセス支援と今後の課題」 (07月30日)

このエントリーをはてなブックマークに追加


[#TiDD] ビジョンとコミットメントがチケット駆動開発を成功させる

Redmineを導入すれば問題は解決するのでしょうか?それだけではうまくいきません。では、チケット駆動開発を導入すれば良いのでしょうか?それだけでもうまくいきません。ビジョンとコミットメントがチケット駆動開発を成功させるのです!

うまくいく場合もある

いやいや、Redmineを入れるだけ、チケット駆動開発を導入するだけでうまくいく場合もあるでしょう。それは現状の問題が共通認識になっていて、ツール以外の問題やタスク管理以外の問題がない場合です。

たとえば、すでにアジャイル開発をしていて、拠点が分かれたのでタスクボードの代わりにRedmineを導入する場合など。あるいは、障害管理がうまくまわっている組織が新しい分野にチャレンジする場合に、気付いたことを効率よく共有できる様に補完型チケット駆動開発を導入する。といった場合です。

このように問題点が明確な場合は、チーム全体がチケットを中心にまわり、チケットで情報共有が進み、作業が効率化されます。

うなくいかない場合

反対にうまくいかない場合は以下のような状況がある様です。

  • 協力してくれない。チケットを行進してくれない。遅い
  • チケットと現状に差がある、適当。ごまかす
  • 期待した成果が出ない。勉強不足で効率が悪い

その背景には以下の問題が考えられます。

(1) 問題が共有されていない
そもそも何のためにRedmineやチケット駆動開発を導入するのか、目的がわかっていないのではないでしょうか。それがなぜ必要かもわからず、作業の負担増え、ただただやらされ感を感じさせているのではないでしょうか?

(2) 重要性が理解されていない
トレーサビリティやコミュニケーションの向上、あるいはデータ収集の効率化といった目的が共有されていても、その効果をフィードバックしていないなら徐々にいい加減になるでしょう。重要性を理解してもらうには、その効果を示す必要があります。

(3) 導入の段取りが悪い
ツールを導入する場合は新しい作業が負担にならない様に、レクチャーや指導が必要です。理解のないままに、いきなり高度な実施方法は負担が大きくなります。まずは障害管理から初めて、開発の道具になってからタスクの管理をはじめると良いでしょう。

違いはビジョンとコミットメント

コマンドコントロールにしろ、支援型のリーダーシップにしろ、新しい環境を導入する際にやらないといけないことは変わりません。それは、どのような改善がもたらされるか、ビジョンを示すことです。

状況によって、始まりは指示なのかお願いなのかわかりません。しかし、長く継続させるには、そのビジョンは理想のままではなく、結果で示さないといけません。

開発者が効果を実感できるか、明確なフィードバックがなければ、それは余分な作業が増えただけです。

フィードバックは定量的でなくても構いません。「障害対応が早くなったような気がする」「管理作業が楽になった」という感想が聞ければ、それは無駄な作業ではなくなります。前向きな協力が得られるかも知れません。

そして、何よりもコミットメントを得る事が大切です。やらされ感だけの作業は、いい加減になりがちです。

無理な導入は行わず、必要な教育を実施した上で、開発者にメリットのあるところから段階的に実施します。そして、その後も支援や適切なフィードバックを行いましょう。

まとめ

Redmineやチケット駆動開発に限らず、これまでのプロセスを変更する際にはリーダーシップが求められます。それが如何に大切なことであるかビジョンを示し、理解を得ないといけません。

それはソフトウェアを作る場合と同じです。はじめに必要な勉強をした上で、必要に応じて修正やフィードバックを行いながら、より良いプロセスを作り上げていきます。

ゴールの達成にはリーダーは余計なプライドを捨て、チームに期待して、何でもしないといけません。チームを支援することが、リーダーの仕事をセクシーにするのです。

参考:

[#TiDD]ウォーターフォール開発をアダプタブルにする(チケット駆動開発) - SQiP2015チュートリアル -

ピグマリオン効果とリーダーシップとリーダーの心理 - マンガで分かる心療内科14 -

リーダーはショットガン・アクションでボトルネックをなくせ! - マンガで分かる心療内科14 その2 -

求められるリーダー像と羊飼い型リーダーシップ - 「リーダーシップ3.0」の咀嚼 -

支援者としてのリーダー - 「リーダーシップ3.0」を読んで -

チームを守り育てる - セクシーな中間管理職 -

このエントリーをはてなブックマークに追加


より以前の記事一覧