アジャイル 書籍

アジャイルソフトウェア開発宣言の読み解き方|アジャイル開発の本質

アジャイル宣言(アジャイルマニフェスト) アジャイル
この記事は約16分で読めます。

「アジャイル」における唯一の定義とも言われているアジャイルソフトウェア開発宣言を読み解きます。こちらはアジャイルを実践する方の共通のマインドセットとなります。

日本語版と英語版を引用しながら丁寧に綴ります。

アジャイル宣言(アジャイルマニフェスト)はいつから

この宣言は2001年に、よりよい開発方法を模索していた「軽量プロセス方法論者」と呼ばれていた17名の有識者が集まって作成し、署名した共通項となる価値観です。この価値観が『アジャイル』と名付けられました。XP(エクストリーム・プログラミング)やScrum(スクラム)の提唱者等のそうそうたるメンバーにて作られており、本宣言による価値観と別記事として後述するアジャイル宣言の背後にある原則にて成り立っています。そして、「共通項となる価値観」と記載している通りに、それぞれの有識者がよりよいと考えている方法論は大規模向けの開発を含めてたくさんあります。その中で最大公約数的な共通項を見つけたら、結果としてこの価値観の原則が残ったということです。原則の価値観だけではアジャイル開発を実践することができませんので、この原則を大事にしつつ、様々な方法論をその都度プロジェクトの特性に合わせて適用していくことになります。

「アジャイルソフトウェア開発宣言」はアジャイル開発を始めるにあたって、一番最初に読んで理解したいものです。しかしながら、アジャイル開発をしているという意識を持っている人の中でも読んだことがない人、誤った理解をされている人、読んだけどもう忘れた人、などのケースが見受けられます。この本質的なところでつまずかないように、丁寧に読み解いていきたいと思います。きっと、読んだことがある人には振り返りになります。

本宣言を読み解くにあたって特に大事なポイントが3つあります。

  1. よりよい開発方法を見つけだそうとしている
  2. 左記のことがらに価値がある
  3. 右記のことがらにより価値をおく

よりよい開発方法を見つけだそうとしている

アジャイルソフトウェア開発宣言より引用

We are uncovering better ways of developing

software by doing it and helping others do it.

Manifesto for Agile Software Development

プロジェクトにおいて「これをやったら絶対うまくいく」という銀の弾はありません。「よりよいものを見つけだそうとしている」、というところから「アジャイル開発」というものは進化し続けなければならないことが分かります。

VUCA時代と言われている通りに、常に社会、ビジネス、システム、人々を取り巻く環境は変わり続けているため、前例にただ習うのではなく、よりよくカイゼンしていくことが肝要となります。

例えば、下記のようなことが「意識、判断、行動」として現場で起きてはいませんでしょうか。

  • 前回のプロジェクトでうまくいったから同じようにやる
  • 隣りのチームでうまくいっているから真似をする
  • 前例に沿えば問題ない
  • みんなやってるからこうしている
  • なぜか分からないが今までやってきたからやっている
  • よくないやり方だと感じているが特にアクションを起こさずに続けている
  • 正しくないやり方に対して、正しくない、ということに気づいていない

これらはよりよい開発方法を見つけだそうとしていないため、「アジャイル」ではないということになります。二つとして同じプロジェクトは存在しません。よく検討した結果として同じやり方をする、というのは問題ありません。むしろ、そういったものをどんどん取り入れていったほうが効率的です。大事なのはその都度ゼロベースで検討し、本当にそのやり方がそのプロジェクトに適しているかを見極めて、必要があればカスタマイズして適用することです。そして、適用して終わりではなく、その効果を振り返り、良ければ継続し、カイゼン点があれば調整し、うまくいかなければ止めるという判断を、適切なタイミングでするといったサイクルを反復的に実施することが大事になります。何も考えずに真似して試すのが「アジャイル」ではないのです。

ここでご参考としてPMBOKによる「プロジェクト」の定義を引用します。

プロジェクトとは、独自の製品、サービス、所産を創造するために実施される有期性の業務である。

