偶発的な複雑さ
元の質問(言い換え)は:
アーキテクトは、ソフトウェアプロジェクトの偶発的な複雑さをどのように管理しますか?
プロジェクトを指揮する人々が一時的なテクノロジーを追加することを選択し、プロジェクトの元のアーキテクトの全体的な戦略がプロジェクトに持ち込むつもりがなかった場合、偶発的な複雑さが生じます。このため、戦略の選択の背後にある理由を記録することが重要です。
戦略からの意図的な離脱が明らかに必要になるまで、元の戦略に固執するリーダーシップにより、偶発的な複雑さを抑えることができます。
不要な複雑さの回避
質問の本文に基づいて、次のように言い換えます。
アーキテクトはソフトウェアプロジェクトの複雑さをどのように管理しますか?
この言い直しは、ファインマンアルゴリズムが持ち込まれた問題の本文により適したものであり、問題に直面したときに最高のアーキテクトが解決策を巧みに構築するゲシュタルトを持つことを提案するコンテキストを提供します。私たちの残りはこれを学ぶことを望んでいないことを。理解を得るかどうかは、対象の知性と、対象の範囲内にある可能性のあるアーキテクチャオプションの機能を学習する意欲に依存します。
プロジェクトの計画プロセスでは、組織の学習を使用してプロジェクトの要件のリストを作成し、すべての可能なオプションのリストを作成してから、オプションと要件を調整します。専門家のゲシュタルトにより、彼はこれを迅速に、そしておそらくほとんど明白な作業をせずに行うことができ、彼に簡単に来るように見えます。
彼の準備のために彼に来ることをあなたに提出します。専門家のゲシュタルトを得るには、すべてのオプションに精通している必要があり、プロジェクトが提供する必要があると判断された予測される将来のニーズに対応する簡単なソリューションを提供する先見性と、変化するニーズに適応する柔軟性が必要ですプロジェクト。ファインマンの準備は、理論と応用数学と物理学の両方でさまざまなアプローチを深く理解していたことでした。彼は本質的に好奇心が強く、周囲の自然界について彼が発見したことを理解するのに十分な明るさでした。
専門技術アーキテクトは同様の好奇心を持ち、基本の深い理解だけでなく、多種多様な技術への幅広い露出を利用します。彼(または彼女)は、ドメイン(Unixプログラミングの原則など)で成功している戦略と、特定のドメイン(デザインパターンやスタイルガイドなど)に適用される戦略を活用する知恵を持っています。彼はすべてのリソースを熟知しているわけではありませんが、リソースの場所を知っています。
ソリューションの構築
このレベルの知識、理解、および知恵は、経験と教育から引き出すことができますが、偶発的で不必要な複雑さを回避する方法で連携するゲシュタルト戦略的ソリューションをまとめるには、知性と精神活動が必要です。これらの基礎をまとめるには専門家が必要です。これらは、最初に用語を作り出したときにドラッカーが予見した知識労働者でした。
特定の最終質問に戻ります。
偶発的な複雑さを抑えるための具体的な方法は、次の種類のソースにあります。
Unixプログラミングの原則に従うと、よく機能し、一般的なインターフェイスで堅牢なシンプルなモジュール式プログラムを作成できます。次の設計パターンは、必要以上に複雑ではない複雑なアルゴリズムの構築に役立ちます。以下のスタイルガイドは、コードが読みやすく、保守しやすく、コードが記述されている言語に最適であることを保証します。専門家は、これらのリソースに見られる原則の多くを内部化し、それらをまとまりのあるシームレスな方法でまとめることができます。