自由課題

学んだり、考えたり、試したりしたこと。

我々はいかにして不確実な環境下で成果を出すのか: 書籍レビュー"エンジニアリング組織論への招待"

まえがき

少し前は業務外でもコードを書いたり、某サイトに翻訳記事を提供したりしていたのだけれど、公私ともにばたついていることもありしばらくアウトプットができずにいました。それでも書籍は時間を見つけて読んではいるので、気軽なアウトプットの形態として書籍レビューを書いてみてはどうかと思いたちました。

本書の位置づけ

本書は、(ソフトウェア)開発、もしくは開発を遂行する組織に関する様々な課題、及びその解決策を、「不確実性に向き合う」という観点を通して列挙した書籍です。

従って、入社すぐの新人のソフトウェアエンジニアよりは、少なくともプロジェクトを1つまたはいくつか経験し、
「いかにきれいなプログラムを書くのか、ということが唯一絶対の課題ではない
ということを実感したあとに読むのが良さそうに思います。

また、本書では(設計・プログラミングといった)具体的ソフトウェア作成手法よりも、上流工程も含めてソフトウェア開発という行為が本質的にどのような問題を含んでいるのか、これらの問題を踏まえてソフトウェア開発行為そのものをどう設計・改善するかということの説明に力点が置かれています。

(一応補足しておくと、「いかにきれいなプログラムを書くのか」ということは、「きれい」が何を意味するのかということも含めソフトウェアエンジニアとして真っ先に考えるべき事項であり、もちろん軽視すべきではありません)

本書の概要

本書は5つのChapterから構成されています。

"Chapter 1 思考のリファクタリング"では、そもそも不確実性やエンジニアリングとは何か、これらに関連する人間の認知・思考パターンが紹介されています。

本書によると、

エンジニアリングとは、つまるところ、「実現」していくための科学分野

であり、この「実現」の過程で効率よく

「曖昧さ」を減らし、「具体性・明確さ」を増やす行為

を行うことが求められます。

エンジニアリングとの関係を抜きにすると、この章の内容は経験主義・仮説思考・システム思考・ベーコンのイドラといった、哲学・心理学や意思決定の方法論をはじめとした一般のビジネス書でもカバーされている範囲の事柄も多いです。

Chapter 1 における「人間(自分)の認知・思考」に関する解説に続き、これを踏まえて、"Chapter 2 メンタリングの技術"で、コードレビューやペアプログラミングといった場面での開発チームのメンバー、つまり他者との接しかたについて触れています。メンタリングのゴールとして、効率よく成果を上げるためにチームメンバーが「自ら考える人材」となることが挙げられています。コーチングの内容を多分に含まれているのではないでしょうか。

これに続き、「自ら考える人材」から構成される「自己組織化」された開発チーム("Chapter 3 アジャイルなチームの原理")や、このような開発チームのタスク・スケジュール等の管理("Chapter 4 学習するチームと不確実性マネジメント")が解説されています。いわゆるアジャイルとかスクラムの解説ですね。

最期の章である"Chapter 5 技術組織の力学とアーキテクチャ"では、開発チームを含む複数の部門からなる組織の設計・運営の方法論を「生産性」を軸に解説しています。この章では、不確実な状況においては、単に決められた成果物を効率よく作成する能力(「労働生産性」)ではなく、不完全な情報しかない中でいかに効率よく仮説検証を繰り返せるかという能力(組織としての「情報処理能力」)が重要であるとしています。また、OKRといった目標管理の手法や技術的負債に関する解説もこの章で行われています。

感想

様々なソフトウェア開発ツール・環境が以前とは比較にならないほど低コストで入手できる時代になり、ソフトウェアを実装するためのハードルは下がってきている現状を踏まえると、決められた内容のソフトウェアを「どう実装するか」というのと同等以上に、「どんなソフトウェア/システムが価値を持つのか」を見定めるために不確実な状況下で試行を繰り返し、価値規準の変化に合わせてソフトウェアを進化させていくことが重要になっていると思います。

本書はこのような観点から現代のソフトウェア開発に必要な考え方・概念が幅広く列挙されており、少し各内容間のつながりがわかりにくい点があるものの、必要に応じて関連書籍を読み進める出発点となる、総合カタログ的な使い方ができるのではないかと思います。例えば以下のような単語について、ちょっと気になっていた(/なった)のであればまとめて概要を理解することができるでしょう。

また、個人的には技術的負債に関してそれなりの紙面を割いて議論している点が興味深かったです。ここまで詳細に対応方法も含めて書いてある書籍は読んだことがありませんでした。

あと、コンウェイの法則やマイクロサービスに関しても触れてあり、以前苦労してマイクロサービスに関するマーティン・ファウラーのブログ記事を翻訳したことを思い出しました。もう4年近く前か...懐かしい。

関連書籍

電子版で読んだせいかわかりませんが、参考文献が書籍内にきちんとまとまっていなかったので、知っている範囲で列挙しておきます。何か参考になれば。

仮説思考・システム思考など

学習する組織 ― システム思考で未来を創造する

学習する組織 ― システム思考で未来を創造する

戦略思考コンプリートブック

戦略思考コンプリートブック

アジャイルスクラム・リーンなど

アジャイルサムライ――達人開発者への道

アジャイルサムライ――達人開発者への道

これだけ! KPT 【これだけ!シリーズ】

これだけ! KPT 【これだけ!シリーズ】

トヨタ生産方式

トヨタ生産方式

カンバン: ソフトウェア開発の変革

カンバン: ソフトウェア開発の変革

組織設計・運営など

サーバントリーダーシップ

サーバントリーダーシップ

組織パターン

組織パターン

エリック・エヴァンスのドメイン駆動設計

エリック・エヴァンスのドメイン駆動設計