生産性向上ブログ@miyajan

圧倒的生産性向上を目指すエンジニアのためのブログ

System of Record と System of Engagement、そしてバイモーダルITについての考察

概要

speakerdeck.com

naoyaさんによる『System of Record と System of Engagement』というスライドをきっかけにバイモーダルITについて調べてみたらおもしろかったので、考察してみます。

バイモーダルIT

バイモーダルITとは、ソフトウェアシステムを『信頼性が重視されるモデル』と『速度が重視されるモデル』に分けるプラクティスのことを指します。

前者のモデルをSystem of Record(SoR)と表すことがあり、主に情報を記録するシステムを指します。例えば、DBや銀行のアカウントシステムなどです。

後者のモデルをSystem of Engagement(SoE)と表すことがあり、主に顧客が直接触る部分のシステムを指します。例えば、SNSサービスのUIなどです。

それぞれのモデルによって特性が異なります。例えば、SoRならウォーターフォールで長いサイクルの開発が向いている、SoEならアジャイルで短いサイクルの開発が向いている、という感じです。

info.advsyscon.com

↑こちらの記事の、それぞれをマラソンランナーとスプリントランナーに例えた図を見てもらうと、どのように特性を分類しているか分かりやすいと思います。

このように、ソフトウェアシステムをSoRとSoEに分類して、それに合わせて組織やプロセスを調整していくのがバイモーダルITという戦略になります。

Martin Fowlerの考え

martinfowler.com

一方で、Martin Fowler御大はバイモーダルITを"flawed notion"(誤った概念)とブログ記事で解説しています。主な理由として、以下の2つを挙げています。

  • ビジネスベースではなくソフトウェアシステムベースで分類してしまっていること
  • 速度と品質がトレードオフであるという誤った過程に基づいていること

前者は、素早く新しいアイディアを実現していきたいのであれば、SoRなシステムであっても頻繁に変更していく必要があるということを指摘しています。例えば、賢い料金プランに辿り着きたいのであればSoRである決済システムでも素早く変更していくしかありません。

後者は、素早く新しい機能をデリバリーしていくことがより高い品質につながるということを指摘しています。実際、ThoughtWorks社ではSoRなシステムであってもアジャイルなアプローチでより少ない欠陥を実現してきているとのことです。逆に、品質に注意を払わなければ、SoEなシステムであってもペースがスローダウンしていきます。

最終的にMartin Fowlerは、バイモーダルなアプローチではなく、"business capability"中心のアプローチを推奨しています。

martinfowler.com

business capability中心のアプローチについては、↑の記事で解説されています。要は、business capability(例えば、Eコマースビジネスの場合、購入・販売・マーケティング・カタログ・取引管理などがcapability)の特性によって組織やプロセスを調整していくのがいいということのようです。

考察

ここからは自分個人の考えです。

まず、バイモーダルITの考え方の利点も少なからずあると思います。特に、ソフトウェア開発手法は作るものの特性によって変わってくるということを理解するきっかけになるというのがありそうです。つまりは、近年のアジャイルVSウォーターフォールのようなコンテキストを無視した不毛な論争からの脱却につながり、それぞれに利点があるということの理解につながります。バイモーダル戦略が解決策のひとつになることはあるだろうし、それぞれの手法にリスペクトすることは重要だと思います。

一方で、バイモーダルITはやはりミスリーディングな部分があると思います。2つのモデルで分類するというのが大雑把すぎますし、その軸としてSoRとSoEが適切かというのも疑問が残ります。

例えば、1つのサービス単位の枠で考えると、SoRな部分とSoEな部分の両方が存在するのはよくあることだと思います。このときにSoRな部分とSoEで分類してしまうと、SoEとSoRの両方に手を入れる必要があるときに困ってしまいます。UIを変えるためにSoRな部分にも修正が必要というケースは普通にありそうで、このときにSoRな部分を言い訳に長いサイクル側に倒されてしまう可能性が高いです。本来は、SoRかSoEかではなく、そのビジネスの特性に注目するべきでしょう。頻繁に変更して顧客の反応を確かめながら提供したいか、すでに固まっている仕様を一回納品すれば終わりか、ということを考慮するべきだと思います。

結論としては、バイモーダルITという考え方を引き出しの1つとして持っておくのはありだですが、組織で共通言語として使うにはちょっと怖い印象を受けました。組織内ではビジネスゴールにフォーカスしたコミュニケーションをするようにしていきたいです。

以下 2016/12/25 追記:

一応補足ですが、この記事の考察はnaoyaさんの発表内容を否定するものではありません。むしろ、Web系にもSIerにもそれぞれのいいところがあるんだよって伝えるためにはわかりやすい例だと思っています。ただ、使い方によってはミスリーティングになりそうという個人の考えです。