しし~ま
sisima.qrunch.io

「いや、これはもう改修じゃなくて一から作り直しましょう」「は?」

2018/10/18に投稿
この投稿は別サイトからのクロス投稿です(クロス元:https://qiita.com/sisi_maExtend/...

どうも経営陣の皆様方には、僕らが今までの資産を活用せずに無駄なリソースを食いつぶす無能に見えているらしい。
まあ、言いたいことは大体わかるよ。大方、

「今ある機能を流用して、登録するデータと通知の内容をちょっと変えれば済む話じゃないのか!」

とか、そんなところなんじゃないか。元技術者的な、中途半端にその辺の理解がある人だとたまに口うるさいよね。

わかる。わかるよ。僕だって、できることならそうしたい。 というか、プロジェクトの引継ぎと新機能の実装を伝えられたその時は僕も全くおんなじプランだったんだ。

流用しようと思っていた機能の内部実装を見るまでは。

こいつを崩さずに直せだと???

ジェンガを思い浮かべてほしい。
実によくある、3本のブロックを縦横交互に積み重ねていく、あのジェンガだ。

仕様書にはこうある。「ブロックの素材は木製とする」「縦横交互に3ピースずつ積む」「計100段積む」etc。
君はその仕様書に則って、大きさnミリの木製ブロックを発注し、ズレの無いように丁寧にブロックを積み……。
途中手元が狂って崩したりしながらも、君は何とか100段積み上げた。 やったぞ、完成だ! 早速部長に見せに行こう。

部長「なんか違うな。3ピース並べたうちの真ん中だけ赤いプラスチックのブロックにするとかどうよ?」
部長「そうだ!縦横だけじゃなくて、斜めに積んでいくのも面白いんじゃないか!?縦・斜め・横・斜め!これで行こう!!!」
部長「あと100だとちょっと足りないな。やっぱり200段にしよう。」
部長「よし、この3点の修正を今週中に頼むよ」
部長「ああ、もちろん一からやり直せとは言わないよ。こいつの形を保ったまま、ちょっとずつ直してくれればいいさ」

やってられるか!!!!!!!!!!!!!!!

どうも部長は今あるものを直すだけだから最初から組むより楽などと思っているようだが、とんでもない。 真ん中のブロックだけ抜き取って赤いプラスチック製のものに置き換え、 縦・斜め・横・斜め・縦……の順番でブロックを直し、 さらに追加で100段も増やすのを、 崩さないように 細心の注意を払いながらだなんて、多分気が狂うどころの話じゃないだろう。

そういうことなんだよ。 僕らが一からシステムを作り直そうとするのは、 今あるものを崩さないようにの部分が一番しんどいから なんだ。

ちなみに今回の流用予定だった機能の場合、ありとあらゆる情報をグローバル変数に突っ込んで管理しているみたいだった。
もう何べんも読み返したけど、処理の全貌がいまだにつかめない。
しかも変にグローバル変数を使いまわしているせいで変数名と値の内容が矛盾しまくってたりするのが読む側としては最高に憎たらしい。
この全く理解の及ばぬブラックボックスをそのままパクる勇気は僕にはない。
ここまでくるとバグが見つかってないのが異常なレベル。ってかこれ、書いた本人ももうわかんないだろ、絶対。

そんなこと言ったって、この業界じゃよくあることだろ?⇒その通り

実に、実によくあることだ。最初に上がった要求がプロジェクトの終わりまで増えも減りも変わりもしないなんてことは絶対にないし、 プロジェクトの面倒を見る人が最初から最後まで一貫しているということもない。 そして引き継いだソースコードが新しい家主となった君を暖かく出迎えてくれるという保証も、ない。

じゃあ一体どうすればいいんだろう???
僕らにできることは多くない。すでに手遅れとなったスパゲッティコードに立ち向かうのは並大抵の苦労では済まない。そのまま心が折れてしまうことだってざらだ。
だから、せめてこれだけは心がけよう。これ以上の犠牲者を増やさないために、 常日頃から変更が容易な、他人がすんなり理解できるコードを書くんだ。
そのための設計やら開発やらの手法だなんだっていうのは、探せばいくらでも出てくる。
その中のどれが最適かまでは残念ながら僕にもわからないが、その手の手法がいくらでも出てくるということは その数だけ先人の墓標が立ってるってことだ。

君も、君の後を続く後輩や部下たちも、そうなりたくはないだろう?

  ※追伸 このお話は7割ぐらいフィクションです。

関連記事

10/20 10:35

あるあるすぎるw

うちの会社なんて他社さんが撤退したサーバ案件のメンテとか持ってくるもんだからもっと修羅場っすよ。

しし~ま
sisima.qrunch.io
ポエマー兼Laravelerなのじゃ
フォロー
フォロワー
ブログを開設

クランチで技術ブログを
始めてみませんか?

この先は、クランチへのアカウント登録、及びログインが必要なページになります。

Markdownの書き方
見出し # 見出し(h1)
## 見出し(h2) , ### 見出し(h3) ...
リスト - 箇条書き
   - タブでインデント
番号付きリスト 1. テキスト
2. テキスト
改行 行末に半角スペース2つ
リンクの挿入 [タイトル](https://xxx.com)
引用 > テキスト
コード挿入 ```cpp:title
code
```
画像の挿入 ![代替テキスト](URL "タイトル")
太字 **テキスト**
斜体 *テキスト*
打消し線 ~~テキスト~~
水平線 ***
技術ブログを開設
ログイン