生産性向上のマインド形成をうながす
こんにちは。ns-writerです。
今日は生産性向上について書いてみたいと思います。
みなさんが、「生産性向上」といって思い浮かべるのはどういうものでしょうか。
アジャイル開発やRUP等の開発プロセスの話かもしれません。またはPSP、TSP等の個人スキル形成、チーム形成の仕組みかもしれません。
今回は、マネジメント側の観点を極力減らして、エンジニアの実作業的なところで生産性向上について考えてみたいと思います。
今回の対象読者を、20代後半に差し掛かったJava開発に携わるエンジニアとします。
わたしの職場環境を見ていて思ったのは、この時期のエンジニアは顧客納期の大切さに気づくと同時にそのことに追われ、生産性に最初の壁を感じる人が多かったのです。
そして、忙しいと「仕事はこういうもんだ」。そういうマインドに陥りがちです。
この頃に毎日遅くまで残業をした経験のある人も、少なからずいると思います。
上記のようなエンジニアの実作業、つまり詳細設計・実装作業における生産性について考えてみたいと思います。
このフェーズについてわたしが思う生産性向上のポイントはずばり、
『各自に実装部分を分担し、実装を共有せずに各自の裁量で回してもらう』
ということです。
「当たり前だ」と思える人もいるでしょうし、「XPでは共有するんだけどな」と思える人もいるかもしれません。
要点は2つです。
- 実装者に、やらされるより、やっているというマインドを持ってもらう
- 各自に責任を持って作業を遂行してもらう
実装フェーズについては、この2つのマインドが大きく生産性に影響してきます。
このマインド形成には前準備が必要です。詳細設計のモデリングです。
上記マインドを持ってもらうには、各実装者に「simpleに」作業を任せる必要があります。つまり、詳細設計のモデリング時にどこまでsimpleにモジュールを分ける設計をしているか、ということが重要となります。つまり、「疎結合設計」です。
Java(にかかわらずオブジェクト指向言語)で疎結合な設計を実現するには、アーキテクチャを確立させることが必要です。つまり、アプリケーションとして業務に関係のない部分は基幹アーキテクチャとして早期に決定し、業務依存の部分を疎結合なコンポーネントとして切り出す設計にしておくことです。
Webアプリケーションについての基幹アーキテクチャについては、以下のような考え方を利用して設計していきます。
- 3層構造(プレゼンテーション層、ビジネスロジック層、インテグレーション層)として役割やアクセス対象に関して分離する考え方
- ソフトウェアフレームワークの導入(プレゼンテーション層にstruts等のMVCフレームワークを利用、インテグレーション層のDBアクセスにはhibernateなどのO/Rマッパーを導入、3層の結合部分の疎結合化にspring等のDIコンテナを利用するなど)
- デザインパターンの検討など(いわゆるGoF本やJ2EEパターン、エンタープライズアーキテクチャパターンなどの書籍が有用です)
業務依存コンポーネントの設計はいわゆるコンポーネント指向の考え方を導入します。
- 業務ごとにパッケージを分け、コンポーネントを作成します。各コンポーネントにはインタフェースを介してしかアクセスさせないという規約を作る
こうして切り分けることで、疎結合なコンポーネントを設計し、コンポーネント単位に実装者に任せていくことになります。疎結合なので、分散開発時にコンフリクトが少なくなり、スムーズに開発が進んでいくことが可能になります。
これでも、各コンポーネントの接点となるインタフェース部分ではコンフリクトが起こりやすいです。インタフェースは安易に変更しないのがベストですが、変更が発生する場合は、インタフェースの管理をできるだけ少数人にまとめて集中管理させることで、問題が起こりにくくなるでしょう。
コンポーネント化によって、各インタフェースに対する品質を個人に担保させることが可能になります。結合テスト時に責任関係が明確になって、問題の発見・修正に役立ちます。
以上のことを実践することで、個人の裁量で責任を持って作業を遂行することが可能になります。プロジェクトへの所属意識も強くなり、やりがいに一役買うことになるでしょう。なによりそのマインドが、生産性向上の一因となるとわたしは信じてやみません。
本日は、生産性向上のための(主に実装者の)マインド向上へのアイディアとそれを実現させるための設計思想について書いてまいりました。
「納期を守る」というのは、その一言だけでエンジニアにプレッシャーをかける大きなものです。
そのためには無駄な残業をしないこと。スケジュールどおりに進めばこれほど幸せなことはありません。現実的には夢物語と思えそうです。しかし、政治的な問題は抜きにして、目の前の課題に対して工夫して積極的に向き合うことは、何よりも大切なことである、と思う今日このごろです。
今日はここまで。次回も楽しみにしていけたら幸いです。