アーキテクチャの実践を会話によってスケールする
アーキテクチャは、中央集権的な少数の人々の頭や口からトップダウンで伝えられる独白である必要はありません。この記事では、アーキテクチャを行う別の方法を説明します。それは、分散型でエンパワーメントされた意思決定技術によって推進され、4つの学習および連携メカニズム(意思決定記録、諮問フォーラム、チーム発信の原則、およびテクノロジーレーダー)によってサポートされる、一連の会話としてのアーキテクチャです。
2021年12月15日
「従来型」のアーキテクチャアプローチが破綻するとき
正直に言うと、ソフトウェアアーキテクチャに対する「従来型」のアプローチ(つまり、コーディングではない、意思決定を行う、図を描く)は、私にとってはどんなに調子が良くても実現するのが難しいものです。しかし、継続的に自律的なチームをデリバリーしている世界でそれらを使用していると、私は繰り返し、不可能に思えるタスクに直面しました。それは、どこにでもいて、大きな状況の違いを許容し、誰の邪魔もしないことです。
私は疑問に思いました。何か代替案はないのだろうか?
ありました。私はアーキテクチャの決定を下すのをやめました。完全に。
この記事では、この代替的な考え方と、関連するツールと実践を紹介します。それにより、私は「ソフトウェアアーキテクト」の従来の役割を覆すと同時に、ソフトウェアアーキテクチャの実践を開発チーム全体に前面に押し出すことができます。さらに重要なことに、この代替アプローチの中で、すべてが混沌に陥ることなく、誰もが安全かつ効率的に必要なアーキテクチャを作成できる方法を説明します。[1]
もっと多くのアーキテクチャを「行う」方法が必要です。減らすのではなく。
ソフトウェアデリバリーにおける、チームの自律性をますます高める動きは、少なくとも私の考えでは、アーキテクチャの意思決定に対する代替アプローチと組み合わせた、より多くのアーキテクチャ的思考の必要性を高めています。
ソフトウェアチームが真の自律性を経験できるようにすることは、重要な問題を引き起こします。少人数のアーキテクトグループが、価値ストリームに沿った多数の意欲的なチームにどのように供給できるのでしょうか?なぜでしょうか?それは、この環境ではアーキテクト[2]が、これまで以上に多くの場所に同時に存在し、従来の「アーキテクチャ」をすべて行う必要があるからです。
私たちに必要なのは、チームの自律性とその結果として現れるアーキテクチャという、人間的なスケールアップの課題に取り組むための実行可能な方法です。
この記事の残りの部分では、アーキテクチャを実施し、管理する代替の方法を紹介します。それが何であるか、どのように機能するか、そしてどのように自分で採用できるかを詳細に説明します。最も重要なことは、成功するために、失敗する方法を強調します。
最も根本的な要素:「助言プロセス」による意思決定
最大限に独立させることを目指すチームを起点として考えてみましょう。明らかに、このチームはアーキテクチャの思考と意思決定に何らかの形で関与する必要がありますが、どのようにすればよいでしょうか?
これらの「多数の意思決定センター」こそ、まさに私たちが必要としているものですが、すぐに、すべての決定を下す選ばれた全能のアーキテクトグループによる、従来型のトップダウンアーキテクチャは、そのような分散型のモデルとは相反することが明らかになります。「それにもかかわらず」と、課題は提起されます。「決定は依然として下す必要がある。それこそがアーキテクチャなのだ」と。そして、これらの懐疑論者は正しいのです。
これらのアーキテクチャ上の決定は、意図的に下される必要があります。そうしないと、私たちは元の場所に戻るか、さらに悪い状態になるでしょう。したがって、この代替アプローチにおける最初の側面、事実上のその核心的な要素は、意思決定をどのように実現するかを説明する必要があります。それは「助言プロセス」と呼ばれます。
助言プロセスは、このアナーキーで分散型のアプローチの中心的な要素です。その最大の特質は、驚くほどシンプルであることです。それは1つのルールと1つの修飾子で構成されています。
ルール:誰もがアーキテクチャに関する決定を下すことができます。
修飾子:決定を下す前に、意思決定者は2つのグループに相談する必要があります。1つ目は、決定によって意味のある影響を受けるすべての人です。2つ目は、決定が行われている分野の専門知識を持つ人々です。
それだけです。それが助言プロセスの全体です。
しかし、この一見単純なことの背後には、明示する価値のある重要な概念が隠されています。意思決定者は、これらの相談された2つのグループの人々が与える助言に同意する義務はまったくありませんが、それらを求め、聞き、記録する必要があります。私たちはここでコンセンサスを探しているのではなく、幅広い意見と声を探しているのです。
このことに対してよく提起される課題は、相談しなければならない人の数です。それは妥当な懸念ですが、軽減可能な懸念です。この手法を展開する際には、意思決定の立場にある人が誰に、どの点について話すべきかを特定するのに役立つチェックリストを作成します。情報セキュリティに影響がありますか?CISOに相談してください。PIIに近づいていますか?データチームのメアリーと法務部のヴァネッサに関与してください。ユーザーオンボーディングフローへの潜在的な変更ですか?UXリードに相談してください。新しいクラウドサービスを採用しようとしていますか?クラウドアーキテクトのクリスとチャットしてください。APIの変更を考えていますか?消費者であるすべてのチームのリードと話してください。
この相談者のリストは長くなることがあります。それはそれで構いません。一部の決定は大きなものであり、助言の範囲はサイズと重要性の両方を明確に示しています。決定がより小さく行われ、その結果として多くが発生することがあります。また、影響を受ける人の数が非常に多いため、決定者は考え直すことがあります。彼らの生活を少し楽にするかもしれないこのことは、それらのすべての人に相談する努力をする価値があるのだろうか?あるいは、この大きな決定を複数の小さな決定に分割できるのだろうか?決定が進行するとき、それらは頻繁に便宜上、適切なサイズになっています。[3]
助言プロセスをさらに推し進めることはできるでしょうか?はい、できますし、そうすべきです。私は常に、それに従う人々に、自分に反対する人を特に探すよう促しています。聞くことに同意する必要がなければ、彼らは必然的により真剣に関与します。その結果、受け取る助言の深さと幅が大きくなります。決定がその結果として損なわれる傾向もありません。彼らの学習も同様です。
これにより、助言プロセスの幅広い利点という話題になります。展開されたとき、私は常に、より良く、より速く、より責任ある決定、そして最も重要なことに、決定を実行する人が理解し、所有している決定を見てきました。それは、意思決定者が責任者であると同時に、必要とする人であるからです。
副作用として、利用可能な意思決定者のプールも拡大します。彼らのそれぞれが、すぐに下す必要のある決定を探し始め、助言プロセスが与える安全なエンパワーメントの感覚を考慮して、それらを提起し、結論に導きます。決定を下す必要性がチーム自身によって満たされるという事実は、適切なレベルの行動への偏りにもつながり、必要に応じて責任がブレーキの役割を果たします。
このようにして作業することで、固定された永続的な階層と永続的なマスター意思決定者の両方の必要性を排除します。分散型意思決定は「アナーキー的」と呼ぶことを目指すものの核心的な要素であるため、助言プロセスがこのアーキテクチャアプローチの最も基本的な要素であるのは、これら2つの理由によるものです。
しかし、待ってください。私たちは一挙に「従来型」のアーキテクトの必要性をすべて排除したのでしょうか?いいえ、まったくそうではありません。しかし、私たちの役割は明らかに変化しました。この記事の次のセクションでは、このアプローチのサポート要素を紹介します。そこでは、チームと彼らが支えるビジネスを、彼らが必要とする場所に到達させるための、活性化された一連の実践とツールが見られます。
これらのサポート要素に進む前に、この分散型アプローチの残りのすべての要素が共有していること、そして核心的な要素と共通していること、つまり会話に焦点を当てていること、そして共有された理解に効率的に到達し、広める上での会話の役割を強調し、議論するために少し寄り道することは有益です。
会話の基本的な役割
イベントストーミングの考案者であるアルベルト・ブランドリーニは、「本番環境に移行されるのは開発者の仮定である」と述べ、彼の言葉は正しいです。重要なのは、リードアーキテクトの頭の中や図の中にあるものではなく、開発者がターゲットアーキテクチャについて理解していることなのです。この問題は昔からあります。エリック・エヴァンスは、「ドメイン駆動設計:ソフトウェアの核心における複雑さへの取り組み」でそれに取り組みました。そして最近、私の同僚であるエリック・ドルネンベルクは、彼のプレゼンテーション「アーキテクトのいないアーキテクチャ」でそれについて語っています。
私にとって、最も重要なのは、コードを書いている人の頭の中にあるアーキテクチャです。この分散型アプローチを採用すると、アーキテクチャ上の意思決定の実践がはるかに分散されるため、この問題は多くの点で緩和されます。
それは私が安心して眠れる要因です。
しかし、この分散型の、アナーキーなアプローチは、すべてのアーキテクチャが対処しなければならない別の問題を前面に押し出します。それは、首尾一貫した全体を提供することです。ここにおいて、私たちは代替アプローチでは不利な立場にあるように思えます。誰もが意思決定を行う権限を与えられている場合、私たち「伝統的な」アーキテクト、そしておそらく全体的な最終結果を最も気にかけている人々は、個々の決定の総和が組み合わさって首尾一貫した全体を形成することをどのように保証するのでしょうか? また、より長期的な視点をこれらの意思決定にどのように組み込むことができるでしょうか? そして、自分たちが責任を負うことに慣れていないと感じる人々をどのようにサポートできるでしょうか?
幸いなことに、この分野のもう一人の実践者であり思想家であるルース・マランは、以前にこれを見ており、彼女の記事「アーキテクトはまだ必要ですか?」でその答えを共有しています。
(アーキテクチャが成功するためには)必要な会話が必ず行われるようにすることが非常に重要です。常に会話を開始したり、焦点を絞ったり、ナビゲートを支援したりするのではなく、会話が必ず行われるようにします […] そして、必要なときにはガイダンスを提供します。
-- ルース・マラン
私たちのアドバイスプロセスを採用することで、誰でも意思決定を行うためのスペースが開かれましたが、同時に、会話、専門知識を求める責任、そして影響について考える責任が中心に置かれました。このアプローチの残りの要素は、それぞれが中核となる要素をサポートし、これらの会話ができるだけタイムリーに、焦点を絞り、効果的に行われるようにすることに特に重点を置いています。それらは4つあります。
- 思考と記録のツール
- 会話のための時間と場所;
- 統一された方向を示す光;
- 現在の技術的な状況と雰囲気を感知する手段。
これらのそれぞれについて、数秒後にお話しますが、まず2つのことを明確にする必要があります。
戦略や部門横断的な要件はどうなるのか?
このアプローチでカバーされていないことについて、少し説明しておきます。それは、技術戦略と部門横断的な要件(CFR)です。
明らかに、どちらも、意味のある規模のすべてのソフトウェア開発にとって不可欠です。
十分に周知された戦略は、分散型のチームが組織の成熟度とニーズに最も合致する技術活動を優先することで、組織の進歩に役立ちます。明らかに、最良の技術的決定は戦略をサポートするものであり、この場合、それを明確に表明することができます。
明確なテスト可能なCFRのセットは、分散型のチームが自分たちの直近のローカルなデリバリーだけを見るのではなく、共有エコシステム内で首尾一貫して機能するための最小限の要件を満たすことも保証します。
ただし、技術ガバナンスとは、これら両方を指しており、それらを包含するものではありません。これらは、ガバナンスが動作するコンテキストに貢献します。そのため、ここでは詳細には触れていません。しかし、優れた技術的決定を保証する手段を超えて、ガバナンスには何が含まれるのでしょうか?見ていきましょう。
4つのサポート要素
1. 思考と記録のツール:意思決定記録
最初のサポート要素は、アーキテクチャ決定記録(ADR)です。これらは、記述している成果物とともに、ソースコードリポジトリに頻繁に保存される軽量なドキュメントです。さて、さまざまな採用者が支持するために選んださまざまな形式がありますが、私が主張する主要な要素は次のとおりです。[4]
名前 | 説明 |
---|---|
タイトル | 固有の識別子と、決定自体(例:「ADR001 - Kubernetes PodにAKSを使用する」)が含まれます。 |
ステータス | 通常、「ドラフト」、「提案」、「採用」、「廃止」、「退役」 |
決定 | 数文で記述された決定(目立つように頻繁に太字または斜体で表示されます) |
コンテキスト | この決定を必要とした力と現在の状況 |
検討されたオプション | 検討された各オプションを、それぞれの長所と短所とともに、簡単に説明します(通常、提案/採用されたオプションがこのリストの最初にきます) |
結果 | この決定の波及効果、プラスとマイナスの両方 |
アドバイス | これは、アドバイスプロセスに従った結果の生の出力を反映しています。ここで、提供されたすべてのアドバイスが記録されます。これには、アドバイス提供者の名前とアドバイスが提供された日付が含まれている必要があります。これは頻繁にコメントの形式を取ることができ、これらがアドバイス提供者によって直接提供された場合、メタデータの記録は自動的に行われます。 |
このような軽量なADRテンプレート構造を持つことは、アーキテクチャの決定を記録する優れた方法であるだけでなく、チームがアーキテクチャの決定を行うことを学ぶのに役立つことがわかりました。これらの主要な要素は、思考チェックリストのように機能し、決定を下す人々に、何を考える必要があるか、さらに重要なことに、何について会話する必要があるかを促します。
さらに、ADRは、ADR作成者に取得したすべてのアドバイスをキャプチャして記録することを義務付けることで、アドバイスプロセスを強化するのに役立ちます。また、作成者がADRのオプションセクションで、アドバイスに従うかどうかに関わらず、このアドバイスに直接関与することを推奨します。アドバイスを求めて書き留めることは1つのことですが、積極的にそれに取り組むことはまったく別のことです。関与すればするほど、成果は甘くなります。
したがって、ADRのシリーズとそれに関連する会話は、意思決定のタスクを引き受け始めたい人々にとって、優れた学習の場を提供することを知っても驚かないでしょう。反対意見や妥協点を含め、すべてが公然と行われます。アーキテクチャの実践経験が少ない人は、過去の経緯をすばやく簡単に閲覧したり、良い(そしておそらくあまり良くない)例を見たり、決定が下されたり(おそらく状況が変化したりチームがさらに学習したときに決定が取り消されたりすることもあります)するのを見ることができます。これらは、ソフトウェアのセットに関する思考と意思決定の伝承であり、ソフトウェアに最も貢献した人々の手で書かれています。
残念ながら、クライアントとの間で行ったこれらの会話の例を共有することはできませんが、Thoughtworksの卒業生であるウィセン・タナサと彼のスタートアップUpmoのおかげで、公開インターネット上にADRの素晴らしい例がいくつかあります。ぜひご覧ください。それらは、マイケル・ナイガード自身によって祝福されています。
2. 会話のための時間と場所:アーキテクチャ諮問フォーラム
この代替アプローチにおける2番目のサポート要素は、このアドバイスを求めることをサポートするすべての会話を容易にするために存在します。それは、毎週1時間のアーキテクチャ諮問フォーラム(AAF)です。
基本的に、これは定期的に繰り返される会話のための場所と時間です。理想的な参加者は、各チームからの代表者と、アドバイスプロセスのチェックリストからの主要な代表者です。ただし、透明性とオープン性を促進するために、招待状は完全にオープンなままにする必要があります。行われる会話の適時性と質が成功の重要な指標ですが、同様に重要なのは、共有される見解の幅と多様性、そして貢献者についても同様です。ここでアーキテクチャが「行われ」、教訓が共有され、学ばれているのであれば、あなたは勝っています。
通常の議題は通常、次のように始まります。
- チーム代表が新しいスパイクをすばやく共有します(将来の決定の可能性を早期に警告し、参加者が既存の知識と経験を共有できるようにします)
- それぞれの新しい「提案された」決定に関する議論(決定を下す人によって提示され、事前にADRの形式でキャプチャされています)
- 他の決定ステータスの再検討(アドバイスを受け付ける期間を制限するため、また、不完全な情報に基づいて行った決定を見直すことを可能にするために、これらをタイムボックス化します)
- 私たちの4つの主要な指標、クラウド支出の傾向、そして最後に
- その他の事項(別名「AOB」)
一見すると、AAFは標準的な会議の新しいタイトルにすぎないという印象を与えるかもしれません。「技術諮問委員会」、「アーキテクチャ決定フォーラム」、「アーキテクチャレビュー委員会」として一般的に知られているものです。ただし、いくつかの重要な違いがあります。
まず、アドバイスプロセスが優先されます。AAFに持ち込まれた決定は、依然として発案者が所有し、決定します。他の参加者ができることは、アドバイスを提供するか、アドバイスを求める追加の人々を提案することだけです。したがって、その名前があります。
これにより、2番目の重要な違いが生じます。アドバイスプロセスの修飾子を考慮すると、AAFへの招待者は、通常、影響を受ける/関連する専門知識を持つ人々です。これは、通常、出席者には、各機能チームからの代表者(およびリーダーだけではありません。BA / POおよびQAも頻繁に出席します)、他の作業プログラムからの人々、UX、製品、運用、そして時々上級幹部が含まれることを意味します。
これらの2つの違いの組み合わせは、3番目の、そして最も重要な違いにつながります。それは、会話です。アドバイスプロセスは優れていますが、会話は多くの場合1対1になる可能性があります。AAFで行われる場合、聴衆がいるため、多くの人が聞くことができ、誰もが学ぶことができます。これらのセッションで共有される組織的、ドメイン、レガシー、および経験的な情報とアーキテクチャスキル展開の量は、私が今まで見たことのないものであり、潜在的に退屈な会議であるにもかかわらず、私たちの週の中で最も出席率が高く、最も広く参加される1時間です。これは、学習組織の探求における最も重要な貢献者の1つです。AAFは、意見の相違を奨励し、学んだ教訓に基づいた失敗/決定の変更を称賛します。これらすべてが組み合わさって、アーキテクチャの一般的な理解を広げ、深め、事実上、稼働中のソフトウェアに確実に結びつくようにします。
3. 統一された目標を照らす光:チーム発信のアーキテクチャ原則
アーキテクチャ原則を持つことは新しいことではありませんが、残念ながら私は役立つものにめったに出会いません。常に重要であり、高度に自律的なチームの世界では、制御を必要とせずに整合性の取れた配信方向を実現するための手段であるため、不可欠になります。
では、優れたアーキテクチャ原則とは何でしょうか? まず、アーキテクチャの決定を評価するための基準を提供する必要があります(実際には、具体的、測定可能、達成可能、現実的、テスト可能、つまり「S.M.A.R.T」である必要があります)。第二に、ビジネスの戦略目標をサポートする必要があります。第三に、必然的に含まれている結果/影響を明確にする必要があります。最後に、セットとしてまとめると、アーキテクチャ原則が満たす主要なニーズをカバーするには少なすぎず、チームがすべてを覚えるには多すぎない必要があります。
ここで悪いアーキテクチャ原則について書けることはたくさんありますが、主要な側面に焦点を当てます。まず、それらはプラクティスではありません。プラクティスは、TDD、トランクベースデリバリー、ペアプログラミングなどのように、何かを行う方法です。これは、プラクティスが悪いと言っているのではなく(実際、ドクター・フォスグレンの「Accelerate」には、状況に応じた推奨事項が満載です)、それらは単にアーキテクチャ原則ではありません。
スケールの反対側である一般的な原則に陥るのも注意してください。「シンプルに保つ」や「繰り返しを避ける」は原則ですが、アーキテクチャ原則ではありません。また、プロジェクト計画やソフトウェア品質管理に関するさまざまな原則も同様です。私たちが必要としているのは、アーキテクチャの実践と意思決定を指示および評価する手段です。私たちが必要としているのは、マイクロフロントエンドを実装するためのさまざまなアプローチの間で選択したり、独自のOAuth 2.0実装を自作するのが本当に理にかなっているかどうかを判断したり、AWSで自己ホストされたLuceneとAmazon Elastic Search Serviceを評価するのに役立つものです。
これらすべてを踏まえて、チームトポロジーの「ストリームに沿ったチーム」組織モデルに基づいて、良い原則を共有しましょう。
タイトル:チームの価値独立性を最も高く評価する
サブタイトル:チームラインに沿ってソリューションを分割する
理論的根拠:製品を構築および実行するための私たちのアプローチの強みは、基本的にチームの独立性にかかっています。この欠点は認識されていますが、特に将来のニーズを予測することが難しいことを考慮すると、利点が欠点を上回ると感じています。
影響
- 機能とデータの両方の重複は必然的に発生します。これを避けるのではなく、特定の状況下では、顕著な結果整合性やデータレプリケーションが必要になることを認識し、それを受け入れます。
- 複数のサードパーティソリューションのライセンス、ランタイム、サポートのコストを合計すると、単一の共有された製品チーム横断型ソリューションのコストよりも高くなる可能性があります。
- ソリューションは、それを所有し実行するチームのニーズに合わせて設計できます。他のチームのニーズを考慮する必要はありません。
- システムと、それらが構築されるサードパーティのサービス/ソリューションの両方が、より小さく、特定のタスクに焦点を当てる傾向があります。
- 独自の道を歩むチームは、独自に採用するサードパーティのサービス/ソリューションを自己サポートする必要があります。
さらに例をご覧になりたい場合は、公開されているJohn Lewis “ソフトウェアエンジニアリング原則”をご覧ください。[5]
ここまでは一般的な話です。このセクションでこれまで述べたことは、アーキテクチャへのどのようなアプローチにおいても物議を醸すようなものではありません。それなのになぜ私がこれらの点をこれほど強調するのでしょうか?この分散型アプローチでは、アーキテクチャ原則の重要性が高まるだけでなく、関係者全員が原則をどのように構成し、何が良いとされるのかを知る必要があります。なぜなら、原則はチーム自身が作成し、維持するからです。
私たちのアプローチは、アボットとフィッシャーによる優れた「スケーラビリティの技術」から直接取り入れたものが大部分です。彼らの本は、ここで提示されるものよりもややトップダウン型の階層的なアーキテクチャアプローチを前提としていますが、著者たちは、人間の要素が彼らのトピックに与える影響を非常に認識しています。実際、私が読んだ版は、この観点に重点を置くように大幅に書き直されていました。この重要な側面の一つは、アーキテクチャ原則を成功させるには、原則に対して責任を負うチームが所有権を持つ必要があるという主張です。
集合体からこれらの原則をどのように入手するかについての詳細は、彼らの本をご覧になることをお勧めします。ビジネスの戦略的目標、先に説明した「S.M.A.R.T.」基準、テクノロジー部門内外の幅広い招待者(ここでもAAFの招待者リストが非常に役立つでしょう)を提示すれば、8〜15個の原則に迅速かつ集合的に到達し、それらはあなたに大いに役立つでしょう。[6]原則の採用をADRとして記録する価値はあります。これらは非常に軽量で(原則自体を繰り返すという罠に陥らないでください)、なぜこの原則が重要なのかを明確に説明する絶好の機会を提供します。
原則について最後に述べておくべき点が一つあります。このアプローチはチームの自律性をサポートすることを目的としていることを忘れないでください。したがって、私たちの原則が果たす重要な役割の一つは、全員の間での理解と合意の最小限の実現可能なセットとしての役割です。これは重要な点を提起します。なぜなら、ADRでチームに明示的に示すように求めていることの一つは、適用される原則だけでなく、決定が一つ以上の原則と矛盾する場合も示してもらうからです。これは、助言プロセスとAAFにおける集合体の力を活用して、問題に対する最良の知性と多様な視点を本当に引き出し、すべてをADRに記録するための絶好の機会となります。ここでも、さまざまな要素が互いにサポートし合い、その利点を増幅し、成功するアーキテクチャの実現に役立ちます。結果として原則が変更された場合は、元の原則を置き換える別のADRとしてそれを明記することを忘れないでください。
以上が、全員が目指すべき道標としての役割を果たすアーキテクチャ原則についての説明です。しかし、周囲の状況や情勢もどのように考慮するのでしょうか?アーキテクチャに関する決定は、他の人が何をしているか、誰がどのようなスキルを持っているか、テクノロジー業界の一般的なトレンドは何かということも頻繁に考慮して行われます。そこで、4番目で最後のサポート要素である独自のテクノロジーレーダーが登場します。
4. 技術ランドスケープと現在の状況を感知するツール:独自の技術レーダー
多くの人が、ThoughtWorksのテクノロジーレーダーについて聞いたことがあるでしょう。これは、ソフトウェア言語とフレームワーク、ツール、プラットフォーム、およびテクニックにおける現在のトレンド(予測されたもの、現在のもの、および衰退しつつあるもの)に関する意見に基づいたガイドです。その強みは、現在の状況と、さまざまな「点」の動きを視覚的に表現する方法にあります。これにより、例えば、フロントエンドフレームワークの世界で何が成長しつつあるのか、現在の旬なものは何か、そして何が衰退し始めているのかを、視聴者が非常に迅速に把握できます。
残念ながら、独自のレーダーを構築できるという事実を知っている人は非常に少ないです。「BYOR」を使用すると、組織全体で確認できるテクノロジートレンドのローカルバージョンを、集合体としてキャプチャしてマッピングできます。また、非常に設定可能です。最近の私の使用では、四分円(テクニック、ツール、プラットフォーム、言語およびフレームワーク)は維持しましたが、リングを、ワークプログラムを通じてのテクノロジーの移行を反映するように変更しました(「実験」、「採用」、「保留」、最後に「廃止」となりました)。
アーキテクチャ原則と同様に、これらのレーダーの点はワークショップでクラウドソーシングする必要があります。この最初の実行では、組織に現在あるすべてのものをキャプチャします。いわば、ベースラインスイープまたはスキャンです。これを行う前に、どの範囲まで進めるか(組織全体?プロジェクトだけ?運用やUXなどの分野を含めるか?など)、および四分円をどうするかを決定する必要があります。データキャプチャ用の追加フィールドを追加することもできますが、私は通常、シンプルに保つようにしています。初回は時間がかかる場合があります(過去には4時間以上かかったこともあります)が、これはアーキテクトだけでなく、チームメンバー全員が参加することが不可欠であるためです。最終結果は、状況と一般的な情勢の素晴らしい概要を示し、どこに努力を向けるべきか、どこで努力を減らすべきかについての多くの議論を呼び起こします。そして、原則と同様に、チームの理解を一般的に合わせることに貢献します。
レーダーの使用はどうでしょうか?原則と同様に、「関連するレーダーの点」はADRにも記述する場所があります。これは、現在のレーダーに反映されている既存の状況への準拠だけでなく、より重要なことに、この決定によって導入される既存のレーダーへの潜在的な変更を明示する場所です。おそらく、新しいフレームワークのスパイク、または特定のプラクティスでの「実験」から「採用」への移行などでしょう。
繰り返しますが、これはAAFのディスカッションフォーラムにとって素晴らしい材料であり、ADR自体に含める素晴らしいコンテンツです。特定のタイプの点の出現と動きを、ADRを提出する必要性に関連付けることもできますが、私の経験では、誰も明示的にプッシュする必要がなくても、これは起こります。ここでの目標は、進化するアーキテクチャへの可能な限り広範な参加と、チームメンバー全員にアーキテクチャの考え方を育むことです。
レーダーを最新の状態に保つにはどうすればよいでしょうか?四半期ごとのケイデンスや、半年に一度のケイデンスが機能しているのを見てきました。重要なのは、AAFや他の場所でレーダーがどのように使用されているか(またはされていないか)に注意を払うことです。これにより、いつ更新に投資する価値があるかを適切に把握できるはずです。
これが実際にどのように機能するか
これらすべてを踏まえて、実際にどのように機能するのかを見てみましょう。
アーキテクチャに関する決定の必要性が最初に発生したとき、それはおそらく曖昧で、理解が不十分な可能性があります。したがって、すぐに新しいADRテンプレートを開いて、入力してみるのが最適です。
最初に取り組むべきは「コンテキスト」セクションです。これを行うには、バランスを取る必要のある周囲の力だけでなく、決定の「理由」を理解する必要があります。この短いセクションでさえも完了するには、調査を行う必要があることにすぐに気付くでしょう。
この調査の初期段階では、アーキテクチャの原則とレーダーを参照する必要があります。原則は、思い出していただければ、理想的なソリューションが理想的に具現化する方向性を示してくれます。すべてが関連するわけではありませんが、いくつかの原則は意思決定に役立つはずです。複数の技術的な可能性を評価し、最適なものを強調することが、アーキテクチャ原則の主な目的であることを思い出してください。
場合によっては、経験が少し異なることがあります。1つの代替案は、関連する原則が2つのオプションから選択するのに役立たない場合です。その場合、選択するのにほとんど差がないか、原則が十分にS.M.A.R.T.ではない可能性があります。これは原則を見直し、再定義する良い理由です。
もう1つの代替案も、おそらく少し遅れて、原則の再評価につながる可能性があります。これらは、決定を下すために、一つ以上の原則に違反する傾向があると感じた場合に発生します。それでも大丈夫です。優れた決定は原則に反する可能性がありますが、そうするには、なぜこの行動方針が正しいステップだったのかを明確に示す必要があります。原則を覆すことは、一般的な進むべき方向から効果的に逸脱することを意味するため、重大なステップです。したがって、決定と結果のADRは、明確に議論され、強く正当化される必要があります。また、この開発を踏まえて原則を見直す時期である可能性もあります。
対照的に、レーダーはより助言的な性質を持ちます。これは、問題領域で現在事実上の標準となっているもの、過去に何が行われたか、他のチームが実験している可能性のあるものについてのアイデアを提供します。異なる方法に進むことは、眉をひそめられる可能性ははるかに低いですが、ADRで逸脱に対処する明確な理由になります。
これらすべてを踏まえて、オプションを評価するための主要な基準と、代替案のリストを作成し始めることができます。おそらく、宿題をする必要性に本当に気付いたため、何かについて詳しく学ぶために、時間制限付きのスパイクをスピンオフするかもしれません。ADRの考え方は、ここで非常に明確な受け入れ基準を作成するのに役立ちます。スパイクを行う必要がない場合は、代わりに助言を求めることを検討します。
コンテキスト(例えば、技術戦略など)、適用可能な原則、レーダーのブリープ、主要な基準/代替案からのこれらのインプットを持つことで、誰にアドバイスを求めるべきかを考えるのに役立ちます。私の経験では、問題領域やニーズを比較的理解していると確信できるが、特定の解決策に固執しすぎる前に、これに取り組むことが役立ちます。アドバイスを求める際には、あなたに反対する可能性のある人、つまり、異なる考え方をする人や、自分に盲点があることを知っている人に、最も時間と労力を費やしてください。それだけでなく、自分自身に挑戦してください。「この代替案の悪い点は何か?欠点は何か?」と考えてください。あなたの決定に最も直接的かつ根本的に異議を唱える代替案について、最も時間をかけて考えてください。
議論をする前に、ADRを大まかな形で準備し、事前に共有することが役立ちます。これにより、彼らに考える時間を与えることができます。そして、実際に会ったときは、ADRテンプレートのすべての要素を確認してください。コンテキストから何か見落としていませんか?原則/ブリープから?評価基準から?これらすべてについてアドバイスを求め、記録してください。さらに重要なのは、なぜ彼らがこれらの提案をしているのかを尋ねることです。より良いアーキテクチャ上の決定を下すための鍵となるのは、これらの質問への回答です。アドバイザーは、彼らがどのように問題を認識しているか、過去に同様の状況に遭遇したときの経験、さらにはあなたが考えも及ばない側面全体を理解するのに役立ちます。[7]
AAFはどうでしょうか?それはアドバイスを集める場所ではないでしょうか?はい、そして上記で共有したことはすべて、どこで会話をするにしてもあなたを導くはずですが、チームや個人が最初に行ういくつかの決定については、主要なアドバイザーとより的を絞った方法でこれらを行うことが非常に役立ちます。AAFの前に提示するADRは、広く共有される前に本当にしっかりとした、焦点の合ったものになるため、結果として得られるAAFの会話はより豊かで、焦点を絞ったものになるでしょう。AAFでの簡単な会話が、その後のより詳細な1対1の会話につながることもあります。
アドバイスをどこから得たとしても、ADRに取り込む必要があることを忘れないでください。与えられたアドバイスを採用する必要はありませんが、記録する必要があります。ここで優れたプラクティスは、人々が直感的ではない、または驚くべきことだと思うことを優先して書くことです。主要なアドバイスに同意しない場合は、どのように、なぜそうなのかを明記してください。何か新しいことをしている場合は、なぜ現在のやり方があなたには機能しないのかを明確にしてください。原則を使用することを忘れないでください。それらがあなたの決定を支持することもあるでしょう。どのように支持するのかを明確にしてください。場合によっては、それらに反する必要があるでしょう。なぜそうなのかを明確にしてください。あなたの目標は、読者があなたがなぜその決定を下したのかを理解できるようにすることです。この目標を達成すれば、確固たる決定を下すだけでなく、その過程で多くのことを学んでいる可能性が高いでしょう。[8]
このセクションを終える前に、すべての決定は特定の時点でのものであり、誰も将来起こるすべての事態を予見することはできないことを覚えておいてください。しかし、後で振り返ったときに、当時知っていた/理解していたことを考えると、その決定を良かったと感じられるようにする必要があります。この点で、あなたが記録したコンテキストと基準が重要です。この決定の再検討は、もう1つの優れた学習ツールです。後知恵の利点を活かして、「コンテキストを十分に理解していたか?」や「自分たちが知っていることと知らないことについて、十分に正直だったか?」などの質問をすることができます。
失敗する方法
以上が、アーキテクチャに対する私たちの代替的で分散型、アナーキーなアプローチの範囲と、それがどのように組み合わさっているかのアイデアです。しかし、結論を出す前に、最後に1つの側面、つまり失敗する可能性のある主な方法について触れておく必要があります。それらを列挙してみましょう。
実際に見られる失敗の大部分は、経験の浅い人が決定を下すことによって起こる、良い失敗、つまり小さな失敗です。これらが良いのは、このプロセスが、必要とする人による迅速な意思決定を促進し、さらに重要なことに、透明性、失敗の迅速な特定(決定を下した人はそれをコード化する際に問題に気づくため)、そして再検討し、学習を共有するための安全な手段を促進するからです。これらを積極的に受け入れ、具体的に呼び出し、AAFで祝ってください。これは、学習文化を構築するための重要な側面です。
最も効果的に学習するには、安全だと感じる必要があり、集団的に学習するとき、議論に貢献する最も広範で多様なインプットから全員が利益を得ます。このアプローチでは、明示的にコンセンサスを求めているのではなく、広範なインプットと声を求めていることを忘れないでください。ここに次の失敗モードがあり、それは最初の失敗よりもはるかに陰湿で有害です。この2番目の失敗モードは、会話の開始者およびスペースホルダーとしてのあなたの仕事において、貢献し、決定し、学習する必要のあるすべての人を含めることができなかった場合に発生します。このスタイルのアーキテクチャの初期採用段階では、多くの場合、大きな成功のように感じられることがあります。「うまくいっている!ますます多くの人が意思決定を行い、ADRに書き出し、アドバイスをし、AAFで議論している!これまで原則に対するこのような関与を見たことがない!」と。後になって、振り返ってみると、得られるものがはるかに大きかったことに気づくでしょう。この最初の満足感が襲ったときこそ、最も警戒しなければならないときです。本当に、大勢の参加と学習を観察しているのか、それともいつもの中心的なグループだけなのか?この問題は積極的に軽減する必要があります。誰が貢献しているかを注意してください。声を増幅し、静かな貢献者の意見を他の人が聞くようにしてください。影響力が、評判、在職期間、または階層内の地位に基づいていないようにしてください。多くの視点を積極的に奨励し、それがもたらす価値を強調して、それが自立的に維持されるようにしてください。
3番目の失敗モードは、先行する失敗モードに遭遇しているという早期警告ですが、これは望ましいものと望ましくないものの間のグレーゾーンに存在します。この道のりを進むにつれて、あなたはオフグリッドの決定を発見するでしょう。AAFで議題にならず、ADRにも記録されなかった決定です。それらに対処する方法は2つあります。最初の正しい方法は、発見をあなたが望むものであり、正直な間違い、そして学び、他の人に教える機会として扱うことです。おそらく、意思決定者は、それが自分たちが下している重要な決定であることにさえ気づいていなかったでしょう。おそらく、彼らは他の場所からプレッシャーを受けていたでしょう。おそらく、それはそれほど重要ではないと思っていたでしょう。おそらく、AAFで反対されると感じていたでしょう。理由が何であれ、それを彼らとあなたが両方とも学ぶための方法として扱ってください。プロセスを改善するために。これらの扱い方のもう1つの間違った方法は、古いやり方に戻り、支配権を取り戻すことです。これは、このアプローチとそれが約束するすべてを完全に破壊する失敗モードにつながります。
この4番目で最も危険な失敗モードに陥るのは簡単なので、あなたの側で常に警戒する必要があります。これを引き起こすために必要なことは、「大文字のA」の建築家であるあなた自身が、人々を信頼することをやめてしまうことです。それは、あなたが説くことを実践しないことです。それは、前述の小さな失敗とそれに伴う学習機会のための十分なスペースを確保しないことです。それは、他の場所からのすべての兆候にもかかわらず、物事があなたが思うように進むようにするために、舞台裏で「影のアーキテクチャ」を継続することです。この失敗モードの唯一の利点は、上記にリストしたすべての利点が実現しないため、非常に迅速に明らかになることです。
このアーキテクチャへのアプローチを成功させるのが難しいのは、この主要な失敗モードが原因なのかどうか疑問に思っているなら、それは正しいでしょう。私は過去に幸運でした。同僚は、私が他の人のために意思決定をしたときに私を呼び出し、私が知っていることを人々が知らないことに不満を感じている自分に気づきました。しかし、そのとき、私はアーキテクチャの実践者としての自分の本当の仕事に失敗していることに気づきました。つまり、適切な人々と、適切なタイミングで、適切な会話をできていないのです。そのことを覚えておいてください(プロセスを遵守しない場合に他の人にあなたを呼び出すように指示してもかまいません)、そして成功することがどれほど簡単(そして満足感がある)かに驚くでしょう。
5つの要素の再確認と、さらなるステップの可能性
良いものと(潜在的に)悪いもの、そして注意すべき失敗モードのコレクションができたので、結論としましょう。アーキテクチャへの代替アプローチの5つの要素を思い出しましょう。
1つの核となる要素:アドバイスプロセス
4つのサポート要素
- アーキテクチャ諮問フォーラム
- 軽量ADR
- チームソースの原則
- 独自の技術レーダー
これらの要素のどれも(おそらくアドバイスプロセスを除いて)あなたにとって新しいものではないかもしれませんが、非常に異なるものがあることを明確にできたと思います。この違いは、会話、学習、安全を背景にした、これらすべての相互作用/相互補強にあります。少なくとも私の経験では、これが現在および将来に向けて、より確実に展開されたアーキテクチャを提供できる可能性が高いという事実が、魅力的であることを願っています。これは、自分自身を拡大し、私が一緒に働くチームが、結局のところ目標であるユーザーに約束したことを確実に提供するための、私の頼みの綱です。
あとがき:次は何をする?
もちろん、この記事を焦点を絞って書こうと努めてきましたが、さらに深く掘り下げることができます。私は、このように取り組んでいるチームが、自然に自分たちの道を切り開き始めているのを見てきました。つまり、(配信)プラットフォームチームが存在する前に、独自の配信プラットフォームを自己完結的に提供し始めるのです。(私の同僚であるエヴァン・ボッチャーの優れた「私がプラットフォームについて話すときのこと」と、スケルトンとペイズのチームトポロジーで、これについて詳しく説明しています。)
また、チームが独自のアーキテクチャ適合度関数(そして実行コストだけではありません)を導入して、集団的なアーキテクチャが意図された範囲外に逸脱したときにわかるようにしているのも見てきました。
私が学んだ最大の教訓は、人々をエンパワーメントし、成功するための環境を与え、彼らの成功を認識すると、彼らはすぐに、そして集団として、あなたが考えもしていなかったことについて考え始めるということです。それが、この種のアプローチの本当の利点です。つまり、少数のはるかに制限された知性に頼るのではなく、多くの集団的な知性にアクセスすることです。
脚注
1: ただし、適度なアナーキーも含まれます...
2: そして、私は自分自身もこのグループに入れます。
3: 意思決定の経済学については、ドナルド・G・ライナートセンの「プロダクト開発フローの原則」で詳しく説明されています。原則E8:小規模な決定の原則、E10:最初の消滅可能性の原則、E11:分割の原則は、ここで議論している内容に照らして特に興味深いものです。
4: 実際にはさらに2つありますが、それらについては後で詳しく説明し、サポート要素3と4で個別に議論します。
5: 執筆時点では、ジョン・ルイスの原則には、「アーキテクチャ」原則の定義から外れる項目がいくつか含まれていることに注意してください。例えば、「理解性」や「パフォーマンスの重要性」などです。これは、これらの目標が悪いという意味ではなく、定義に合致していないということです。
6: 次の章で紹介するJADとARBが、ここで採用しているアプローチにあまり適合しないとしても、原則を再検討/更新する時期について、いくつかの素晴らしい考えが含まれており、それによって、継続的な使用と再評価を通じて、原則が常に新鮮さを保つようにしていることを指摘しておく価値があります。
7: 典型的な例としては、開発者を見つけ、雇用し、維持しなければならなかった人々や、新しい技術について異なる考え方を持つ意思決定の「サポート」側だった人々が挙げられます。
8: この基準を満たす優れたブログ記事がいくつかあり、それらは多くの場合、拡張されたADR(アーキテクチャ上の意思決定記録)にすぎません。「なぜRustではないのか?」や「いいえ、私たちはKubernetesを使用していません」は優れた例であり、本当に素晴らしい意思決定(および、安易な模倣の回避)の過程を見たい場合には読む価値があります。
謝辞
この投稿を現在の状態にするために協力してくれた以下の皆さんに深く感謝します:Martin Fowler, Nimisha Asthagiri, Nick Robinson, Rob Horn, Ian Cartwright, Tim Cochran, Carl Nygard, Marty Abbot, Mel Mitchell, Pete Hunter, James Brown。皆さんの知恵と貢献に感謝します。
主な修正履歴
2021年12月15日: 公開完了
2021年12月13日: 技術レーダーを公開
2021年12月9日: アーキテクチャ原則を公開
2021年12月8日: アーキテクチャ諮問フォーラムを公開
2021年12月1日: 意思決定記録を公開
2021年11月30日: 助言プロセスを公開