/note/tech

「最悪のソフトウェアはマネージメントの問題」、よいソフトウェアを作る方法を政府のソフト開発を行う技術者が語る

Hongyiさんは、ひどいソフトウェア開発の問題点を一文で「プロジェクトオーナーが解決すべき問題を明確にすることなく解決策としてのソフトウェア構築をスタートさせ、関係者からの長い要望リストを、フルスクラッチで開発を行おうとする外部の開発チームに委託すること」とまとめています。

一方で優れたソフトウェア開発は、まず解決したい問題を明確にすることから始まります。問題を明確にすることで考えられる解決策をテストし、適切なアプローチを行うことが可能になるためです。そして、現代では多数のオープンソースコミュニティが存在することから、フルスクラッチでソフトウェアを作ろうとするのではなく、既存のコードをうまく利用することが大切になります。というのも、エンジニアたちの時間が既存技術の再構築に取られていては、技術の進歩を遂げることができないため。日常的なエンジニアリングをできるだけ自動化し、再利用に適したシステムを識別して、必要に合わせてそれをカスタマイズすることが大切だとHongyiさんは述べています。

ソフトウェア開発にとって重要なのは、このような「知識」の蓄積です。あるソフトウェアのコードを別の開発チームが引き継ぐと、ソフトウェアの質が目に見えて落ち出すことがよくありますが、これはソフトウェアになじみのない開発チームが問題に対して間に合わせの修正を繰り返すため。間に合わせの追加コードが新たなバグを生み出し、ユーザーインターフェースが混乱し、最終的にはシステム全体が複雑になってしまうのだとのこと。これが、コアソフトウェアの開発を外部に委託することが難しい理由です。

◆1:できるだけシンプルに始める

よいソフトウェアを作るのに大切なことは、まず、最もシンプルな解決策から始めるということ。FacebookやWeChatといった多機能アプリも、最初は特定の機能に絞って始まり、人気が増すとともに徐々に機能を増やしていきました。ソフトウェアプロジェクトは「規模が小さすぎてつぶれる」ということはなく、「規模が大きすぎてつぶれる」ことがほとんどです。

◆2:問題を探し出すこと

論文を書く時に草稿が必要なように、いいソフトウェアを作るにはまず、「ベースとなる悪いソフトウェア」を作る必要があります。そして、そこから、問題の根源を正しく理解することが必要。例えば、政府主導の駐車券アプリである「Parking.sg」のプロジェクトが始まった当初、開発チームは解決すべき課題を「警察官が紙の駐車券をわずらわしく感じていること」だと考えていましたが、実際に現場の人々と話すと、そのような問題は存在しないことが判明しました。1つの対話によってその後数カ月の無駄な労力が節約され、「ドライバーを支援するプロジェクト」に集中することができたとのこと。

◆3:できる限り最高のエンジニアを採用する

優れたエンジニアは再利用できるソフトウェアをしっかりと把握し、フルスクラッチで構築する必要がある部分を最小限に抑えることができます。また、日常的なタスクを自動化し、他のエンジニアが理解しやすいシステムを構築することが可能です。これによって周囲の人間が迅速かつ確実に作業を行うことができるようになるので、時間的な余裕が生まれ、エンジニアたちが創造的な問題解決に集中することができるようになります。