Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

君も、君の後を続く後輩や部下たちも、そうなりたくはないだろう?
  
  
  
  
※追伸 このお話は7割ぐらいフィクションです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away