経緯
このシステムではお客様に実際にクレジットカードでチケットを購入し、
そのチケットをもとにシステムの中の商品を購入するというシステムになっています。
お店ごとにサーバーは立っており、gitリポジトリも分かれているため、
何か機能を追加するという場合でも一箇所ソースを変更という形ではなく、
全てのお店に同じソースコードを適応するという形になっていました。
ある日メンテナンス機能を追加してほしいと要望があり、
自分が実装担当になり、張り切って実装しました。
テストはパスしたため後は全てのサーバーに同じコードを適応していくのみとなりました。
IT経験3ヶ月、順風満帆に過ごしていた自分に初めて試練が訪れました。
事件発生
自分の方で全てのサーバーに適応し、本番環境にデプロイしました。
メンテナンス機能の実装は楽しかったなと思い、1週間が経った頃、
お客様より怒りの電話が来ました。
「1つのサイトで決済できなくなっている!」
自分は焦りました。
「なぜ他のサイトは大丈夫で、このサイトだけなんだ?」
「直近で変更を加えたのは自分だけだから、原因は自分にある...」
「お客様は凄く怒っていて、賠償等も話に出ている」
初めてビジネスに打撃を与えることの影響というものにびっくりし頭が真っ白になりました。
なぜ発生したのか
答えはシンプルで、
その1つのシステムだけは他のシステムのルーティングが少し異なっているのが原因でした。
そのシステムだけ独自の機能で決済が行われていたのですが、
自分はそこを失念し、メンテナンス機能に関わる部分を全てコピー&ペーストで済ませていました。
反省点
隅々まで既存のソースコードを確認せず、
前はこれでうまくいったから今回もきっとうまくいくと勝手に判断してしまいました。
エンジニアはテスト要員としてキャリアを始めることが多いというのも、
テストには開発する上で大切なものがたくさん詰まっているからです。
自分はこの失敗から改めてテストの重要性に気づき、
実装する上でも単なる機能実装だけでなく、
テスト工程のことまで考え実装できるようになり、
品質の高いコードを意識して実装するようになりました。
最後に
失敗することで学べることはたくさんあります。
デバックログの消し忘れ等のケアレスミスも失敗して怒られることで、
二度と発生させまいと心に誓うものです。
皆さんも失敗を重ねて強いエンジニアになりましょう!