アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

やべえSESを見た

同じ現場にいたSESの話。あまりに酷すぎたのでまとめておく。
3人1チームとしてやって来ていたのだが後述の理由によりまとめて「Rさん」と1人格で呼ぶことにする。

Rさんの担当は「システムへの機能追加」、
そこそこ大規模ではあるものの、半年ほどでRさんだけで完結するかな、という見積もり。

Rさん、対面で話すとめちゃめちゃ普通なんですよ。
普通っていうかむしろ優秀な印象。
そこそこ新しい技術のキャッチアップもきちんとやってて、今のプロジェクトの課題になっている部分も的確に見抜いて改善案も出せる人。
実用レベルの技術的知識をきっちり持ってるなーと思ったし、「こいつクソだな」と思ってる今もそこは変わってない。少なくともその面では自分より優秀。

なんか先にフォロー入れとこうと思ったけどそこしか思いつかなかったわ。ということで以上。


1. 連絡がつかない

問題になり始めたのは、Rさんが完全リモートワークに入ってから。
定期的にミーティングして(オフィスからはプロバーさんと自分、リモートでRさん)作業を進めていたのですが、
ミーティングの時間になってもつながらない。直接電話を掛けても出ない。
というか普段からチャットで話しかけても応答がない。
一切音信不通というわけではなく、後から折り返して来たり、めちゃめちゃ催促したら返事が来たりするのですが、まあそういう感じ。
返事の内容も、10質問したら3だけ返ってくるみたいな感じで、情報落ちがすごい。
こっちが10伝えたことも3しか拾ってない感じ。
仕方ないので改めて聞き直したり伝え直したりするんですけど、その分やたらと時間と手間がかかる。
対面だと5分で済むやりとりに何日かけるつもりなのかと。

で、その調子なので、3人の誰がどういう作業してるのか、そもそも作業してないのかとかも全く分からん。
SESはある意味そうあるべきかもしれないけど(法的に)、やりとりしてるリーダー位置の人が役目を果たしてない。

2.作業スピードが遅い、やらない

これはオフィスにいてもそうだったんですけど、なんか、遅い。
調査なんかに予想外に時間を食うことはもちろんあるので時々遅くなるのは仕方ないんですけど、全体的に遅い。何やらせても遅い。
実装が遅いとか設計が遅いとかそういう能力不足っぽいやつじゃなくて、単にサボってるだけな気がする。
例えば、リモート会議中「この会議終わったらその資料をお送りください」「はい」って会話したのに送ってこない。まあ忘れることもあるよね、とチャットとかで催促してもやっぱり送ってこない。今存在するファイル送るだけなのに。やらない。
なんなの?これはどういう心境なの??

3. 現状の環境に合わせてくれない、勝手に変える

gitの運用ルールを完全無視してコミットしてくる。
直してくださいと言ったら「どこからどんな命名でブランチ切ればいいか教えてください」。
(「直してください」を3回くらい言って、ようやく来た返事がそれ。)
完全に初耳みたいな聞き方してくるけど、その命名規則、Rさんも含めみんなで決めたんですよ。つーか他のブランチ見りゃわかるしね。

新規画面のレイアウトも他のページに合わせようという気すら感じられないし、
コードの書き方なんかもちろん斬新。
他の画面のソースコピーして新規機能用に書き換えればいいだけじゃないの?なんでゼロから作ろうとするの??
しかもその実装にメリットがあるならそっちに合わせるように考えてもいいんですけど、全然そんなこともない。

4. 人の話を聞かない

もうあまりにも酷いので、Rさんの上長も打ち合わせに同席するようになったんですけど、この人がまた…。
プロパーさんの「この一覧表からこの項目を消してください」の指示に
「でも内部的にはこういう処理をしててこれも表示しないと気持ち悪いので表示しましょう(※意訳)」みたいな実装側のお気持ちで謎の反対をしてくる。
処理上の問題とかコストとかユーザビリティの問題も一切なく、マジでお気持ち。お前の好みを押し通そうとするな。
話し方も、こう…とにかく「俺が俺が」で話そうとする人というか。
こちらが途中で「ちょっといいですか」と質問なり意見なりしようとしても、聞こえてないのか何なのか話を止めない。しつこく何回か呼び掛けてみるとようやくって感じ。聞こえてんじゃねえか。

5. とにかく納品物のクオリティが低い

これ。
これさえ完璧ならもう他は諦めてもいいんですけど、肝心の納品物がまるでダメ。

インデントが汚い

