Tomofiles Note

ドローンとインターネット、そして人との関係を考えるソフトウェアエンジニアのアウトプットブログ

【Part2】我流が暴走する悲劇

第二回です。
前回は、エンジニアとしての土壌が合わないという話をしました。
夢を見ていたことが、実は夢なんかではなく、いる場所が違うのではないかと。
今回は、合わない土壌でもがいて、今思えば暴走していたとも思える出来事をまとめていきます。

チャンス到来!

あるプロジェクトで、システムの構成から考える必要がある開発に携わることがあった。
よく言えばアーキテクチャから任せてもらえたが、悪く言えば丸投げである。作れればいい、みたいな空気である。
私は、これまで学んだあれこれをベースに、アプリケーションの構成案を考え、リーダーの承認を得た。
よくある、コントローラ、サービス、リポジトリの構成である。
ドメイン駆動設計を軸にしている私は、中途半端なモデルは作らず、トランザクションスクリプトを目指して設計した。このプロジェクトでは無理というか、やる必要はないと思っていた。それは結果的には、そのとおりだった。

私がこのプロジェクトで最大限気にしたのは、次の点である。

  • コンポーネントの役割を明確化する
  • 継承は禁止、インターフェースを多用する
  • 適宜クラス分割して、責務を単純化する

この取り組みは、概ね有効に働いた。

我流思想

こうやって、あれこれ自分で考えて決めて開発ができたことは、当時の私には嬉しかった。
ただ、考えて決めたことは、リーダーの承認は得たが、各メンバーが飲み込めていたのかは、正直微妙なところだった。
上記羅列してみても、特におかしなことは言っていないと思う。
だが結果的に、プロジェクトに一つの状況を招いていたことに、今になって気づいた。

つまり、あれこれ考えた私だけが、この思想を意識していたのである。

なんのための施策なのか、それはみんなが同じ方向を向くルールである。
結果として、ルールはルールとして有効だったが、これはみんなが私と同じ方向に向いただけだった。
つまり、私が間違えていたら、みんなが間違えた方向に向かってしまうのだ。
我流の思想が、我流のままルールとなり、それがプロジェクトの法となってしまうのだ。
それが怖いと感じたのが、とある事件が起きたときだ。

よくあるデータベースの問題だが

システムがいよいよ完成を見たときに、問題が発生した。
データベースのロックが、画面表示を妨げる事象が発生したのだ。
事態の深刻さはそれほどではなかったが、改善を検討する必要があった。
私としては、処理の妥当性を保証する上では、行ロックによるシーケンシャル処理を実現しないといけないと思って導入したのだが、それが画面表示に影響する場面があることに気づけなかった。

この問題は、ひとえに私の技術知識の不足が露呈したために、起きた出来事だった。
と、最初の頃は謙虚に自分を戒めていたのだが、見方を変えたときに一つのことに気づいた。

原因は私だけなのか?
他の人でも気づけたんじゃないか?

これは責任転嫁ではない。

構造上の問題が表面化?

なんで、チームの方向性が偏ってしまったのだろうか?
ただ、お前の責任だろう、と言われればそうなのだが、だれか一人が責任を取って反省するのが、唯一の対処法なのだろうか?
こういう問題が発生しやすい作業分担を、暗黙的にしてしまう風土が、実はあったんじゃないか?
そう思えてならなかった。

ドメイン駆動設計の思想は、業務領域をモデル化するにあたり、業務のエキスパートと、エンジニアが蜜に連携を取り、ドメインモデルを構築していく。
その過程では、みんなが全体の構造に関心を持ち、全体から部分に注目していく意識の流れがあるはずである。
要するに、複数の人の目が入る風土がそこにはあるのではないか、と思うのだ。

そういう複数の目を入れるのが、本来はレビューなのだろう。
ただ、このプロジェクトでは、レビューは形骸化していた。そこは別の意味で問題だった。
でも、トップダウン的なレビューを行ったところで、結局私の目が入るだけである。事件は防げなかっただろう。

暴走が起こりやすい土壌

私は、アーキテクチャを考えて決める段階から、これで良いのか?って思うときはよくあった。
特に、私のような実績がそんなに無いエンジニアが、ちょっとかじった程度のアーキテクチャ知識を振りかざして進める開発がまかり通っているこの状況には、大きな不安があったものだ。
だが、それはプロジェクトの遂行上問題にならなかった。
問題感が出るのは、実際にバグが出たとき、続行が不可能になったときだけだ。
目的はその突破でしかない。再発防止策は、ボトムアップで上げるだけだ。
なんで、こんなに上も下も乖離しているのだろう?みんなで一つのものを作り上げていく感覚が、このプロジェクトからは感じられなかった。
産みの苦しみ、と言ったらそれまでだが、苦しんでいるのは直接的な開発部隊だけである。

みんなが同じ方向を向いている

私は常々、みんなが同じ方向に向いていないと、何事もうまくいかない、と思っている。
それは、私が道を示して同じ方向を向かせることではない。
みんなが向いている方向と自分の向いている方向をすり合わせていくことが大事だと思っている。
その営みが、大手SIerでは上と下の乖離(社間的な、役職的な、契約的な、どれも当てはまる)で難しくなっている。そう思うのだ。

我流がひとりでに暴走するのは悲劇でしかない。
ただ、システム開発に関わる全ての人が我流を持ち合わせていたら、それをすり合わせることで、暴走ではなくチームとしての適切なベクトルになる。
そういう環境で仕事がしてみたいと思う、今日この頃であった。