プログラマSEが若手中心で戦力不足なプロジェクトを回す方法

   

プログラマーSEが戦力不足なプロジェクトを成功させる方法

「今度のプロジェクトのメンバー戦力なさすぎ、絶対トラブルなるわ…」
「つうか、うちの会社って全体的にスキル低くていつも炎上してるんだが…」
「戦力不足のメンバーでもうまくやれる方法ってないかなぁ?」

ある程度経験のある人が集まって仕事をする場合、そのプロジェクトを成功させることは比較的簡単ですが、新卒で入ったばっかの人が3割、二年目が5割、10年くらいの経験者が2割みたいなメンバー構成の場合、8割のメンバーが経験2年以下のメンバーとなります。この条件でそのプロジェクトを成功させるというのは結構難しそうですよね。

ここで、「これでは戦力不足だから、もっと経験のあるメンバーを入れてください。」と言っても、会社的にも「空いてる人材が他にいない」なんてことはよくあります。大抵の場合、空いてる人の中で最も案件にマッチする人が招集されてるわけですからね。

こういう場合もなんとかして仕事を成功させなければなりません。

どうやったら成功させる可能性を上げられるか、そのためのアイデアを紹介します。できるかのアイデアを紹介します。

そもそも、戦力不足な人って、どういう人?

一言でいうと「知識や経験が少なくて、仕事を遂行する能力が低い人たち」です。

こう書くとすごく貶してるように感じられてしまうかもしれませんが、そんなつもりはありません。
仕事を始めたばかりで知識・経験・能力が低いのは当然ですからね、誰も悪くありません。

そういう人たちに仕事をうまくやってもらうには「仕事を細かく分けること」がポイントです。

仕事を細かく分ければ誰でもできる!

例えば、「あなたはSQLを書けるようになってください」という役割を与えます。SQLの文法を覚えてもらって、データベースアクセスのプログラムの書き方(トランザクションやORMの使い方など)を教えます。それで、この人にはデータベースアクセスのプログラム選任の人になってもらいます。

すると、経験の少ない人でも一つの領域だけ知識を身につけ、同じようなプログラムをいくつも書いていくだけですからうまくやれるはずです。

仕事を分けるにはモジュールも分けよ!

その為には、システムをレイヤーごとにモジュール分割することが前提となります。フレームワークを使えばMVCなどのように自然とモデル、ビュー、コントローラと処理の役割に応じたレイヤーわけがなされます。

先ほどの例を適用するのであれば、モデルレイヤーの中をビジネスロジックレイヤーとデータアクセスレイヤーに分けると良いでしょう。

それで、データベースアクセスレイヤーのプログラム開発だけに専念してもらうわけです。

機能ごとに作業分担するのとの違い

通常の開発では、作業分担は機能ごとに行うことが多いと思います。

例えば、ユーザー登録機能をAさんが担当、商品検索機能をBさんが担当みたく割り振ります。

この場合、Aさんはユーザー登録のビューである画面のHTMLやJavaScriptを書き、リクエストを処理するおkントローラーを書き、ロジックを実行するモデル、DBアクセスするデータアクセスレイヤーのプログラムを開発します。

