ソフトウェア開発と残業

残業の多い業界

私がまだ学生で就職活動をしていた頃、IT業界は残業が多い業界と言われることが多かった。企業説明会に行くと「3K」という言葉を聞くこともあった。3Kが何の略だったか思い出せなかったので調べてみたところ、どうやらいくつかのバリエーションがあるらしいのだが、メジャーどころで言うと「きつい」「厳しい」「帰れない」などの略らしい。

残業が多いとか、3Kという言葉は聞くものの、当時の私はそれをあまり信じていなかった。つまり、残業が多いというのはただの幻想だと思っていた。
というのも、私の学生の時の専攻は情報系ではなかったため、就活をしている段階においてもIT業界の仕事の流れや、具体的にどんな仕事をしているのかがいまいちわかっていなかった。
プログラミングをしていることだけはわかっていたが、プログラミングの仕事で残業が多くなるのは単なるスキル不足が原因だと思っていた。スキルがない人は残業が多くなるが、スキルがある人は残業はないと思っていた。
だから、入社して最初の数年でプログラミングのことをひたすら勉強してスキルを高めれば、残業などしなくてもないと本気で信じていた。
私は残業や休日出勤もしたくなかったので、IT企業に内定が取れてからはIT技術について勉強したし、入社後もプログラミングに関する本をたくさん読んで勉強を頑張った。

しかし、実際にIT業界で働いていると、スキルがあろうとなかろうと忙しい時期は残業が発生した。残業が多い業界であるとか、3Kという言葉がある程度真実であることがわかってきた。そして、なぜ残業が多いのか、なぜスキルがあっても残業が減らないのも徐々にがわかるようになってきた。

チームで開発の仕事をする際、役割分担して開発を進めることが多い。その際、メンバーのレベルに応じて割り振る仕事の難易度も調整する。
経験の浅い、あるいはスキルが未熟なメンバーには難易度の低い仕事を割り振るし、経験豊富でスキルの高いメンバーには難易度の高い仕事を割り振る。
つまり、自分のレベルが上がると、それに応じて仕事のレベルも上がってくるため、スキルが高くなったからといって仕事が早く終わるようになるわけではないことがわかった。もちろん、簡単な仕事を終えるスピードはスキルが高いほど早くなるのだが、難易度が上がる以上仕事を終えるスピードは早くならない。
また、仕事が速い人には割り振る仕事の量も自然と多くなってしまう。そのため、スキルがあって仕事が速かったとしても残業があまり減らない。スキルが高い人はスキルが低い人の遅れを巻き取らなければいけなくなるケースも多く、むしろスキルの高い人の方が残業時間は多くなる傾向にあるようにさえ思えた。
冷静に考えれば当たり前のことかもしれないが、私はその事実に気づくまでに数年かかった。残業したくなくて勉強を頑張ったのに、その結果むしろ残業が増えるとは思っていなかった。

残業と残業代

残業と残業代は切っても切れない関係にある。残業代についても色々と思うところがある。
スキルが高い人とスキルが低い人に同じレベルの仕事を割り振った場合、当然ながらスキルの高い人の方が仕事を早く終えることができる。スキルの低い人は時間内に仕事を終えれなかった場合、残業をする。その結果、残業代をもらい、給与が増える。これには納得がいかない。
残業をしたら残業代をもらうのは当たり前であり、そこに違和感はない。とはいえ、スキルの低い人がスキル不足のせいで残業し、その結果残業代をもらうことについては違和感を覚えてしまう。
仕事を早く終えたスキルの高い人よりも、仕事が遅いスキルの低い人の方が残業代分多く給与を得ているのは当然なのだろうか?
私は、給与は成果に応じてもらえる額が決まる方が良いと思っている。
スキルが低い人が長時間働いた結果多くの収入を得るのはあまり納得がいかなかった。
私が新卒で入社した会社では、残業代をもらえることを前提とした給与で生計を立てている人もいて、仕事の状況がどうあれ一定時間の残業をしている人もいた。残業している人の中には、仕事の量が多い人もいれば、単純に生産性が低いだけの人もいる。生産性が低い人に対して高い給料を支払う会社もかわいそうだなと思った。いったい誰が得をしているのだろう。

残業の是非

そもそも、残業はないに越したことはない。
ソフトウェア開発の仕事はかなり集中力が必要で、頭を使う仕事である。
残業や休日出勤と言った長時間労働を続けていると、寝不足になったり疲れが蓄積されたりしてパフォーマンスは低下する。きっとバグの発生率も上がることだろう。長時間労働は開発者の健康にも影響が出るし、モチベーションも低下していく。
寝不足のまま長時間労働を続けて作業するよりも、睡眠時間を多くとって集中できる時間を増やした中で仕事をした方が良いし、開発者の健康やモチベーションのためにも残業はない方が良い。
長時間の残業は、開発者の生産性と健康とモチベーションを阻害し、ソフトウェアの品質にも悪影響を与える。会社は残業代を支払わなければいけないし、顧客は品質の低いソフトウェアを使用しなければいけない。
いったい誰が得をするのだろうか。
やむを得ず残業して対応せざるを得ない状況もあるにはあるだろうが、日常的な開発業務の中で残業をするメリットはほとんどない。

解決策

そもそもなぜ残業が発生してしまうのか。おそらくは、納期があるからであると思う。仕事に納期があるのは当たり前では?と思うかもしれない。実際、私も一緒に働いていた上司からはそう教えられてきた。
しかし、納期があるのは当たり前のことではないと、最近になって気づいた。

納期があると、納期から逆算して作業計画を立てることで効率よく作業を進めることができる。また、納期があることで納期に対するプレッシャーで集中力を上げることもできる。
そういう意味で納期があることはプラスに働く面も多いが、それは制度の高い見積もりができる場合に限る。
精度が低い見積もりに対して納期を設定することについてはあまり効果がない。
特に、ソフトウェア開発の仕事はやってみなければどのくらい時間がかかるのか分からないことが多く、精度の高い見積もりをするのはとても難しい。
都度相談に応じて納期を調整してくれたり、最初からかなり余裕のある納期が設定されているのであれば話は別だが、予測不能な作業に対して非現実的なスケジュールで厳守すべき納期が設定されているのは、残業を強制しているのと変わらない。
現実的な納期の設定は作業を効率よく進めるために重要だが、非現実的な納期設定はもはやパワハラと変わらないのではないかとすら思う。

やってみなければどれくらいの作業量になるか想像が難しい仕事については、厳守しなければいけない納期を設定するのをやめよう。
そして、目先の1週間~2週間単位で目標と計画を立て、目標を達成できるように最大限の努力をする(ただし残業はせずに)。
それがソフトウェア開発のアプローチとして正しいのではないか(関係者が最も幸せになる形ではないか)と思う。

***

結局のところ、IT業界で多くの残業が生まれるのは、納期厳守のウォータフォール型の開発をしていることが原因であると思う。
納期にかなり余裕がある状態であれば良いかもしれないが、そうでない場合はプロジェクト終盤になるにつれて残業が多く発生することになり、ほとんどの関係者が不幸になる道を歩んでいるのではないかと思う。
やはりソフトウェア開発はアジャイルで進めていくのが良さそうである。
アジャイルにすれば納期や残業がなくなると言い切ることはできないが、少なくともウォーターフォールよりも幸せになれる人は多くなるのではないかと思う。

サポートいただくとめちゃくちゃ喜びます。素敵なコンテンツを発信できるように使わせていただきます。