PMBOKより引用

上記の「独自」「創造」の文言から他に同じものがなく新しいもの(唯一のもの)、「有期性」の文言から期限があるものが「プロジェクト」であることが分かります。逆に、同じことをするのであれば、それはプロジェクトではありません。唯一のものに対して、過去の前例と全く同じやり方がそのまま当てはまることはありません。だからこそ、プロジェクトは難しいと言えます。その、難しいプロジェクトに立ち向かう手段のひとつとして「アジャイル」はとても有効な価値観、マインドであると私は捉えています。

左記のことがらに価値がある

アジャイルソフトウェア開発宣言より引用

we value the items on the left more.

Manifesto for Agile Software Development

「プロセスやツール」、「包括的なドキュメント」、「契約交渉」、「計画に従うこと」に価値があると書かれています。つまり、これらも当然のように必要なもの、価値があるものとと捉えられているということです。軽く考えて良いものではありません。

たまに、「アジャイルはドキュメントを作らなくていい」「アジャイルは計画を立てない」と言う人がいますが大きな間違いです。もちろん、価値を生まないドキュメント(報告のためだけの資料、誰も見ない資料、メンテされずに使われない資料、納品のためだけの資料、等)は作る必要はありませんし、無駄な計画に時間をかけて立てること(結局立てた計画が役に立たない)も必要はありません。また、テスト駆動開発(TDD)を導入し、テストコードを書くことでテスト仕様書作成(およびテストの打鍵)を省略すること等はどんどん進めるべきです。ただ、本当に必要なドキュメントは従来の開発と同様に必要です。例えば、外部システムとの連携が必要な場合は正確なIF(インタフェース)定義書を作りますし、複数画面の開発であれば画面遷移図(サイトマップ)を作ります。外部の人、チームメンバー内、今後新たにプロジェクトに参加される人たちとのコミュニケーションに必要なドキュメントは作る必要があります。経験上、ここは特に誤解の多いポイントです。

また、日進月歩で技術は飛躍的に進化しています。その技術からの価値を享受するために、様々な「プロセスやツール」をウォッチし、必要に応じて取り入れていくことは欠かせないものと捉えています。それを怠ってしまうと世界からどんどん取り残されてしまいます。

右記のことがらにより価値をおく

アジャイルソフトウェア開発宣言より引用

That is, while there is value in the items on the right,

Manifesto for Agile Software Development

この文が端的に「アジャイル」を表しています。

「個人と対話」、「動くソフトウェア」、「顧客との協調」、「変化への対応」により価値をおく、とあります。この言葉をよくご覧ください。何も特別なことがかかれていないことに気づきます。つまり、「アジャイル」は私たちにとって、何も特別ではないのです。

アジャイル宣言のイメージはいかがですか?

さらっと読んだことがありましたが、すこし誤解していたかも。。

この先の記事も読んでみますね!

アジャイル宣言:個人と対話(日本語、英語)

プロセスやツールよりも個人と対話を、

アジャイルソフトウェア開発宣言

Individuals and interactions over processes and tools

Manifesto for Agile Software Development

コミュニケーションの手段としてFace to Faceの対話が最上位であることは疑いようがありません。

今はメールやチャットツール、SNSなどの便利なツールがたくさんあります。それはどんどん活用して構わないのですが(むしろ活用すべきです)、しっかりと認識、目線を合わせるためには対話がどうしても大切になります。

これをおざなりにしてしまうと「認識齟齬」というリスクがどんどん溜まっていきます。例えば、メールを使って部下に重要な指示を出す上司がいるとします。それで部下が動かなかった場合にその部下を叱るケースがありますが、これは上司が仕事をしていない、と捉えています。

メールというコミュニケーション手段は基本的に相手がいつ読むか分からない、読んだとして理解するのか分からない、理解した上で行動するかどうか分からない心許ないものです。よって、メールを送信した時点では正式に仕事の依頼をした、という状態にはなく、ボールは自分が持ったままです。メールの返信があればよいですが、そうではない場合は口頭(対話)や電話等の他のコミュニケーションを使う必要があります。

