仕事の進め方とアーキテクチャの相関関係

http://rubyrogues.com/176-rr-rails-as-an-soa-client-with-pete-hodgson/

1 comment | 0 points | by WazanovaNews 約3時間前 edited


Jshiike 約3時間前 edited | ▲upvoteする | link

「システムの設計は、その組織のコミュニケーション構造を反映したものになる。」というコンウェイの法則について、ThoughtWorksのPete Hodgsonは、それを逆のかたちで、つまり、採用すべきアーキテクチャの特性を活かすために人と人とのコミュニケーションをどう改善するかということに、かなり時間をとっていると語っています。

コンウェイの法則は、重力のように不可避なもの。うまく活かせるように変わるか、対応できずにダメになるかの二者択一だ。

各サービスの担当チームが細分化されている大企業の顧客において、SOA(サービス指向アーキテクチャ)の導入に取組む中、各チームの自由度が高まるというメリットを享受しながらも、一方で、

  • チームごとに優先順位が違ったり、バグなどでのリリーススケジュールの調整。
  • 何をやっているかわからない他のチームのサービスが障害起こすことで、自分たちのサービスに影響を受けてしまう。

など、対応にコミュニケーションが重要になる場面はよく起きる。しかし、ありがちなのが、

  • 「自分のマシンでは問題なく動作する。」
  • 他人よりも自分が正しいと考える。
  • impostor syndrom(詐欺師シンドローム)の前科があっても、常に自分は理解しているという前提に立ち、うまく動かないと相手が言うと、おそらく自分ほどしっかり理解できてないからだと判断する。
  • 全ての問題をテクノロジーで解決したがり、コミュニケーションを取りたがらない。

というケース。Pete曰く、「最も時間を使うのは、メンバに働きかけて、相手のところまで歩いて行かせて、実際に話をさせるところ。」

  • SOAの効果をあげるために、分離性の向上に努める。依存するサービスのフェイクバージョンを用意して、通常のテストをスムーズに進むようにする。また、依存するサービスの変更リスクに対しては、コントラクトテストを用意して、サービスの受け手である自分たちのサービスが期待する振る舞いをしているか確認する機会を別途設ける。
  • SOAを採用することで、各チーム内では少ない人数でコミュニケーション頻度高く仕事が進むことでメリットがある。同僚が隣に座っているし、毎朝チームでスタンドアップミーティングをし、コードを壊せば当然まわりにすぐに影響するので、ある意味強制的にメンバ間でのコミュニケーションは起きる。

アプリ内のサービス間の分離性を高めて自由度を上げながらも、チーム内で実現しているコミュニケーション頻度のメリットは、チームを跨いだかたちでも当然活きるはず。そこに対して、腰が重くなりがちなメンバに対して、

  • 「忙しいんだよ。誰が原因だかわからないけど、自分がやってるところは問題ないはず。だから他の誰かの問題のはず。」というメンバに対して、コントラクトテストで事実関係を証明する。
  • CIシステムは、「おたくのチームがうまく動かないときがあるんだけど、理由はよくわからない。」と言う替わりに、厳密に再現結果を通知してくれる。

という仕組みが、いい意味で強制させる副作用をだしてるとのこと。

もし、まずは効率的なプログラムか?、効率的なチームづくりか?という選択になれば、自分は効率的なチームづくりを優先する。それで早く開発できれば、プロファイリングしてパフォーマンスを分析するデータが取得でき、最適化に使う時間がとれ、最終的には効率的なコードになる。

またPeteは、サービスを享受するクライアント側が、Faradayを使って、DBにコールするサービスゲートウェイを、依存するサービスごとに用意していると紹介しています。

サービスを提供する側が用意すると、(利用者であるクライアント側のニーズを理解してないこともあり、)メリットよりも苦労の方が上回る。

サービスの利用者側がサービスゲートウェイをメンテするというコード管轄の境界の設定は、振る舞いを期待する方がまずコードに手を入れて、システムが変更されていくという意味で、コンウェイの法則的にも適っています。サービスの提供側と利用側の両チームのつながりを強める効果も期待できますが、そもそものコミュニケーションチャネルが十分成り立っていなければ、当然ワークしません。

このSOAにおける人と人のコミュニケーションの重要性の議論は、リモートワークの是非の話にも似てるなと思いました。全員が同じ場所で働いた方が開発効率がいいとはわかりつつ、優秀なメンバを採用 & リテインするためにリモートワークを導入しますが、しかし、適切なコミュニケーションの量と質を確保する工数が大変なのは事実。Redditが、$50M(約55億円)調達したのにあわせて、リモートワーカー全員に転勤するか、退社するかの決断をせまっていることがちょっとした騒動になっていますが、批判されることを覚悟しながらも方針転換を図ったのは、コミュニケーションの改善のメリットの方が大きいと判断してのことでしょう。優秀なメンバを狙って、戦略的にリモートワークを採用する企業が増えつつも、このような揺り戻しも続くでしょうから、「リモートワークはコミュニケーションツールの進化に正比例してどんどん浸透していく。」というシナリオはさすがにちょっと厳しいかもしれませんね。

#働き方 #soa


ワザノバTop200アクセスランキング


Back