個人的にはまずここで完全に無理。
インデントもまともにできないプログラマーは全面的に信用しない。
「このコードは使う価値ないな」って一目で思った。
しかも半角スペースとタブ文字が混じってやがる。もはや嫌がらせを疑う。

命名センスが壊滅的

これも無理。
get_name2() とかいう関数見て膝から崩れ落ちそうになった。
しかも get_name() が存在するわけでもない。すごい。意味が分からない。
ついでにその引数は name と name2 みたいな名前になってて、コメントすら付いてない。
ていうかnameとかname2を渡してget_name2ってどういうことなんだ。何から何まで分からない。

同じ概念を指すのに別の単語が使われてたりもする。
registry_date と create_date が混在してるみたいな。

あとは、「同じページでもアカウントの種類によってURLが違う」ってケースで
/user_login/user_a/
/user_login/user_b/
みたいに、無意味に同じ単語重ねてきたりとか。
/login/user_a/ と /login/user_b/ 、もしくは
/user_login/a/ と /user_login/b/ みたいなんでいいじゃん。
しかもaとかbとかに来る単語がめちゃめちゃ長くてURLとして単純に汚い。

平気でマジックナンバー使う

$flags = 255;
$flags = 1|4|16|64;

は?????
なんかこう…たぶん2進数8桁使ったフラグ管理なんだろうな、までは想像つきますけど、だからってこれはなくない???
そもそも今時のWebプログラミングでそんなに可読性を犠牲にしてまで何かしらの節約する意味あります?? 普通にそれぞれを個別の変数かもしくは配列とかに名前付けて持たせればよくない?????
ついでに、例によってコメントも付いておらず解読に手間がかかる。

DB設計が明らかにおかしい

正規化が極端に下手くそ。
「なんでこのカラムがこのテーブルに入ってるの?」みたいなのがちょいちょいある。
レコードが衝突したりもする。

コードが汚い

インデントやら変数名やらもだいぶアレですけど、構造からして汚い。
例えばさっきの get_name2() 、よく見たら全く同じものが多数のファイルに設置されてて三度見くらいした。

ついでに誤字脱字もやたらと多い。
その get_name2() って関数名、実物はスペルミスしてるんですよ。設置されてるファイル全部で。やばくない?

というか、動かない

テストが甘いとかバグが多いとかそういうレベルじゃないんですよね。
実装してから明らかに1回も動かしてないよね? って状態。

「実装完了しました」って言うのでじゃあこっちでも見てみるか~と思ってまずはログインページを開こうとしたら開かない。真っ白。
問い合わせてみたら「不具合ありました~」って、え? ここが動かなかったらどうやって動作確認したの?
突っ込みたかったけど、そのしょうもないやりとりだけでもクソ時間かかることは分かってるのでスルー。
ログインできるようになってから気を取り直して試しに画面ひとつ開いてみたら、今度は表示がめちゃめちゃ崩れたページが出てくる。操作不能
指摘すると「直します~」って、いや、あの…。
そして操作できるようになったので操作してみたらエラー。指摘すると(略)

「つくったものをひとにみせるまえに、いちどうごかしてください」ってなんでこんなオッさんに言わなアカンねん(言った…)

別に特殊なこと言ってないよね???
たとえ趣味での作業であっても、例えば傘を組み立てたらちゃんと開くかどうか確認するよね???? 本棚作ったら床に自立するかどうか確認するよね??????
「水が1滴も漏れないか」とか「耐荷量を調べる」とかまで言わんけど、なんかこう、最低限確認するよね???????????
全く動かさずにそのまま人に渡すってマジでどういう神経してんの??????????
(もう怒りとか通り越してただただ疑問の境地)

渡してそれっきりとかならともかく(いやアカンけど)、絶対怒られるの分かってるじゃん…本当に不思議…

バグ修正しました←直ってない

まあそれでもなんとか動作確認して、
「リンクをクリックすると全然違うページに飛びました」「データを登録したのに登録内容一覧に出てきません」
みたいなクソみたいなバグを大量にチケット報告して、それを直してもらってたんですが
(ちなみに、何故かExcel製の課題管理表になって返ってきた)

直ってない。

1個もってわけじゃないですけど、まあざっくり8割くらいは直ってない。
しかも
「判断つかなかったのでそのままにしておきます」とか(いや判断仰げよ)
「ここをこうすれば直ります」とか(???お前が直せよ)
意味の分からない返答もちょいちょい。

直したと言い張るところも、
例えば「この権限ではアクセスできないページにアクセスできてしまった」に対して
「リンクを消しました」とか。いや、URL直打ちでアクセスできるんですけど。
あとは「この権限では変更できない項目が変更できてしまった」に対して
JavaScriptでフォームを操作不可にしました」とか。いや、サーバーで弾かないと意味ないし。