もっと言いますと、口頭(対話)や電話等の双方向のコミュニケーションをした上で、補足として、エビデンスとして、他の関係者への周知としてメールを使う、という意識の方が良いです。仕事で使用することも多くなっているLINE等のSNSやSlack等のチャットツールも同様です。メッセージを送信して「既読」になったとしても、それを開いたというだけで本当に読んでいるのか、誤解なく理解しているのか分かりません。

仕事は依頼して、相手からの返事があって初めて渡せた、という状態になります。一方で、各種のツールはコミュニケーションのコストが小さいというとても大きなメリットがありますので、ツールの特性を理解して適切に使い分けをしたいものです。

また、書籍によっては「個人との対話を」の部分を「人と人との交流を」を訳しています。私はこちらの方が好きです。優れたプロセスやツールを使う普通の人々より、普通のプロセスやツールを使う優れた人々の方が良い結果を出します。

従来型の開発ではよいプロセスやよいツールを使うことで、誰がやっても一定の品質のものが開発できるようにしたがります。しかし、それでうまくいっているでしょうか。

アジャイルのプロセスは一人ひとりが異なる強みと弱みを持つことを認め、その多様性を活かします。誰でも同じ仕事ができるようにするプロセスと対照的です。

結局は「ひと」なのです。

アジャイル宣言:動くソフトウェア(日本語、英語)

包括的なドキュメントよりも動くソフトウェアを、

アジャイルソフトウェア開発宣言

Working software over comprehensive documentation

Manifesto for Agile Software Development

最終的にユーザーに届けられて価値を産むのは動くソフトウェアであり、ドキュメントでも社内報告でもありません。

通常、ユーザーとしては目の前で使うソフトウェアに対して価値を感じて対価としてお金を払うのであり、どのような過程でそれらが作られたのか、裏で何が動いているかを意識しません。何のために仕事を、プロジェクトをしているかを考えれば、動くソフトウェアを開発するための時間が最も大切であるかがお分かりいただけるはずです。

また、どんなに綺麗な進捗報告資料を作って説明をしたとしても、動くソフトウェアより進捗(事実)を正しく伝えることはできないのです。「問題ない」「オンスケ」「できている」という報告を真に受けて、蓋を開けてみたら「全然できていなかった」ということを経験をされたことはありませんか。

アジャイルではドキュメントの代わりに「動くソフトウェア」を定期的に見せます。少なくとも顧客に対して見せ、可能であればユーザーにも見せることで、より質の高いフィードバックを受けます。

そのフィードバックを次に開発するソフトウェアに反映していくことで、ユーザーに価値を提供し、期待に応えることができます。

この「価値の積み上げ」が何よりも進捗を正しく表しています。

アジャイル宣言:顧客との強調(日本語、英語)

契約交渉よりも顧客との協調を、

アジャイルソフトウェア開発宣言

Customer collaboration over contract negotiation

Manifesto for Agile Software Development

顧客(発注者)とシステム開発者(受注者)の間が契約とドキュメントで大きな隔たりが起きているケースがとても多くあります。

しかしながら、プロジェクトの目的は共通であるはずです。契約やドキュメント(スコープの定義)が明確にあるため、その範囲内を満たすことだけに注力しがちで、そうすると、そのプロジェクトで成し遂げたかったことがおざなりになり、システムを開発することが目的化してしまって結果的にうまくいきません。

顧客とシステム開発者が協調し、プロジェクトの目的に真っ直ぐ進みたいものです。お互いのコミュニケーションが希薄になってしまうと、自分達に不利になることを隠すようになり、あとで表面化して大問題になります。こうなってしまうと互いに疑心暗鬼となり信頼関係も崩壊します。

これではプロジェクトの成功は叶いませんし、誰も幸せになりません。人生の中で多くの時間を割くことになる仕事というものを、誰もが良いものとしたいはずです。

「協調」という言葉をより具体的に深掘りすると、「チーム」になるということです。

