残業が多くなりがちなエンジニアの仕事。その背景には、エンジニア不足やシビアな納期への対応、タスク過多などさまざまな問題が隠れています。「残業はしたくないが仕方がない」「残業は当たり前」と捉えているエンジニアもいるかもしれません。「働き方改革」が叫ばれるなか、エンジニアの残業を減らすことは可能なのか。残業せずにタスクを終わらせることはできるのでしょうか。
今回は残業が当たり前の働き方を変え、100時間の残業をゼロにした経験を持つ田中聡さんにインタビュー。著書『ITエンジニア残業ゼロの働き方 〜現場で本当に使えた仕事効率化の法則95』の内容を踏まえ、効率的に仕事を進めるためのタイムマネジメント術を紹介します。
ITエンジニア残業ゼロの働き方 〜現場で本当に使えた仕事効率化の法則95
出版社:技術評論社 著者:田中聡
田中聡 氏
フリーランス・エンジニア、研修講師(プログラミング、データ解析、統計学) 塾講師(高校数学・物理)を経た後、エンジニアに転職。14年間の会社員生活時に中小企業の下請けプログラマーから大手企業のプロジェクトリーダーまで経験。主に大学や研究所の実験データの管理・解析・可視化のシステムを開発。会社員当時は100時間以上残業していたが、残業しない働き方を決意し、残業ゼロ・有給消化100%を実践する。
2015年にフリーランス・エンジニアとして独立し、受託開発のほか、プログラミング、データ解析・統計学の研修講師も務める。趣味はトライアスロン。
残業がプロジェクトの問題を隠してしまう
田中さんもかつては、エンジニアとして多くの残業を経験されていたそうですね。
そうですね、現在はフリーランスのエンジニアとして受託開発に携わっていますが、以前はSESとして会社勤めやプロジェクトごとの契約で仕事をしていました。 当時は月に100時間の残業が当たり前。多いときには140時間を超えることもありましたが、働いた分だけ残業代が入るので何の問題意識もなく働いていました。
当時は100時間の残業が当たり前の時代だったのですね。
同じ職場には月に200時間残業している人も…。そんなとき、仕事の効率化で知られる吉越浩一郎さんの「『残業ゼロ』の仕事力」を読んで、残業が問題であることに気づかされました。
残業のどのような点が問題なのでしょうか。
その本で最も印象的だった問題は「残業はそのプロジェクトの問題を隠してしまう」ということです。そもそもプロジェクトに問題があるために残業せざるを得ないのですが、残業が当たり前の状況では問題に気づかず、問題を意識できません。
どのような問題が隠されてしまうのですか。
プロジェクトによって異なるとは思いますが、例えば、プロジェクト自体に無理がある、人手が足りない、効率が悪いといった問題があります。無駄な会議やドキュメント、プロジェクトのやり方そのものに問題がある場合も多い印象です。
残業の問題に気づいたことが本を執筆されるきっかけになったのでしょうか。
私自身がエンジニアとして残業をしない働き方に変えたとき、それが許容されず当時の上司との関係性が悪くなったことがきっかけになっています。その会社での契約が終了して、それをきっかけにフリーランスになったのですが、周囲でも同じような課題を感じているエンジニアがたくさんいたので立場を変えたいと思いました。
エンジニアの立場をどのように変えたいと考えていますか。
日本ではエンジニアが作業員として扱われることが多く、立場はあまり高くありません。私は、エンジニアは専門家であるべきだと思っていて、エンジニアのみなさんに「作業員ではなく専門家として働きましょう」と訴えたいと思い、本著を書きました。
エンジニアの残業は当たり前ではない
残業しない働き方に変えて改善されたことはありますか。
あります。残業をしていた頃は、常に疲れていて眠い状態でしたが、残業をやめて体調が良くなり、頭もスッキリしました。その結果、生活の質が上がっただけでなく、仕事でも判断力や業務効率の向上につながりました。
残業で仕事の効率や判断力が下がっていたのですね。
残業はプロジェクトの問題点を隠してしまうだけでなく、睡眠不足や疲れが取れないなどエンジニアの生活の質を低下させ、仕事の効率や品質も低下させます。その結果、成果を十分に出せず自信を失うことも。低評価になるのを防ぐため「残業を断れない」という負のスパイラルに陥ってしまいます。
残業が定着してしまうことには、きちんとした理由があるんですね。
その根本的な原因は「残業を問題だと考えていない」こと、当事者意識と問題意識の欠如にあります。例えば働き方改革が叫ばれるなかで「残業はしないほうが良い」「するべきではない」という考えが浸透しはじめました。しかし、IT業界では「エンジニアだから残業は仕方ない」という意識が根強く、エンジニア自身も「自分たちは特殊なケースだから残業は仕方ない」と考えることが多いように感じています。
なるほど。「エンジニアだから」という前提が当事者意識や問題意識を欠如させるボトルネックになっているのですね。
そのとおりです。私はたまたま読んだ本で「残業すること自体が問題である」ことに気づかされましたが、何かそのようなきっかけがない限りは、「残業が問題だ」と気づくことはなかなか難しい。体を壊したときに初めて残業が良くないことに気づくという最悪のケースもあります。
残業をやめるための鉄則はありますか。
私が残業について最もお伝えしたいことは「時間は命だ」ということです。今日1日を生きることは、自分の1日分の寿命、命を費やすことだと私は考えています。時間というのは自分に与えられた命であり、自分の財産であり、資源なんです。だから人の自由にさせてはいけないと思っています。
例えば、運用保守系のエンジニアの場合、24時間サービスを止めるわけにはいかず、どうしても残業が必要になるケースもあると思います。
確かにそうですね。運用保守系のエンジニアの場合、トラブルの対応を迫られて「できません」とは言えませんよね。そういうイレギュラーな対応はあるかもしれませんが、日常的に残業をしなくても良い仕組みづくり、一人ひとりの長時間労働を改善する体制づくりが果たして本当にできないのか、検討してみる価値はあるのではないでしょうか。
エンジニアの場合、SIerで下請けになればなるほど条件が悪くなり、収入を確保するため「残業で稼ぐ」という発想になってしまうこともあるように思います、その場合はどうした良いのでしょうか?
私も下請けのSESとして100時間残業しても「残業代が入るからいいや」と思いながら働いていましたので、残業で稼ぐという気持ちはわかります。しかし、実際に残業をやめてみて、自分と家族の時間や心身など、残業で犠牲にしていたことが多いことに初めて気づきました。だから、もし目の前に「残業代が欲しいから残業する」という人がいたら、「いろいろなものを犠牲にしている」と声を大にして言いたいですね。
定時でタスクを終わらせるタイムマネジメント術
定時でタスクを終わらせるための時間管理について、具体的に教えてください。
「ポモドーロテクニック」と呼ばれる方法があります。限られた時間で成果をだす方法で、実行するタスクを決めて25分間集中し、5分休憩してまた集中する。25分を4回おこなうたびに20〜30分休憩というサイクルで仕事に集中します。
実践してみると25分の集中は想像しているよりも長く感じ、結構エネルギーを使います。しかし、確実に限られた時間内で成果を出せる方法です。少々ハードかもしれませんが、まずは25回を10回繰り返すところからトライしてみてはいかがでしょうか。
なるほど、仕事への集中力が高まりそうですね。
仕事への向き合い方としては、「すべてのタスクを終わらせる必要はない」と意識しておくと良いと思います。これは『ITエンジニア残業ゼロの働き方〜現場で本当に使えた仕事効率化の法則95〜』のなかでも、特に反響の大きかった内容です。
タスクに対しての考え方を変えるということでしょうか?
はい、タスクの中には自分がおこなう必要のないもの、依頼した本人すら忘れているものもあります。そのすべてを終わらせようと時間を費やすのではなく、納期が近い、自分がする必要があるなど、重要なタスクを終わらせることを優先する。タスクに優先順位をつけ、その日におこなう仕事を最初に決めて仕事を始めることをおすすめします。
優先順位の付け方のポイントはありますか。
タスクの大きさ小ささも考慮しつつ優先順位をつけるのが良いですね。なぜなら、小さい仕事は他の人に助けを求めることができますが、大きい仕事が残った場合は作業を分割できず、どうにもならない状況に陥ることもあるからです。大きい仕事は早めに終わらせることを念頭におきながら、優先順位をつけるのが失敗を回避するポイントです。
小さな仕事の方が、後で調整しやすいということですね。ちなみに緊急の仕事も優先順位が高くなりますか?
そうですね。しかし、緊急の仕事ばかりある状況は問題だと思います。緊急の仕事は、緊急ではない重要な仕事をおろそかにしていることで発生します。大切なのは、日々の重要なタスクをきちんとおこなうこと。そのためにもすべてのタスクを終わらせようとせずに優先順位をつけて、重要なタスクだけをまずは終わらせることを意識すると良いと思います。
午前中に「頭を使う仕事」を持ってくるのが基本
日々の業務を効率的に進めるために大事なことはありますか。
「自分の時間を奪うものを排除する」ことは結構大事だと思っています。例えば、スマホを机の引き出しに入れておくことは、私にとって自分の時間を奪うものを排除する有効な方法です。また、何かを探す時間も排除したいことの1つですね。机の上やパソコンのデスクトップが散らかっていると何かを探すことに時間を取られてしまうため、整理整頓は業務をスピーディーに進める上での基本です。
ほかにも時間を奪うものはありますか。
無駄な会議も時間を奪う要因になります。私の昔の同僚は上司に対して「この会議に私は必要ですか?」と問い、自分が出席しなくても良い状況を作っていました。そこまではっきり伝えるのは難しくても、作業の工数を確保するために会議出席の必要性を確認することは大切だと思います。
著書のなかで「週や月ごとに計画をきちんと立てる」ことも提案されていますが、日々の業務では作業時間が予定よりも長くなるなど、想定外のこともあると思います。そうならないために工夫していることはありますか。
おっしゃる通り、計画どおりにいかないことはよくありますよね。その際に重要なのは、仮に計画どおりにいかなくても、問題にならないようにタスクを進めていくこと。優先順位を決め、優先度の高いタスクから行っていくことが重要です。また、案件によっては難しいこともありますが、そもそもの作業計画で少し余裕を持たせておくと良いと思います。
1日の仕事の進め方については、午前中に「頭を使う仕事」を行うことを推奨されていますが、コーディングや設計は午前中にしたほうが良いのでしょうか。
コーディングの内容によって異なります。内容が単純で量が多いものは午後でも良いかもしれませんが、緻密な設計や複雑なコーディングは午前中が良いと思います。設計を間違えるといくらコーディングをがんばっても無駄になるので、集中力が高まりやすい午前中に取り組むのがおすすめです。
システム開発の現場で今すぐ使える「質問方法」
システム開発の現場で残業をしないで成果を出すポイントはありますか
まず、「調べること」と「聞くべきこと」を区別することが重要です。チームで仕事をしていると「これは自分で調べるべきか」「人に聞くべきか」で悩むこともあります。常に人に聞いてばかりいては自分のスキルも向上しませんし、相手にも嫌な顔をされかねません。逆に、調べることに時間がかかりすぎては効率が悪くなります。
質問するべきかどうかを悩んでいる時間はもったいないですよね。具体的にどうすれば良いのでしょうか。
私の場合は基準を設けています。例えば、ソースコードの「処理」といった技術的なことは自分で調べます。しかし、そのプログラムがどのような「意図」でつくられたのか判断が難しい場合は、躊躇せずに担当者に聞きます。「処理」は調べる、「意図」は聞くという区別をしているので、聞こうかどうしようか迷うこともありません。
他のメンバーに質問するときに気をつけていることはありますか。
なるべく相手がイエスかノーで答えられるように気をつけています。自分が残業をしない働き方をしていることもあり、相手の時間を奪うことは申し訳ない思いがあるからです。
質問の仕方としては、例えばシステムの意図や方針について知りたいときに「どんな意図なんですか?」と聞くのではなく、「これはこういう意図ですか」と、自分で考えた方針や意図を示し、それに対してイエス・ノーで答えやすいように質問します。自分なりの見解も合わせて伝えることで、思わぬ効果が生まれることもあるんですよ。
どのような効果ですか?
これは私自身の経験ですが、自ら考えて質問した意図や方針がそのままシステムに反映され、私自身がシステム開発の上流工程を担う立場としてなくてはならない存在に。そのシステムが顧客にも好評で、追加受注につながったことがあります。
それは有益な効果ですね。そのほかにもシステム開発で大事なことありますか。
システム開発において「こだわるべきことは何か」を理解することが大事です。エンジニアがこだわるべきは、お客様の要望や課題解決に応えることであり、そのためにシステム開発を行うのです。エンジニアが「こうしたい」と提案する場合、「こうしたい」がお客様に向いているこだわりであれば良いのですが、単に「自分はこうしたい」という内向きのこだわりでは、かえって開発を阻害する要因になります。どこに向いたこだわりなのかを見極めることは重要ですね。
エンジニアのこだわりのなかでも、改善が必要なのはどんなことですか。
「最新技術を使いたい」というエンジニアのこだわりは、プロジェクト全体に影響を与えるので注意が必要ですね。お客様の希望を形にするために必須でチーム全体が必要性を感じて導入するのなら良いのですが、「最新のものをなんとなく使いたい」という理由で最新技術を使うのは良い方向にはいきません。
コーディングの時間を短縮する「30秒ルール」
コーディングの時間を短縮する方法はありますか。
1つの関数を30秒で理解できるようにソースコードを書く「30秒ルール」があります。このルールのポイントは、自分以外のエンジニアが30秒で理解できる単位に分割することです。コードを書いている当事者の自分を基準にすると長い関数になりがちなので注意してください。
30秒にすることで全体の理解時間が身近くなり、効率化できるということですか。
そのとおりです。ただ、時間感覚が人によって異なる場合があるため、私は30秒ルールより、スクロールせず1画面に収めることを意識しています。一画面に収まらない場合はさらに細かく分け、それぞれを関数化していきます。
他にもコーディングに関する仕事術を教えていただけますか。
私が業界に入った20年以上前は、伝達漏れを防ぐためにコードにコメントを書くように言われていましたが、10年以上前からコメントは書くべきではないという考え方が登場し、私はその考えに賛成です。コードにコメントを書くとコメントのメンテナンスも必要になり時間を要するからです。例えば、以前の携帯は分厚い説明書がついていましたが、iPhoneは説明書がなくてもわかるような操作性にしていますよね。システム開発の現場においても、直感的に理解できるコードを書くべきだと思っています。
著書にある「コメントアウトするくらいなら削除する」とはどういうことでしょうか。
今はソースコードの履歴を管理できるシステムがあるので、コメントアウトするくらいならむしろ消すほうが良いと思っています。というのも以前、私が担当していた現場でチームメンバーが何日かけても解決しない不具合がありました。そのコードを見るとコメントアウトばかり。実は不具合の要因がコメントアウトで隠れてしまっていたのです。それらをすべて削除したところ、10分で不具合はすべて解決しました。
コメントアウトが不具合を引き起こしていたのですね。
また、ソースコードはきれいな状態を維持することも大切です。優秀なエンジニアにはきれいなソースコードを書くという共通点がありますが、締め切りが迫ると汚れたコードのまま使ってしまうことも起こりがちです。
きれいなソースコードの共通点は?
「きちんと字下げ(インデント)をしている」「情報(変数)と処理(関数)の名前がわかりやすい」「長くなる処理を短い関数でうまく分割している」「無駄なコメントがない」などの特徴があります。1度汚れてしまったコードを戻すことはなかなか難しいため、コードをきれいなまま保つことは重要だと思います。
システム開発とメンテナンスについて、普段から意識しておくべきことはありますか?
新規のシステム開発の場合、似たような処理はコピーアンドペーストをするのが一番楽ですが、コピペした箇所にバグがあると、コピペしたすべてにバグが生じます。これはメンテナンスとして最悪な状態です。システム開発の仕事は新規が2割、更新拡張が8割なため、「つくりやすさ」より、「メンテナンスのしやすさ」を念頭において開発することが重要です。
エンジニアに最も伝えたいことはどんなことですか。
一番伝えたいのは「エンジニアは専門家であるべきだ」ということです。エンジニアがおこなうのは知的業務のため、心身ともに充実した状態でおこなうことが重要で、それを阻害するのが残業です。「エンジニアは専門家であれ!」と、1番伝えたいですね。
エンジニア転職のご相談はぜひ
『マイナビIT エージェント』へ!
ライター
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから