DIVX テックブログ

catch-img

DIVXのいち開発グループが行なっている生産性向上の取り組み


目次[非表示]

  1. 1.はじめに
  2. 2.生産性向上とは?
  3. 3.DIVXのいち開発グループが行なっている生産性向上の取り組み
    1. 3.1.目的と背景
    2. 3.2.生産性向上の取り組みの詳細
      1. 3.2.1.ルール
      2. 3.2.2.評価手法
      3. 3.2.3.実施した施策の一例
    3. 3.3.まとめ
  4. 4.さいごに
  5. 5.お悩みご相談ください

はじめに

こんにちは。DIVXのいち開発グループの組織マネジメントを担当している矢田です。
今回は、「DIVXのいち開発グループが行なっている生産性向上の取り組み」ということで、私が組織マネジメントをしている開発グループ(合計13名。3チーム)で行っている生産性向上の取り組みについて話をします。(以降、この開発グループを「開発グループA」とします)
みなさんは生産性高く日々の業務に取り組めているでしょうか?
「いや、生産性ってなんだよ!生産性が高くなるとなんか良いことあんのか?」みたいに、憤慨しすぎて体温が上昇し続けた結果、部屋がサウナ状態になっているなんてこともあるかもしれませんが、「生産性を高めること」は業務を行う上で非常に大切な事柄です。
今回は「生産性向上」の大切さに触れつつ、開発グループAが行なっている生産性向上の取り組みについて話をしていこうと思います。

生産性向上とは?

それでは「生産性向上とは?」という話からしていきましょう。
その前に、そもそもの「生産性」を理解いただいた方が良いと思いますので、ChatGPTに説明していただきました。
えー、生産性とはなんですか?
答えが出ました。

生産性(せいさんせい、英: Productivity)とは、投入した資源に対して得られた成果の比率を示す概念です。一般的には、効率性を測る尺度として用いられます。例えば、労働生産性は労働者が一定の時間内にどれだけの成果(製品やサービス)を生み出せるかを示します。

生産性は以下のように分類できます:

  1. 労働生産性: 労働投入量あたりの生産量(通常はGDPの一部)を示します。例えば、1人当たりの生産物の数量や、1時間当たりの生産物の価値が該当します。

  2. 資本生産性: 資本(機械、設備、建物などの投資)の投入量あたりの生産量を示します。

  3. 総要素生産性(Total Factor Productivity, TFP): 労働や資本だけでなく、技術革新や管理効率など他の要素も考慮した生産性の指標です。

生産性の向上は、企業や経済全体にとって非常に重要です。生産性が高ければ、同じリソースでより多くの製品やサービスを生み出すことができ、その結果として利益や生活水準の向上が期待できます。生産性向上のための戦略には、新技術の導入、従業員の教育訓練、業務プロセスの改善、安全で効率的な労働環境の整備などがあります。

つまり、そういうことです。
すみません。生産性向上について私自身が説明しようと思ったんですが、生産性向上の説明もChatGPTに取られてしまいました。さすがですとしか言いようがないですね。
念のため、生産性の定義が記載されているサイトのURLを載せます。
https://www.jpc-net.jp/movement/productivity.html
話を戻して、大体の概要はChatGPTに説明していただいたのでもう理解している方はいるかと思いますが、生産性向上の具体的な例として、全く同じ能力のエンジニアのAさんとBさんが全く同じタスクに取り掛かるとき、Aさんは生産性を向上させる取り組みをしたため生産性が高い状態でタスクを行い、逆にBさんは特に何も工夫をしなかったため生産性は低い状態でタスクを行いました。結果、Aさんは1日の中でタスクを完了させて次のタスクも完了させて定時で帰宅できたのに対して、Bさんは1日中最初のタスクに取り掛かって残業もしてタスク完了に至りませんでした。
つまり、生産性向上をさせて生産性高い人は、超気持ち良くスマートに仕事ができるということです。

DIVXのいち開発グループが行なっている生産性向上の取り組み

それでは開発グループAが行なっている生産性向上の取り組みについて話をします。
ズバリ「会議の時間を短縮させる」です。厳密にお伝えすると、「不必要な同期コミュニケーションの時間をなくす」です。DIVXワークルールには「チャットやメール等非同期通信によるコミュニケーションを主体としている。」がありますので、このワークルールを守ることで発生しなくなる同期コミュニケーションは考慮せず、それ以外のメインの同期コミュニケーションとなる会議を対象としています。