開発者と顧客が共通の目的を持つチームになることで、ユーザーに対してより大きな価値を届けることができるようになります。両者のゴールは同じはずです。

アジャイルチームにおける「開発者」は手を動かしてソフトウェア開発に取り組む人のことを指します。システムエンジニアもプログラマーもデザイナーも役割ではなく開発者となります。もちろん、自己組織化したチームとしては多様なスキルが必要ですが、責任は全て個人ではなくチームが持ちます。

よって、下記のようにチームが起点となるように、意識と行動様式を変える必要があります。

◯:チームの一員として、プログラミングをします。
◯:チームの一員として、デザインをします。
×:プログラマーとして、チームに貢献します。
×:デザイナーとして、チームに貢献します。

例えば、開発するにあたって「ユーザーリサーチ(ニーズの検証)」が最重要課題になっているとしたら、それをUXデザイナーだけに任せるのではなく、プログラマーも担って良いのです。

アジャイル宣言:変化への対応(日本語、英語)

計画に従うことよりも変化への対応を、

アジャイルソフトウェア開発宣言

Responding to change over following a plan

Manifesto for Agile Software Development

社会もビジネスも常に動いていますので、システム開発当初にロンチ(リリース)時の姿を正確に予測し、それを前提に完璧な要求・要件定義をすることはとても難しいです。

それにも関わらず、当初に結んだ契約の内容、立てた計画通りに開発をしないと納品・検収にいたらないため、無駄だと分かっていてもやらざるを得ないという現状があります。

ウォーターフォールという真っ直ぐに水が流れる開発手法と言っても、往々にして仕様変更が発生するため、完全なウォーターフォールにはなりません。もともと最初に完璧な計画を立てるということに無理があるため必然とも言えます。

それは、計画時には想定できなかったという内側の論理と、ニーズの変化や競合他社の動向などの外側の論理の両方があります。「アジャイル」では変化するということを前向きに受け入れ(むしろチャンスと捉える)、それを前提として変化する社会やビジネスに合わせて、システム開発を柔軟に適応させることがより大事であるという価値観となっています。

もちろん、いつでも「やるべきことはやれることより多い」ため、やるべきことに対して優先順位をつけて新たに追加して作業するものが増えた場合には、結果的に優先順位の低いものをやらないということになります。

人と時間とコストは有限なのです。これを誤解して「アジャイルだからいつでも仕様変更できる」と解釈してしまうと、やれるスコープをオーバーしてデスマーチ真っしぐらとなります。

また、「変化への対応を」の部分を「変化に適応することを」と訳す場合もあります。

こちらの方が変化に追随するイメージが伝わりやすいかと思います。

上記の文を読み「計画を軽視しているのではないか」と誤解されるケースがありますので補足いたいます。

アジャイルも必ず計画を立てます。プロジェクト開始当初は情報が少ないため、その情報で可能な範囲で計画を立てます。全体的には曖昧で、直近は具体的でしょう。

その後、開発を進めることで、環境が変化したりし、新たなユーザーのニーズが分かったり、優先順位が高いと思われたものが実はあまり重要ではないということが分かったりします。そのような学習した気づき、現実に合わせて再計画します。それを定期的にするのです。それを「アジャイルな計画づくり」と言います。

アジャイルでは、ある時点のスナップショットである「計画」より、常に「計画をつくっていく」ことを重視します。「計画をつくっていく」ことこそが「変化への適応」となります。

「計画」とは数多ある未来の可能性のうちの、ひとつの見解でしかありません。

まとめ

ここまで読んでいただきありがとうございます。いかがでしたでしょうか。

アジャイルソフトウェア開発宣言は平易な文章で書かれているため、さっと読んで分かった気になります。しかしながら、もうお分かりの通りに意外と奥が深いものとなっています。原文は英語となっており、日本語を含む各国の言葉で翻訳されております。翻訳の過程でどうしてもニュアンスが異なってしまいますので、興味がある方は、ぜひ英語の原文を読んでみてください。もしかすると、違う気づきが得られるかもしれません。

