熱脳しゃちょのブログ -19ページ目

熱脳しゃちょのブログ

おせっかい焼SE兼プログラマ兼……の辛い日々と、思う事なぞ

いくつかの案件で、鎮火後にv2とか再設計再構築してきましたが、まぁ、普通はうまく行くはずがないです。

 

1. プロダクト的に新機能などが追加されるわけではないので、お金を渋りがち。渋りまくり。

その気持ち、理解できるんだけど、300円で上うな重を要求するようなものなんだよねぇ……。

炎上プロダクトの場合は、そもそも動いてないから既存機能が少ないので、目玉機能追加しますでお金引っ張ってこれる。まぁ、その目玉機能が売れなくてさらにジリ貧になりがちなんだけど、そこは一発張るしかないからドンと行く。

けど、ある程度客がついてお金を出してくれてるような、舞台裏で燃えてるタイプのプロダクトの場合、作り直しは既存機能全部実装されてなければならない。
中途半端にキャッシュが入ってくるところ、盆栽のように細かくメンテして行かなければいけないのに、売り上げを増やすために機能をアドホックに追加追加してきたので、田舎の温泉宿のようなプロダクトに育っている。
規模は期間に比例する。
期間はエンジニアの姑息さに比例する。

実装し直さなければいけない機能が積み上がる。
そうやってそれまで積み上げてきたお金と時間の、少なく見積もって3倍かけても同程度(ただし、障害の発生数、将来に向けて保守にかかる費用を削れて、新機能投入までの時間を短くできる。んだけど旧プロダクトと比較ができないので、再設計再構築してよかった感が皆無。これでぶちぎれる経営者が多い。というかそうでない経営者にあったことがない)のサービスレベルまでしか戻せない。

どうしてそんなに金を出さなきゃいけないんだ?
うん。
あんたが信頼してきたCTOのせいだな。

 

お金が出せないなら既存のサービスを維持し、連日連夜の障害対応とクレーム対応、スケールしないから新規顧客のローンチができず、使いづらくなったと解約が増えていくという、徐々に温度が上がる鍋に肩まで浸かるタコでい続けるしかない。

作り替えるなら一発ドーンっと金を積むしかないんだけど、逐次投入してしまう。

細かく切ったマイルストーンを踏破して行かなきゃならず、後戻り不可。

そんなことしたら裏切り者や犯罪者扱い。

そんなプロダクトに、なぜ腕のいいエンジニアがいつくと思う?

プラモデルの組み立て作業じゃないんだぞ。

しかも、掘ればあちこちから地雷や不発弾が発見されるし、わけわからんロジックが前提になってるデータが堆く積もってたりする。
その度に検討、対応計画、対応Phase1、2、3とやって本線に戻る。
ってやるんだよ。
なんでこんなに遅れてるんだよ!
これ、おいらのせいじゃねーんだよ。
なのにおいらにブチギレるんじゃねぇよ。
手ぇ引くぞ。

 

2. 同じメンバーで技術スタックだけ変更
言語変えれば全てうまく行く。
あれやこれやは全て古くなった言語のせい。

で、言語変えたり、クラウドプロバイダ変えたり、k8sだあれやこれやとDB変えたり。
ってカタログショッピングしてウキウキしてるエンジニア集団が多いんだけどさ。
そういう状態に陥らせたエンジニア集団が、技術スタック変えただけで事態を正常化できるわけない。
技術スタックがそういう事態に陥らせたのではなく、エンジニア集団の技術力の低さ、先見性、論理的思考、現実把握力のなさがそういう事態に陥らせたわけなんだから、技術スタック変えても金と時間をかけて同じようなものが再現されるだけです。
しかも、最近流行りの、あまり詳しくない技術について、Webでググりながら見様見真似、ぶっつけ本番でコピペしまくるだけだろ?
これでなぜうまく行くと考えるか、さっぱり理解できない。
それにOK出す経営者の頭の構造が理解できない。

 

 

はっきり言おう。

こういう再設計、再構築は失敗する。

100%失敗する。
失敗した時のことを考えて、プロジェクトを進めてくれ。
 

お題目はどーでもいい。

マイクロサービス化しないといけないほどデカくて複雑なシステムと、TODOリストレベルのCRUDアプリを同じ基準でやろうってのが間違い。

規模がデカくなるとか、複雑度が上がるとかいう可能性があるなら、商用サービスならそういう成長を予定しているのなら、そちらにスイッチできるようにしておくだけの話で、その上でマイクロサービスでやるとかモジュラーモノリスだとかは手段としてとるものであって、目的ではない。

加えて、形式的にそれっぽくできていればいいんじゃなく、それらの概念なり手法が目的とするものが機能すれば、コピペのような見た目同じである必要はない。

というか、Webとかでの解説は、紙面の関係等で要素部分だけを抜き出してるので、有効な形ではない場合が多い。

本人による解説であれば、事前条件が全然足りない場合もあるし、言葉足らずの場合も多い。

どこかのWeb記事で書いてあったのを、聞き齧りでまとめてドヤ顔する類の似非エンジニアの手によるものだと、全く間違ってる、おかしな内容に歪んでたりすることは、本当に多い。

それを実施して、期待された効果が発揮されているか、ちゃんと確認した方がいい。

「最新の関数型プログラミングで……」

「マイクロサービス化していて、実装済みが70個で、90くらい設計完了、最終的には120くらいになります」

「ドメイン駆動開発で……」

って説明されて、実物見て、「この人ら、なんでこんな苦行なだけの苦行に喜んでるんだろう?」って思うことがとても多い。

 

例えば「ドメイン駆動開発を採用し、ドメインごとにマイクロサービス化して疎結合にし、各ドメインごとにチーム分けを行い……」って説明されたあるプロジェクトがあるのだが、「業務ドメインごとにマイクロサービス化」して、「画面、帳票単位で」必要なテーブル、APIを設計しそれぞれ1 Taskとして登録、消化、完了率を持って進行度とし、プロジェクトは順調と報告()。業務ドメインを跨ぐデータは「マイクロサービス越しにやりとり」つまりチーム間で修正点をやり取りして辻褄を合わせ、修正が入るたびに両岸のマイクロサービスをタイミングを合わせてリリースしなければいけない。それぞれの自動テストは可能だが、連携は自動テストでは行わず、E2Eテストで行われ、すべてのパターンが外から突いて網羅できるわけもなく、ちょいちょいエラーを吐いて、調査困難。手数が足りなくなったのでAI 使って物量を稼ぐが、むしろ辻褄合わせが困難になって、プロジェクト後半、対応会議の時間の方が長くなる。

って、「君ら何のためにドメイン駆動開発とかマイクロサービスとか採用しますとか言うたん?」と小一時間問い詰めたくなる状態になってる。

なんかドメイン駆動開発はだめだとか、マイクロサービスじゃなくモジュラーモノリスでやるべきだったとか、見当違いな反省をしているように聞くが、ダメだったのは「君らのおつむ」だって結論に、なぜたどりつかないか、さっぱり理解できない。
全部間違えて適用してるから、ダメだっただけ。
参考にしたWebの記事がそもそも間違えてるし、そこからさらに読み取ったことも輪をかけて間違えてただけ。

 

楽にならない、リリースのたびの不具合が減らない、変更が困難。
になる時点で間違えてるんだよ。