アメリカの職場ではなぜドキュメントも無いのに人が去っても問題ないのだろう?
アメリカの職場にいると、日本にいるときよりも身近でレイオフだとか、職を変えるというのを頻繁に見かける。先日もそういう場面があったのだが昔日本で働いていた時のことを思い出した。
ドキュメントを書く理由
日本のソフトウェア企業にいたときは、「納品物であるから」という理由以外にも、「人がいなくなったときに会社が困るから」という理由でもドキュメントを書くことが推奨されていた。しかし、少なくとも今の職場ではそんな理由でドキュメントを書くのは推奨されていないのに、なぜ問題にならないのだろうとふと思った。
うちのマネージャは、バディ制ににして、みんな休暇できるようにしようとは言っているが、多分本当に退職対策ではないと思う。
チームのメンバーが抜けたときも、「とても残念で、ワークロードをどうしようという問題はあるけど、彼女の門出を祝福しよう」言っていた。つまり、こちらでも「工数」は問題になるけど、「引継ぎ」が問題になっていないのだ。
ドキュメントは書きたいから書く
自分たちはクラウドのプラットフォームを作っている。世界中の人たちのプラットフォームなので規模も複雑性も相当高いと思う。
自分たちがドキュメントを仕事として書かないといけないケースは、オフィシャルのドキュメントぐらいなもので、基本は任意だ。プロジェクトが始まったぐらいの時に、デザインドキュメントという数ページのドキュメントを書くことがあるけど、これも担当している自分が書きたいから書くものだし、TSG(トラブルシューティングガイド)というのを書いて、インシデント(顧客からの障害報告)に備えるというのもあるけど、日本にいたときみたいに設計の中身を書いたものではない。コードのあるリポジトリにドキュメントを書くことがある。大抵は手順とか、ソフトウェアの設定に関するもの。よくGitHubのリポジトリで見かける普通のものだ。他には内部向けにマイクロサービスのアーキテクチャの説明をしているビデオを作ることが多いが、これも、強制とか成果物という感じでも無い。やりたい人がやる感じだ。
なぜ巨大なプラットフォームを維持できるのだろう?
じゃあ、なぜそんな程度で人が辞めても巨大なプラットフォームを維持できるのか?ということを考えると、一言でいうと「専門性」だと思う。日本にいたときには誰も触れない塩漬けのシステムとかもよく見かけた。
めっちゃくちゃぶっちゃけていうと、それは設計がいまいちでだれにもメンテできなくなっている。少なくとも今の会社にいると、誰もそんな誰もが読めないようなコードを書く人はいないし、多分書いてもプルリクエストのレビューで拒否されてしまうだろう。(そんな酷いのは見たことないけど)基本的に、コンピュータサイエンスを出ているか、それ相当の知識を持っていることが前提なので、多分そんなことにはならないというのが大きく日本と違うのかもしれない。(もちろんそうでない日本の会社もたくさんあるだろう)。
結局はコード
結局のところソフトウェアシステムは概要の設計だけではなく、細部も重要であり、結局コードを読むこと、デバックや動かしてログを見るとかしないと実際の挙動はわからない。書いた本人ですら忘れることもある。だから、ちゃんとした設計のコードがかけて、コードが読めるというベースラインが重要で、人が抜けたとしても、少しづつコードを読んで、変更して、動かして学んでいくので、特に問題にもならないのだろう。変更をするとき、機能を追加したいとき、障害が起きたとき結局何するかというとコードを読むしかないのだ。そしてそれが一番簡単だ。
また、内部の仕組みも日本にいるときに比べて相当短い時間でがっつりとアーキテクチャを変えたりするので、新しい設計になる事で、新しく来た人もさらにその理解が進んでるのかもしれない。
専門性が品質を担保する
日本にいたときはプログラマは文系でもなれる職業だったが、こちらではコンピュータサイエンスを出ているレベルというのが基準になり、専門性を求められる。日本の時はアーキテクチャは基本的に「誰でもコードを書けるような」アーキテクチャに寄せがちだったが、こちらは、そもそも全員が専門性を持っているので、「誰でも書けるコード」に寄せることはしない。品質保証もそうで、品質保証チームが品質を保証するのではなく、各人がする。自動化できるところは自動化がする。コードの設計やテストの設計は、各人でレビューしあうことで担保が十分にできる。専門性があるもの同士であれば。
専門性が「楽」をもたらす
いろんな場面で見かけるが、日本とアメリカのソフトウェア企業の大きな差はやっぱりエンジニアに専門性を求めるか否かが大きくあって、それがいろんなことを「楽」にしているように見える。なかなか人材が見つからないとかの問題はきっとあると思うのだが、まず業界が「専門性」を求め始めるところから始めてもよいのじゃないかなぁとか勝手に思います。「専門性」がない人でもできるようにするときっとめっちゃくちゃ大変なんだと思う。だから、人に「専門性」を求めるようになれば、応募する人もそれを身に着けようと思うし、それが評価されれば、きっと業界も本人ももっとよく、そして楽しくなれそうだ。
日本のソフトウェア業界も「専門性」の世界になって、ソフトウェアエンジニアはより楽しく、そして、より社会にソフトウェアがより貢献しやすくなるとよいなと思います。そうすれば一生懸命仕事をする日本は全然世界でもっと活躍できると思います。