「この処理でエラーになりました」とだけ報告すると「再現しませんでした」と来るので、
ああまあそれはそうかもな、申し訳なかったな、と思って再現手順も詳しめに書くようにすると
『その手順でなら』きちんと動くようになったとか。
いや、特定のアカウントとか特定のページだけ例外みたいに通るようにしてどうすんねん…
原因を調べて根本を直してくれよ…

ドキュメント類も汚い

wikiかチケットに記載してください、と言っておいた設計がExcelパワポで送られてきたのはまあ許そう。
自分も図とか表とかが面倒でExcel方眼紙作って添付するだけで済ますことはあるし、再利用もしやすいので個人的にはそこは別にいい。

けど中身がまるで整理されていないメモ書きレベルなのはどうにかしてくれ。
読みづらい上に「何の補足もなく、コードをコピペしてあるだけ」とかいう意味のわからないシートもある。
しかも情報が古かったり、ミーティングのアジェンダのみが貼ってある部分もあったり。
内容も明らかに足りないし重要な情報が大量に抜けてる。

【追記】元々存在した処理を勝手に消してる

1年半越しくらいに発覚。
元々存在した処理が、何故か勝手に消されてた。
致命的な問題ではなかったのでまあセーフといえばセーフですしこちらも気づかなかったわけですが、

…。…セーフか?
え? なんで勝手に消すの? 意味わからんすぎる。ぶん殴りてぇ~~
他にもやらかしてないか不安になるけど、
gitの履歴以外に調べようがないしコミット履歴もめちゃめちゃなんで(その部分についてはすげえ大量の変更をまとめてコミットされてた)
調べようがねぇ~~~~


ツッコミどころが多すぎる。
まだまだあった気がするけど思い出したら書こう。

一番笑ったのは、テスト用に作っただけの余計なファイルがいくつかコミットされてて
その中に「unko.html」っていうのがあったんですけど、
このへんはいらないファイルですよね?ってやんわり確認投げたら、
後日のミーティングでそれのことを頑なに「unknownファイル」って呼んでたことですね。
いつも通りさらっと流せばええのに必死さが出ててやばい。頑張って言い訳考えたのかなあ。
個人的にはこれはさほど気にしてなかったので
(余計なファイルコミットは自分でもたまにやらかすし、「unko」は前の会社で「右手だけで打てるテストデータ」として便利に利用されてたので「hogeやtestと並んでよく見るやつ」だった…よくコミットもされてた…)
予想外の必死さがツボにはまり、ミーティング中に笑いをこらえるのに必死でした。
言い訳考えてる暇があれば他に考えることあるやろクソが。


ちょっとアレなSESってよくいるけどここまでぶっちぎりでヤバい奴は初めて見た。
何が腹立つって、このRさん、3人組(+途中から上長)とはいえ、自分の3倍くらいの単価だったのでぶん殴りたい。
しかも最初に依頼されてた分、完成させられてないですからね。
予定の3分の1くらいの分量をバグまみれのままで終わってますからね。

リモートワークがヤバさを加速させてた気はします。
ただでさえWeb会議って情報量がめちゃめちゃ落ちるのに、そもそも連絡がスムーズに取れないとかやりとりにまともに応じてくれないとなるともうどうしようもない。
リモートやらせちゃいけない人間っていると思うんですよ。自分もたぶん人のこと言えないので可能な限り出社してる。

で、SESって

  • 契約にあたって「面接」してはいけない
  • クライアントは直接指揮命令してはいけない
  • SESは納品物に対して責任を持たなくてよい

という業態なわけですけど、
「能力足りてない奴を送り込まれてクソみたいなコードを納品されても責任を問えない」
というこの状況、どうしようもないんですかねえ。
そんなん「怒られても動じない鋼の心で仕事してるフリだけできる奴が強いじゃん」ってことになるんですけど。
こいつアカンなと判断されれば契約を切られはするので、短い期間で現場を転々とすることにもなれば敬遠されてまともな仕事は見つからなくなっていくわけですが…いつになるかわからんそれを指さしてpgrできるわけでもなし、無駄になった金と時間も返ってこないし。

…Rさん追放にあたって「何か最後に嫌味のひとつも言わないと気が済まないんですけど、何かひとこと言ってやりたいことあります?」とプロパーさんに聞かれ、ひとことじゃ無理だしもう関わりたくないので大人の対応で済ませておき、とりあえずブログにまとめた次第でした。