Technology / Development Issues

コンウェイの法則 - 「システムを設計する組織は、その構造をそっくりまねた構造の設計を生み出してしまう」

組織とアーキテクチャの関係について論ずる時、必ずと言って良いほど引用されるのが、このコンウェイの法則です。この法則は多くの組織とアーキテクチャについて当てはまり、Everforthもその例外ではありません。Everforthの開発の中核を担う「PreferCloud Platform」について、この組織の特徴や歴史とともに紹介します。

1. 好きな時間に好きな場所で開発する

Everforthは働く場所も時間も自由な会社です。社員は北海道から沖縄まで点在しますし、日中に働く人もいれば深夜に働く人もいます。ですから必然的に集まる場所はオンラインが中心になり、ビデオ会議などのリアルタイムなコミュニケーションよりも、チャットを利用した非同期なコミュニケーションが中心となります。連絡や相談はChatwork、Slackなどで行ない、ソースコードなどはGitHubやBacklogで管理、またファイルなどもGoogle Workspaceで共有しています。

もちろんそれだけでは人と人のコミュニケーションは上手くいかず、意思疎通で齟齬が起きたり、非効率であったり、あるいは関係が希薄になりがちですから、Web会議での定例やオフィスでのミーティングなどを各プロジェクトで方針を決めて行っています。またオフィスやホテルに集まるイベントなども年に何度か開催しています。

Everforthでは設立以来このようなオンラインとオフラインを組み合わせた自由な働き方をして、それを前提とした開発プロセスを採用していましたから、2020年に世の中の状況が変わった際にも皆の働き方が大きく変化することはありませんでした。

2. 自由の中にも規律を作って成果を出す

Everforthは作ることが好きなエンジニアたちが自由に働く会社です。しかしながら、好きなことだけやって好き勝手に作っていても上手くはいきません。会社として成り立たせるためにはエンジニアたちが連携して、ビジネス的な成果を出すことが求められます。そのためにはある程度の規律や基盤が必要となるのです。

そのためにEverforthが10年前に設立した時点で採用した方針は、頭抜けた技術力を持つCTOが開発の中心として立ち、それを周りのメンバーがサポートするような開発体制を採ることでした。この時に開発を始めたプラットフォーム「Prefer Cloud Platform」は、当時の開発体制をそのまま反映したアーキテクチャとなっており、中核に「Engine」と呼ばれるデータストアやロジックコンポーネント群があり、それを周りのサービスコンポーネントがAPI経由で利用する形となっています。

このEngineのアーキテクチャは当時の組織にとてもよくマッチし、CTOがEngineの開発を担うことで中核となる機能の品質・性能を担保し、他の開発メンバーはEngineを信頼することで、ビジネスに特化したサービスの開発に注力することができました。

3. 時代と共に変化する ビジネスや体制に合わせた基盤作り

一方で、この10年の間にEverforthのビジネスは変化し続けました。最初はblogやCMSなどから小さくスタートしましたが、次第にビジネスの範囲は大きくなり、ECサイト基盤、マーケティングやデータ分析など、多様な機能が求められるようになりました。また、コンピューティングも進歩し、システムを稼働させるインフラはオンプレミス中心からクラウド中心、マネージドサービス中心に移行していった時期でもあります。 そしてもちろん、Everforthの組織や働き方に共感して一緒に働く仲間も増え、様々な個性を持つエンジニアが増えました。

そのように時と共にビジネス・インフラ・開発チームが大きく変化する中で、Prefer Cloud Platformに求められる形も変化するようになりました。Engineを中心において大規模なシステムを開発するだけでなく、小規模なシステムをより少ない人数で開発する機会も増えてきたほか、ビジネスドメインの観点からもEngineを使うことが最適とは言えない案件も増えてきました。

そうすると中央集権的な開発体制よりも、新しく増えたメンバー達が自律的に動きながら協調するような開発体制に変わっていく必要があります。ちょうど、モノリシックなアーキテクチャからマイクロサービスなアーキテクチャへの移り変わりのような移行が求められているのです。

そして、それぞれのメンバーが、自分の価値を最大限に発揮できる言語やフレームワークで開発する、しかしながらそれぞれが好き勝手に開発するのではなく、一定の開発方法論を共有することで効率的に開発できるようになる。そのような開発方法論を目指してEverforthでは新しいプラットフォーム作りの検討を始めています。

つまり組織が変わり続ける限り、その組織が開発するプラットフォームも同じように変わり続けるのです。

4. 優れた集団知性による 新しいプラットフォーム開発へ

ここまでで述べたように、10年前と現在では、ビジネスの規模や求められるスピードが違います。また、選択できる技術の幅や、採用を含めた体制なども変化しています。そのような状況の変化に対して個別に対応するだけではなく、組織・アーキテクチャ・ビジネスの全体を俯瞰して見ることで、最適な方針を探し続けています。もちろん現時点でベストだと思った方針が数年後にはベストでなくなる可能性も十分にあります。

次章でも述べられますが、Everforthにおいては全てのことが「継続的な変化」と「適応」が前提とされます。これはテクノロジーにおいても同様です。

「変化」に適応するだけではなく、どのように変化するかも含めて、ただトップダウンで決めるのではなく、エンジニア一人ひとりが自律的に考え抜き、その意見をぶつけ合うことで、集合としての判断は良いものになるであろうということを信じています。

皆で最適な方針を探し続け、それに沿ったプラットフォームを構築することは、それそのものが抜群に面白いチャレンジだと考えています。集団浅慮にならない、優れた集団知性により新しいものを生み出すチャレンジを楽しめることをEverforthはエンジニアに求めています。