もしよろしければ、いつものチームメンバーでそれぞれアジャイルソフトウェア開発宣言を読み、その後集まって、この宣言をどのように解釈し、それを今の開発現場にどう生かすことができるのかをディスカッションしてみてはいかがでしょうか。

ともすると、「アジャイルをする(Do Agile)」「アジャイルになる(Be Agile)」という言葉は、システム開発に限らず、あらゆる業務に適用できるのでは、と思います。

なんとなくで構いませんので「アジャイルって良いものかも」と思っていただけましたら嬉しいです。

あとがき

みなさん、◯◯◯よりも◯◯◯に価値を置く、という表現が日本語の文章として特殊だと思いませんか。

ウォーターフォール開発に代表される従来の開発手法を否定していません。ウォーターフォール対アジャイル、従来開発対新しい開発、というわけではないのです。これまで最重要とされてきた価値観は大事であると認めています。その上で新たな価値観を取り入れていきたいという趣旨です。

新しいことを始めようとすると、それに反発する抵抗勢力が生まれます。逆に言いますと、反発されないものは従来の価値観で理解できるものであるため、新しくはないということです。

反対意見に耳を傾けることでより洗練されていくというメリットはありますが、あまりに反発が強いと前に進まなくなります。そのため、新しいことを始める時には反対意見を持つ方にも寄り添い、理解を示し、敵ではないというスタンスを持ち、協力者になっていただくことを目指す振る舞いが必要です。

何かを変えたいときは「優しさ」が必須です。

内心ではすべてアジャイルにすればいい、と思っていたとしてもそれを前面に全面に出してしまうと前に進むことができません。「アジャイル信者になってはいけない」という言葉はこういったところから生まれていると考えています。

最後に、アジャイルソフトウェア開発宣言を引用するための条件として以下の記載があります。

© 2001, 上記の著者たち
この宣言は、この注意書きも含めた形で全文を含めることを条件に
自由にコピーしてよい。

アジャイルソフトウェア開発宣言

これはどういうことかと言いますと、一部分だけ切り出して引用されると誤解を招くからです。

例えば、「包括的なドキュメントより動くソフトウェアを」の部分だけがひとり歩きすると、「ドキュメントは作らなくていい。コーディングさえすればいいんだ。」という最悪の解釈がなされてしまう恐れから、上記の引用条件になったのかと思います。

※アジャイルソフトウェア開発宣言は英文が「Manifesto for Agile Software Development」であることから、「アジャイルマニフェスト」とも呼ばれます。

アジャイル (Agile)の原点(トヨタ生産方式)は日本ですが、アジャイル 開発が方法論として確立され、拡大したのは米国発信であるため、アジャイル に関する情報(Webサイト、書籍、SNS等)の圧倒的な量は英語となります。そして、グローバルで多様性の時代は国籍や人種に関係なくONE-Teamになることが当たり前になってきます。

英語、英会話も避けて通らなくなってきたかもしれません。。

アジャイル宣言の短い文章に対して、長い解説をしてくれましたね!

私も勉強中だが伝えたいことが多くなりまして・・・

また新たな学びがあったらリファクタリングします。

さて、次は原則(アジャイル宣言の背後にある原則(前半)|本質を読み解く)に進んでいただけますと幸いです。

アジャイル宣言の背後にある原則(前半)|本質を読み解く
アジャイルソフトウェア開発宣言の価値観とセットになっているアジャイル宣言の背後にある原則(12個の原則)を読み解きます。こちらはアジャイルを実践する方(ならびにステークホルダー)に対する共通の行動指針となります。アジャイル宣言(アジ...
アジャイル宣言の背後にある原則(後半)|本質を読み解く
アジャイルソフトウェア開発宣言の価値観とセットになっているアジャイル宣言の背後にある原則(12個の原則)を読み解きます。こちらは後半の7個の原則について読み解きます。※「アジャイル宣言の背後にある原則(前半)|本質を読み解く」の続...