目的と背景

「なぜこの取り組みを行うことに決めたのか」の前に、「開発グループAが行なっている生産性向上の取り組み」の目的を説明します。
「開発グループAが行なっている生産性向上の取り組み」の目的は「フロー状態で業務に取り組む時間を増やす」です。
みなさん、フロー状態ってご存知ですか?ここでいうフロー状態とは、他のことをすべて忘れてしまう領域に入ったような状態のことです。『黒子のバスケ』で言う「ゾーン」、『ブルーロック』で言う「フロー(FLOW)」。具体的な例で言うと、「やっべ、MTGあること忘れてた!!」となってしまう状態です。
今やっていることに完全に没頭して、時間が経つのを忘れる。目の前の作業に無理なく集中できる感覚が解放され、結果としてエネルギーに満ちた状態で業務に取り組むことができる。
全集中。
開発グループAでは、このフロー状態こそが生産性向上のカギだと考え、フロー状態の時間を増やすことを目的とした取り組みをしようと決めました。
話を戻して、なぜ「会議の時間を短縮させる(不必要な同期コミュニケーションの時間をなくす)」取り組みを行うことに決めたのか。
単純明快、同期コミュニケーションを行っている間はフロー状態になることが困難だからです。中には、いやいや余裕だろ!私なんていつもフロー状態ですよー!という方がいるかもですが、かなり特殊な能力を持った方なんじゃないかなと個人的には思います。
あとは、同期コミュニケーションだけじゃなくて、緊急対応を伴うチャットやメールのやり取りなど非同期コミュニケーションでもフロー状態が解消される可能性があるから同期コミュニケーションだけ対象にするのは違うんじゃないの?と思う方もいるかもしれませんが、そもそもフロー状態が解消される話とは別軸で、同期コミュニケーションを行っている間はフロー状態になることすらできないので、優先度を高くして、まずは不必要な同期コミュニケーションは無くそうぜということです。
では「不必要な同期コミュニケーション」ってなんでしょうか?
冒頭でもお伝えした通り、対象となる同期コミュニケーションは会議ですので、「非同期コミュニケーションでも同じ結果をもたらす内容を会議で伝える・伝えるために会議を開いて話す」です。
身体言語などの非言語コミュニケーションではより深い理解や信頼関係を築くことが可能となりますので、そういう目的があると認識統一できている場合は良いと思いますが、そうでない場合は「非同期コミュニケーションでも問題ない」となるわけです。
「それチャットで良くない?」と言われたらアウトです。

生産性向上の取り組みの詳細

それでは、開発グループAが行なっている生産性向上の取り組みが「会議の時間を短縮させる(不必要な同期コミュニケーションの時間をなくす)」に決定した背景が伝わったかと思いますので、具体的なルールや内容を話します。

ルール

まずは大前提。当然ではありますが、アウトプットに支障が出ないようにすることがマストです。
例えば、「よし!メンバーとの信頼関係は構築できてるしチャットのみの会話でも良さそうだから今行っている会議全てなくそう!」と判断した結果、「メンバーの認識が誤ったままタスクが進み、要件とは全く異なった機能ができあがってしまい、顧客からクレームを貰う」という事象が発生すると本末転倒です。
上司激おこ。
その会議が必要かどうかを正確に判断することが重要ですし、仮に全てなくすとしても、アウトプットに支障が出ない仕組みを構築する必要があります。
この大前提がありつつ、ルールを4つ紹介します。
1つ目。この取り組みは開発グループAが行っていることなので、「対象となる会議は、自分達がコントロールできる会議のみ」
2つ目。施策を行ったことによって会議の時間が減少したのかを定期的に確認してPDCAサイクルを回したいので「試作前後のデータを比較して結果を評価する」
3つ目。会議の時間は評価の指標となりますので、「会議(5分以上の口頭相談含む)を実施した場合は全てGoogleカレンダーに記録する」
4つ目。各チームが持っているプロジェクトで特色が異なりますので、施策を開発グループAで統一するのではなく、「ルールを基に会議の時間を短縮させるための施策を検討して開発グループA内の開発チーム各々で実施する」

評価手法

