逆コーンウェイ戦略とDevOps, Microservices, Agile

コーンウェイの法則Conway

「コーンウェイの法則」というのを知ってますか?Jim Conplien の組織プロセスパターンにも登場しますが、”組織の構造がソフトウェアの構造に反映する“あるいはその逆、“ソフトウェアの構造が組織の構造に反映する”というものです。Wikipedia によると、

Conway’s law is an adage named after computer programmer Melvin Conway, …

“organizations which design systems … are constrained to produce designs which are copies of the communication structures of these organizations”

— M. Conway
分かりやすくたとえが、「4つのチームでコンパイラを作成すると、4 pass コンパイラになる」
という言い方で知られています。(どちらかというと、ソフトウェアの構造が組織の壁によって悪いアーキテクチャを生み出す、というような意味合いが多い)
Conway-Struct.png

逆コーンウェイ戦略

少し前の ThoughtWorks のテクノロジーレーダーに、逆コーンウェイ(“Inverse Conway Maneuver” )というのがあり、気になっていましたのでちょっと調べてみました。

コーンウェイの法則が、「観察結果」に対しての「こうなっちゃいます」というパターンとして言語化されているのに対して、逆コーンウェイは、「積極的に組織とコミュニケーションを設計しよう」というのです。観察でなく、積極的に。Maneuver、すなわち設計戦略なのだと。Maneuver は軍事用語で「作戦行動」なので、戦略的に組織を変えて transformation して行く、という意味合いがあります。

“The ‘Inverse Conway Maneuver‘ recommends evolving your team and organizational structure to promote your desired architecture. Ideally your technology architecture will display isomorphism with your business architecture.”

– Technology Lader (ThoughtWorks)

拙訳:逆コーンウェイ戦略は、自分たちの望ましいアーキテクチャ設計を促進するように、チームと組織側を機動的に進化させることを推奨する。理想的には「技術的アーキテクチャ」が「ビジネスアーキテクチャ」の同形写像になるように。
現代流に言えば、
  • DevOps をやるなら、Dev と Ops を同じ組織にせよ。
  • Agile やるならワンチームで。
  • 複数の Agile チーム構成にするとき、でビジネスに分かりやすい機能(フィーチャ)を重視するなら、コンポーネントチーム(ソフトウェアの部品に着目したチーム構成)でなく、フィーチャーチーム(機能縦割りのチーム構成)で。
  • Microservices アーキテクチャを採用するなら、小さなAgileチームをたくさん。
ということになると思います。要するに、「人間や組織間のコミュニケーション(情報流)」というものがソフトウェア開発には決定的なインパクトを与える、ということをまず認め、それを積極的に活用するように、ということです。
「ソフトウェアは会話でできてる」(Software is made of conversations) という、このブログのテーマそのものだったので、ちょっと嬉しかったのです。
以下、参照文献。

3 thoughts on “逆コーンウェイ戦略とDevOps, Microservices, Agile

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s