この記事は「ひとりでカンファレンスふりかえりo0h Advent Calendar 2021」のday-18です。

ひとりでカンファレンスふりかえりo0h Advent Calendar 2021 - Adventar

今日振り返るのは、「堕落するソフトウェアに立ち向かわないと」です。 PHP Conference Japan 2021のCfPに応募しました。Regular session (25 mins)の枠になります。

堕落するソフトウェアに立ち向かわないと

概要

こちらについては、割と言いたいことはプロポーザル本文中に書いてあるような気がしています!

背景にある課題感として、「堕落する」という部分に係るのですが、「人が増えるにつれて・コードベースが大きくなるにつれて、どんどんとコードが悪くなっていく」という感覚があります。

基本的には、同じソフトウェア上にあるコードに「参考にできる部分」が存在すると、それを真似しながら書くことが多いと思います。物理的・操作的にはそうじゃなくても、意味的にはコピペが起きるような。あるいは「手抜きの拡張」も生じるかも知れません。

ということは、「少し油断したコード」が紛れ込むと、それは「同質のコードが増殖する」あるいは「更に劣化してコピーされる」ような状況に繋がっていくように思います。

そうやって「品質の中央値」みたいなものがどんどん引き下げられていく・・・と。これが「堕落する」と書いた部分です。

どうやって守るか?というと、それはもうメンバーの実力と矜持によるものだと思うのです。 ソフトウェアは大凡チームのレベルに合わせて作られると思いますが、それは「チームの最大レベル」ではなく「平均レベル」であり、もっといえば「平均レベルのメンバーでも読める・書ける水準」なのではないでしょうか。 こうなると、「強いエンジニアがいる」だけでは全く「堕落」に抵抗できず、しっかりと教育・啓蒙をしていく必要があります。

「開発者個々人の成長を促す」ことより「組織全体での学習・向上をどのように行うか?」「そのために、技術リーダー側の人が貢献できること」を話してみたいな、というプロポーザルでした。

動機

「技術者のレベルがプロダクトコードに規定される」というフォースがあると思っていて、裏を返すと「コードのレベルを上げるには技術者のレベルを上げる必要があるが、技術者のレベルは”プロダクトコードを書ける”レベルに収束しがちで、すなわち”普通にやっているだけではレベルは上がらない。上昇プレッシャーは発生しにくいが、安定・下降へのプレッシャーは常に発生する”」という構造があるのではないかと。

ただし、リーマンの法則によれば、「使われるソフトウェアは複雑化する」ものです。なので「複雑化しても品質を保てるように、それまでよりも更に高い技術レベルが求められる」のだと考えています。もちろん、「0→1よりも1→2の方が簡単」という話はあるので、「スケールするために、人手を増やす」という動きでコトは進むのですが、ただし「生産性がどんどん落ちる」ようになるし、また「とある時点で大きな壁にぶつかる。超えられない問題が立ちはだかる」のではないかと。

地道に育てていくって難しいですよね・・しかも、個々人の視点においては「普通に生き延びられる」ようなところを超えて、「ちゃんと未来に立ち向かえる」「より上昇していけるように仕向ける」というのを、集団に対して働きかけていく!!というのは。。かなりの根気が必要に感じます。手を抜く、妥協する、言い訳をして低品質を許容する、そもそも「悪さ」を見抜く力がない・・・みたいな状況は確実に来るものだとも思います。 これは「その人が悪い、意識が低い」ではなくて「組織的に支え続ける」という能力を備えられているか?という話として考えるべきものだと思うのです。逆に、自然と「上げ続ける」ように仕掛けられれば、当たり前に「組織の平均値が上がっていく」が持続できるのかも知れません。

そういう課題を感じているので、とりあえず今の時点で考えている・やっていることをアウトプットしておきたい・・・・という動機でプロポーザルを投稿しました。