SIerとウェブ系の業務知識の複雑さの違い
SIerからウェブ系に転職して感動したのが
「業務がわかりやすい!」
という点です。
これは決してSIerをディスりたいわけではなく、むしろSIerの人たちは複雑怪奇で珍妙で難解な業務システムをしっかりと運用しているからこそ、高い給料がもらえるのだな、と理解しました。
ここでまた「ウェブ系」「SIer」とひとくくりにしてしまうと、「お前のところだけだろ」「俺のところは違う」と色々な意見が出るのはわかっています。
それでもざっくりと自分の経験から言うと、ウェブ系の方が業務は理解しやすいです。
というのも、自分たちが出しているサービスがウェブ上にあって、お客さんと同じ目線でサービスを実際に利用して、どう使われているかが目に見えるからです。
目に見える部分の裏側で難しい処理が行われているのは事実なのですが、システムの概要を理解するのはそんなに難しいことではありません。
一方で、私がSIerで経験してきた金融システムはあまりにも複雑で、理解し難く、わけのわからないものでした。
SIerで開発する金融システムは、部署をまたいで様々なシステムが絡み合っています。
巨大で複雑なシステムが密に結合して稼働していて、それぞれのシステムのAPI(と呼べるほど洗練されていない)を理解しなければ、
自分たちのシステムにどんなデータが入ってきて、どんなデータを出しているのか
もわからないのです。
株式や為替の大量のデータが何時から何時まで配信されて、そのデータにはどんな特徴があって、それらのデータをいつデータベースに永続化しているのかを頭に入れなければ運用ができません。
どんな部署からどんなデータを取ってきて、それらのデータをどう組み合わせて自分たちが表示するデータを作っているのかを理解しなければ保守ができません。
それらの「巨大な仕様の組み合わせ」が非常にわかりづらい形式的なExcelにまとめられていて、それぞれの資料が散らばっていて見つけられない状態になっています。
SIerでは「とりあえず資料を作る」のですが、「資料は後世の人がわかりやすくするために残すもの」ではなく、「タスクを終わらせるために書き上げるもの」になっています。
形式に当てはめて資料を残すのですが、形式の中には「なぜそうしたのか」という情報は残りません。
格式張ったExcelやWordにこだわるあまり、資料が「ソースコードの劣化版焼き直し」に過ぎないものになってしまっています。
そんな資料をかき集めて、情報を整理し直して、頭の中に入れなければならないので、SIerの業務は理解がとても難しいのです。
というより、シンプルにできるはずのものを恐ろしく複雑に、そして難しくしているようにも感じていました。
ウェブ系の企業、というかConfluenceなどを使って知見を残している会社の場合、資料は基本的にブラウザで検索可能なもので、フォーマットもWordやExcelではなく、READMEみたいな感じで書き残していけるので、まず読み手に優しいです。
複雑なシステムを大量に組み合わせて動いているわけでもないので、仕様もわかりやすいと言えます。
これはウェブがSIerに比べて歴史が浅いため、無駄に関係者を増やさずに済んでいるからなのと、技術的負債を返していこうという気概があるからでしょう。
複雑で、複数のシステムが密に結合したシステムは運用も改修も辛くなります。
SIer社員はその神がかった根性と持ち前の勤勉さで、何年もかけて複雑な仕様を理解して、システムを運用しています。
そこには莫大なコストがかかっていますが、ウェブ系の人たちがあの複雑なSIerのシステムに手を出すとは思えないので、お客様は今後もSIerにお金を払い続けるでしょう。
ウェブ系にはソースコードが見える形で置いてある
SIerのとある部署では、配属されて3ヶ月経っても一度もソースコードを見ることができませんでした。
社内でしか使われない謎のバージョン管理システムがあって、その使い方も誰も教えてくれないのです。資料は残されておらず、口伝で担当者に伝えられているようでした。
Gitは当然使われておらず、Subversionですらもないバージョン管理。
そこではバージョンが管理されているとは思えないのですが、何らかのコマンドでチェックアウトしてきて、オフショアの開発者がソースコードを修正しているようでした。
SIerの社員はソースコードは見ることはなく、上がってきた「設計書」や「テストケース」をひたすらチェックするのが仕事です。
まぁ、ソースコードを見てもCOBOLなので理解できないのですが。
ウェブ系の企業に転職して、GitHub上に自分たちのソースコードが置かれていることに感動しました(もちろん、privateなリポジトリです)
製品を触ってみて、この辺どうやって動いているのかなーと調べようとしたらすぐにソースコードを確認できるのです。
これは非常に嬉しい「ウェブの当たり前」でした。
開発環境の構築もDockerで手軽にできるようになっているため、手元で業務システムを動かすことができます。
SIerでは手元で業務システムを動かすのは不可能で、いちいち開発環境にリリースして
稼働を確認しなければいけませんでした。
パソコンのメモリは4GBで、WindowsのパソコンにDockerをインストールしても、プロキシに色々と邪魔されてイメージをpullできなかったからです。
業務の複雑さから話が逸れました。
「ウェブ系」といっても、Googleの検索エンジンのように、ユーザーから見える部分はシンプルでも、裏側のロジックはとてつもなく難しいことは当然あるでしょう。
業務における「複雑さ」の違い
どのウェブ系企業でも、複雑で難しいエンジニアリングを担当している人はいます。
ですが、そこでの「複雑さ」「難しさ」はSIerのシステムを担当する「難しさ」とは異なります。
SIerの複雑なシステムは、まず「理解する方法がなさすぎる」のです。
前述したように設計書は形式的で、ソースコードは手に入らず、手に入ったとしても決して読みやすく書かれてはいません。
後任のためのドキュメントは残されず、「プロジェクトのタスクを終えるための資料」を読み漁って情報を集めなければいけません。
ウェブの複雑さは、明確に見えるソースコードの中での、エンジニアリングの難しさです。
理解できないのは本人の能力やコードリーディングのスキルの問題であり、複雑さが隠されているわけではありません。
目の前にある複雑さを理解するのが大変なのがウェブ系で、目の前の複雑なシステムを理解するための情報を集めるのが大変なのがSIerです。
そしてSIerでは、情報を集めることに成功しても、老朽化したシステムが密に結合しているので、集めた情報を整理して記憶するのが困難なのです。