ソフトウェア開発全般の生産性向上を目指して、スローガンを掲げます。
(アジャイル開発、計画駆動開発、DevOps、などの手法に関わらず)
■ 部分ではなく全体を俯瞰
■ 対処型から予測型へ
■ 暗黙知の活用と人/AIとの協働
■ 長時間残業から知的労働へ
部分ではなく全体を俯瞰する
いわゆる部分最適化ではなく、全体最適化を目指します。
プログラマという職業、システムエンジニアという職業は専門家しやすく、部分最適化しがちなところです。
いえ、むしろ専門家として自らのパフォーマンスを最大にアップするものは、当人にとって部分最適化された状態かもしれません。
しかし、システム開発においては、複数名でプロジェクトを組むことが多く、部分的なパフォーマンスの最低化よりも全体のパフォーマンスを上げることが求められます。
専門職としてのパフォーマンス活かしつつ、全体のパフォーマンスを底上げするソフトウェアエンジニアを私達は求めています。
対処型から予測型へ
ソフトウェア開発においては、トップダウン型のWBS(Work Breakdown Structure)をベースにした計画駆動(ウォーターフォール型)の開発と、ボトムアップ型のアジャイル開発の両方が存在します。
一時期のアジャイル開発の興隆から、昨今は設計書をもとにした計画駆動開発が見直されつつあります。
しかし、どちらの開発手法が優れているかは一概には言えません。
開発プロジェクトのメンバーの特性や、会社の文化、プロジェクトが求める成果物の特性などを考え合わせる必要があります。
ただし、ひとつ言えることは、ソフトウェア開発というものが未知のものに溢れているからこそ、なにかの問題に対して対処療法的に対応していくよりも、問題を予測して対応していくことが重要であるということです。
計画駆動ではリスク管理を綿密に行うことでしょう。アジャイル開発では、スプリントやチケットなどを使い直近の問題を予測して対応していくことでしょう。
私達は予知することはできませんが、過去の豊富な経験や知識を活用することで将来的な問題を予測し、それに対応していくことができます。
暗黙知の活用と人/AIとの協働
ナレッジマネジメント・システムが流行ったときには、ナレッジを明示化することが重要視されました。
しかし、ナレッジを文書化することに注力するあまり、本来の目的であるナレッジを浸透させることが疎かになっていました。
システムを使って知識を文書として残すことは重要ですが、それだけでは十分ではありません。
人と人とのコミュニケーションを通じて、本来活用するべきナレッジ=暗黙知を活用することが大切です。
SECIモデル(Socialization, Externalization, Combination, Internalization)を活用し、ナレッジを共有し、継続的に学習します。
近年ではAIを活用して、ナレッジを共有することも可能になりました。新しいAIとの協働が求められています。
長時間残業から知的労働への変換
ソフトウェア開発は、知的労働であり、長時間の残業をしても生産性があがるものではありません。
さらに言えば、長時間の労働を強いたからといってソフトウェアが完成されるわけではないという面を持っています。
現実的な問題として限られた予算・限られたスケジュールの中で、ソフトウェアを開発することが求められます。
生産性を上げることももちろんですが、その前にで完成したプロダクトに達することを目指しましょう。
そのやる気・労働・時間を完成させるために効率よく使いましょう。そのためのノウハウはすでにソフトウェア開発の歴史にあります。
チケット駆動、テスト駆動、PSP、ピアレビュー、40時間勤務、プロジェクトバッファなどを活用して目標を達成します。