1週間ほど炎上受託開発案件のヘルプとして仕事をした。バグチケットをひたすら消化する傭兵エンジニアとしてである。当然傭兵エンジニアには大した権限もない。顧客はとあるサービスをWeb上で展開している。

備考録として,現場の状況を書き連ねてみる。

長時間労働当たり前

まずデフォルトで10時出社22時退社である。デフォルトで土日のどちらかは出勤。この時点でおかしい。効率的にタスクをこなして早くあがろうという気がなくなる。当然終電間近まで働き,時には終電を逃し,タクシー帰りになる。その結果,次の日は午前半休全休となり,作業遅延が発生する。

自分は1週間ほどで別案件のため解放されたが,この状況を1ヶ月と続けていくと色々なものが壊れていく気がする。継続して対応しているメンバには頭が下がる。

増え続ける要求,曖昧な仕様

プロジェクトに仕様書というものは存在する。だが,大抵エッジケースの考慮は漏れていることが多い。このようなケースがどうだったかと顧客に確認とると,なぜか以前話のなかった新たな要件の話になっていく。顧客のシステムについての感覚的な思いつき機能がぽっとでてくる。

まったく設計されていないコード

手続き的に処理が書き連ねられているのが当たり前。オブジェクト指向何それ?という感じのコード。 典型的なメンテナンスしずらいコード例のオンパレード。

  • テンプレートviewにロジック盛りだくさん
  • コントローラーにSQL直書き
  • 同じ処理が複数の場所に
  • ぱっと見,意図がつかめないマジックナンバー
  • 一箇所にまとめておくべき定数が分散されて定義
  • 不整合なデータのオンパレード
  • テストコードなどない
  • etc…

驚愕したのが帳簿データのExcel出力のコード。1cell毎にハードコードしているので,仮に出力するデータ要素を1つ追加するにもそれぞれの行を1つずつインクリメントしなければならない!!

思うこと

外注丸投げからこの案件は始まったらしい。自分の経験上,外注のコードはとりあえず動くがメンテナンス性などまったく考慮されず,その場しのぎのつぎはぎコードになって出てくる場合がほとんどである。今回アサインされた案件も例に漏れず考慮不足のその場しのぎのコードの塊だった。外注から引き取った後,プロパーのエンジニアが頑張ってだいぶまともなコードになってはきている印象だが,元がひどすぎるのでどうにもならない。データストアにはリレーショナルデータベースを使っているが,そもそものデータベース設計が残念すぎてどうしようもない。このシステムはすでに実稼働しているのだ。そう簡単にデータ構成を変更するわけにはいかない。

炎上案件の現場というのは大抵正常な判断ができない。効率性や理性でなく感性が優先する。確かに人間は感情の奴隷である。であるからこそ我々頑張ってますよアピールはただの害悪であり,サービスとしては何も生み出さない。顧客担当と受託開発チームが和むだけである。確かにそこから双方の契約が進みやすくなるかもしれない。営業はその観点で物事を見るのはわからないでもない。ただ,現場の開発陣は疲弊する。サービス利用者はクレームを投げる。本質的に何にも前進しない。

終わりに

当然かもしれないが,炎上プロジェクトではモチベーション維持が非常に難しい。心も体も疲弊しきっているので束の間の休みも何もする気が起きない。なんの好奇心も沸かなくなる。頭を使いたくなくなる。

会社は自分を守ってくれはしない。自分の身は自分で守るしかないのだ。