「ソフトウェアアーキテクトのための意思決定術」((Perera, (2024)) に以下の記述があります。
ソフトウェアアーキテクトは、指揮官のように振る舞うのではなく、庭師のように振る舞うべきだと言われている。前者が定義し指示を与えるのに対し、後者は形を整え、選別し、雑草を取り除く。(Perera, (2024), p.257)
何となく言いたいことはわからないでもないですが、庭師の仕事に対する解像度が低いためモヤモヤが残ります。そこで最寄りの大型書店に足を運び、園芸コーナーから庭師の仕事がわかるような書籍を探してきました。「ビジュアル版 庭師の知恵袋」(日本造園組合連合会, (2008)) です。2021年時点で47刷・24万部のロングセラーだそうです。
本書を読み解きながら、ソフトウェアアーキテクトの振る舞いについて考えていきたいと思います。
庭師の知恵袋は、はじめに道具の使い方から始まります。例えば、枝を切るために使用するハサミは4種類あり、目的によって使い分ける、というような内容です。それぞれのハサミの使い方も解説されます。また、それぞれの道具の使い方に習熟する必要がある、との言葉もあります。
ソフトウェアに置き換えると、事業やサービスの目的に照らして適切な技術選定を行うこと、選定した技術に対して習熟する必要があること、と言えるでしょうか。ソフトウェアエンジニアにとって、道具の選択肢を増やすこと、それぞれの選択肢に対する習熟度を高めることの重要性は議論を待たないでしょう。
庭木の手入れに関する一節です。枝を正常に生育していくためにはこまめに手を加えなくてはならないということ、手入れを行った場合には周囲の庭木の生育の妨げとなる・住まいとの不調和につながることが述べられています。
ここでは庭全体に対する個々の木の手入れに目を向けています。ソフトウェアに置き換えると、ソフトウェアやサービスの全体に対する個々のコンポーネントに目を向けることにつながるでしょうか。また、手入れとは保守に他ならないでしょう。そう考えると、ソフトウェア・サービス全体を調和させ、全体として成長していくためには、個々のコンポーネントを適切に保守しなくてはならない、と置き換えて考えられるでしょうか。
樹木の生理を学ぶべきであること、樹木の生理に逆らって剪定すべきではないことが述べられています。樹木の生理を知り、生育のサイクルに従って剪定することではじめて美しい樹形を実現できることが述べられています。
ソフトウェアでは、設計原則を学び、原理・原則に則ってコードを修正していくことで内部品質の高いソフトウェアを実現できる、と置き換えて考えることができるでしょうか。あるいは、ソフトウェア工学を学び、適用することと言えるかもしれません。
害虫の生態を理解した上で対策を行なっていく必要が述べられています。
ソフトウェア開発において「殺虫剤のパラドックス」というような言葉があるように、ソフトウェアの不具合を害虫と例えることは馴染みがあります。その例えに乗っかると、ソフトウェア品質保証・ソフトウェアテスト技法の理論を学び、適用していくことで高品質なソフトウェア・サービスを提供できるようになる…と言い換えられるでしょうか。
植物を植えることと育てることと手入れすることでは、それぞれ異なったコツがあると言います。
ソフトウェアで言えば…0-1 フェーズでの開発、サービスのグロース、保守運用ではそれぞれ異なったスキルセットが必要である…と言えるでしょうか。
ちょっと苦しかったかもしれません。