2つ目のルールで提示した評価手法ですが、以下の通りです。

  1. 予め用意したスプレッドシート(対象社員情報記載)内で以下のGASを実行して、対象期間の会議内容と時間を全てスプレッドシートに表示する(以下は4月1日〜6月30日を対象期間とした場合のGAS)

function listAllMemberEventsModified() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const infoSheet = spreadsheet.getSheetByName('社員情報');
  const outputSheetName = '社員イベント詳細出力';
  let outputSheet = spreadsheet.getSheetByName(outputSheetName);


  //出力先シート準備(同名シートがある場合、削除してから作成)
  if (outputSheet) {
    spreadsheet.deleteSheet(outputSheet);
  }
  outputSheet = spreadsheet.insertSheet(outputSheetName);
  outputSheet.appendRow(['予定(イベント)のID', '社員名', '予定の名前', '開始時刻', '終了時刻', '主催者のメールアドレス', 'その他参加者のメールアドレス', '会議時間(分)']);


  //社員情報のシートからカレンダーIDと社員名の対応関係を取得
  const memberData = infoSheet.getRange(2, 1, infoSheet.getLastRow() - 1, 2).getValues(); 
  const memberIds = memberData.map(row => row[0]);

 
  //対象期間
  const startdate = new Date('2024/04/01 00:00:00'); 
  const enddate = new Date('2024/06/30 23:59:59'); 


  //各社員の対象期間内の予定を出力 
  memberData.forEach(row => { 
    const [calendarId, memberName] = row;
    const calendar = CalendarApp.getCalendarById(calendarId);
    const events = calendar.getEvents(startdate, enddate); 
    let beforeEvent = null; 


    events.forEach(event => { 
      const eventId = event.getId();
      const attendees = event.getGuestList();
      const organizer = event.getCreators().join();


      attendees.forEach(attendee => {
        //終日予定と対象メンバーのメールアドレス以外を除外
        if ((organizer == calendarId || attendee.getEmail() == calendarId) && event.isAllDayEvent() == false && memberIds.includes(organizer)) {
          const participantEmail = attendee.getEmail();
          const startTime = event.getStartTime();
          const endTime = event.getEndTime();
          const startTimeSecond = startTime.getTime()
          const endTimeSecond = endTime.getTime()
          const diff = Math.abs(endTimeSecond - startTimeSecond);
          const diff_minutes = diff / 1000 / 60;


          //重複した予定を除外
          if (beforeEvent !== eventId) {
            //新しいシートにイベント情報を追加
            outputSheet.appendRow([
              eventId,
              memberName,
              event.getTitle(),
              startTime,
              endTime,
              organizer,
              participantEmail,
              diff_minutes
            ]);
            beforeEvent = eventId;
          }
        }
      });
    });
  });
}

  1. 表示された会議のうち、対象外の会議がないか等を確認して整理する
  2. 対象の会議の情報を用いて、施策実施前後それぞれの「会議合計時間」「1日あたりの会議時間」と「施策実施前後の変化率」を算出する

実施した施策の一例

4つ目のルールで提示した施策についてですが、実際に行っている施策の内、代表的なものを数個ピックアップします。

  • スクラム開発で言う「デイリースクラム」や「スプリントプランニング」のような、案件内の方針で確実に必要な会議は開催して、それ以外の会議は開催せず、チャットツールでやりとりを行う。
  • 開催した会議はダラダラと進行しないように、議題のすり合わせや会議資料の読み込みを事前に行う。

まとめ

以上、開発グループAが行なっている生産性向上の取り組み、「会議の時間を短縮させる(不必要な同期コミュニケーションの時間をなくす)」について説明しました。
生産性が向上することで開発グループA全員が気持ちよく働けるようになると思いますので、施策の結果の確認や随時改善を試みつつ、取り組みを継続しようと思います。成果が出た施策があれば、他の開発グループに浸透させられると良いなと思います。

さいごに

今回は、「DIVXのいち開発グループが行なっている生産性向上の取り組み」について話をしました。今回の記事が皆様の生産性向上につながれば幸いです。

お悩みご相談ください

  ご相談フォーム | 株式会社divx(ディブエックス) DIVXのご相談フォームページです。 株式会社divx(ディブエックス)



お気軽にご相談ください


ご不明な点はお気軽に
お問い合わせください

サービス資料や
お役立ち資料はこちら

DIVXメディアカテゴリー

テックブログ タグ一覧

採用ブログ タグ一覧

人気記事ランキング

GoTopイメージ