一人で担当機能の全レイヤーを作っていくわけです。これだと、ビューを作るためにHTML/CSS/JavaScript知識が必要となりますし、コントローラーやモデルを作るのにサーバーサイドのプログラミング言語(JavaやPHP,Ruby,C#等)の知識が、データアクセスの実装にはSQLの知識がそれぞれ必要とされます。

一人に幅広いプログラミング能力が要求されるわけです。

それに対してレイヤーごとに担当を分ける方法だと、ビュー担当の人はHTML/CSS/JavaScriptだけの知識でOK、他のレイヤーもそれぞれのレイヤーで必要とされる知識だけを修得すれば良くなります。

その分、担当する機能は増えます。ビュー担当のAさんはユーザー登録機能と商品検索機能とその他多数のビューを開発することになります。担当する機能は増えますが、レイヤーが同じなので、技術スキルを使いまわせるのがポイントということです。

それに加えて、レイヤーを絞れば、覚えるべきことも少なくなるので、早く戦力へと成長できるというメリットもあります。

希少なベテランメンバーの使いどころ

一方ベテランの人たちは全レイヤーを実装する知識を持っているので、フォロー役へと回します。
新人Aさんにビューレイヤーを担当させて、ベテランCさんがフォローする(仕事のやり方や知識、ノウハウを伝承していく)ようにチーム編成すると、短期間で新人Aさんがビュー領域においてはベテランCさんのレベルに近づいて急成長することが出来るようになります。

こうすることで、ベテランぞろいのチームが機能ごとに担当を割り振るのと、若手中心のチームでレイヤーごとに担当を分けた場合の生産性の差を縮めることが出来ます。

なんでも工夫次第ですね。

実際やってみたらうまくいった

実際、このやり方(レイヤーで担当分け)で仕事をしたことがあります。と言っても、その時の私は入社三年目とかだったので、この方法を考えたわけでもなくPMの人の提案でこういうやり方になっただけなんですけどね。

そのプロジェクトのメンバーは若手中心(入社2年目比率が高い)でした。ベテランもいたのですが、そのプロジェクトで使っているプログラミング言語(Java)やオブジェクト指向に精通している人が少なかったため、大部分が初心者みたいなやばい状況でした。

この話って結構古くて2002年の話です。業務システムをWebアプリケーション化しようみたいな仕事が多くなり始めた時期で、それまで汎用機でCOBOLのプログラムを書いてたような人たちをWebアプリケーション開発のプロジェクトに押し込んでいた状況だったんです。

こんな状況なので、個々人が身につける技術を出来るだけ少なくて済むようにしようと、レイヤーわけの作業分担をしたわけです。

作業を分けすぎて、おかしなことにもなったけど…

このプロジェクト、やや過剰な作業の分け方をしていて、JavaにはValueObjectとかDTO(Data Transfer Object)っていう概念があります。DTOとかいうと、なんかたいそう立派なもののように聞こえますが、一言でいうとデータの入れ物クラスです。C言語で言う所の構造体みたいなものです。

なんとこのプロジェクトでは、データの入れ物レイヤー選任担当の人が二人もいたんです。

この人たちはデータの入れ物クラスだけをひたすらコーディングして、setXXXメソッドでセットした値がgetXXXメソッドで取得できるかというテストをしていました。

それってプログラミングと言えるか?って感じですが、それでも、入れ物クラスのコーディングという雑多な作業をその人たちがやることで他の人の作業が減るわけですから、チームに貢献できてるわけです。

「いやいや入れ物とそのテストコードまで含めて自動生成出来るわっ!!」っていうツッコミはなしねww一種の雇用創出というかクライアント企業への水増し請求じゃねーかと言う気もしますけど、まぁ10年以上も前のことですし。

ただ、このやり方でチームはとてもうまく機能したことは確かです。

まとめ

実際やってみて、本当に、HTMLだけ作る人、コントローラーだけ作る人、SQLだけ書く人、フレームワークや共通クラス作る人みたいな分け方でうまくいったので、メンバーのスキルレベルに不安がある場合は、このような細かいレイヤーごとに担当を割り振るというやり方をぜひ試してみてください。

エージェントを使った方が転職活動は楽です

東京・大阪近郊のイケてるIT企業に転職したい人には『レバテックキャリア』

 東京・大阪近郊のエンジニア経験者向け転職サービスです。

このサービスを運営しているレバレジーズという会社はシステム開発もやっているので、現場の仕事をよくわかってくれてますし、ヒカ☆ラボというIT系の勉強会なども主催していたりteratailというプログラマー専用の質問サイトを運営してて好感が持てます。求人案件もWebやスマホの面白い仕事が多いのでいいと思います。

あとホームページ見ると分かるんですが、若くて美人の担当者が多いのもナイスなんです!私の場合(たぶんあなたも)、担当者が美人だと転職活動のモチベーションめちゃ上がりますからね笑

エンジニア未経験の方や地方在住の方にはDODAというエージェントをおすすめします。

エンジニア未経験の方や地方在住の方には『DODA』

全国の求人を扱っていて、しかもITエンジニア未経験の人にも転職支援をしてくれるエージェントです。

未経験の人はサポート対象外のエージェントが多い中、DODAは未経験者を支援し転職を成功させています。未経験の方こそエージェントから職務経歴書の作り方や面接の仕方のレクチャーを受けた方がずっとうまくいきます。

フリーランスになりたい人には『ギークスジョブ』

フリーランスエンジニアになるには人脈が必要と思われがちですが、ギークスジョブに登録して希望条件を伝えれば、自分に合った案件を紹介してもらえるんですよ!思ってるより全然簡単にフリーランスってなれるもんなんです。

東京・大阪・名古屋・福岡の案件を紹介してもらえます。

 - ITエンジニア成功術 , ,