@ledsun blog

無味の味は佳境に入らざればすなわち知れず

ソフトウェア開発のリーダーが持つ三つの責務

ソフトウェア開発のリーダーが持つ三つの責務を以下に定義する。

  • 技術
  • タスク管理
  • 教育

技術

開発中に出てきた技術的な課題を解決する必要がある。マネージャーならできる人に任せてもいいけど、リーダーなら自分で解決しないとね。そのためには、日頃から未知の課題を解決するためのアンテナを鍛えておく必要がある。さらに、進捗が遅れた時は伝家の宝刀を振り回す*1必要がある。そのためには、直近の仕事で使わない技術も素振って*2おいていつでも使えるようにしておく必要がある。

タスク管理

メンバーはタスクを振らないと仕事しない。メンバーにタスクを振って進捗を上げつつ、リーダーは残タスクを把握しておく。タスクに抜けがあると開発が完遂できない。また遅れを検知して対応する必要がある。技術的に難しすぎたり、作業量が多すぎたり、メンバーの力量を超えるタスクだった場合は伝家の宝刀を振る必要がある。また、メンバーの能力によっては与えられた仕事を実行可能なタスク*3に分割できないことがある。その場合は手取り足取りタスク分割してあげる必要がある。実際にはメソッドをどう分けるかとか、C#で対応するかSQLで対応するか判断したり、必要なテーブルを考えたり、ようするに設計をする。アジャイルだと設計フェーズがなくて設計だけを教えることはできないので、一緒にやりながら教える。

教育

やってはいけないことをやらせないのはリーダーの責務。糞みたいなプログラムを書かないようにさせる、書いたら糞な部分を書きなおさせる。動いたプログラムの仕様が足りてるか検証させる。言われたこと、正常系以外は考えずに開発している。準正常の動き、ユーザが変な操作をしたらどうなるかを想定していない。これを確認するには機能仕様書を書かせる。漏れがあったら直させる。この手の準正常系動作の考慮漏れは、その後の結合試験ですべて検知することは不可能、リリース後にバグが出続けて保守フェーズで赤字になる。これを防ぐには全ソースをレビューするか、準正常を想定したプログラムを書かせるしかない。

*1:メンバーからタスクを奪い取って自分で消化すること。

*2:技術資料を読むだけではなく動かしてみる。いざやることになった時に最初の一歩の速度が違う。

*3:見積もり時間が2時間以下で、今すぐ着手できるタスク