悪あがきプログラマー

悪あがきを続けていきたい技術と書評なブログです。トレタでiOSエンジニアやってます。

詳細設計〜単体テストな人

たまにはブログ更新したいから、ついさっき流れてきたエントリに、、食いつく勇気はないので少し思ったことと前から思っていたことを。
ソフトウェア設計とは何か 〜 設計にはプログラミング経験が必要か否か - Social Change!
優れた仕様を決定するために必要なこと - GoTheDistance

別に「詳細設計〜単体テスト」な人が全員ダメだとか論じているわけではないので悪しからず。

設計が終わっているならプラモデル。でも実際は粘土細工

倉貫さんの「ソフトウェア開発はすべてが「設計」である」を受けてプラモデルと粘土細工みたいだなと。

もし設計と製造が引き剥がせるならそれはプラモデルみたいなもの。設計が終わった段階が説明書付きのプラモデル。バリ取り、継ぎ目隠し、墨入れ、カラーリング、シールなどによって出来上がりの品質は変わるが、基本的な見た目、可動域、変形仕様などは説明書通りに作っている限りそれなりのものが出来上がる。

ただ、実際には粘土細工のようなものだと思います。こんな形のものを作りましょうという設計図はあったとして、どう作っていくかは作り手に委ねられる。可動域はこれくらいにしましょうね、と設計書に書いてあってもみんながみんな同じように上手く作れるかというとそれは非常に難しいなと。個々人のスキルに依存するところが大きいですよね。

仕様を設計するチャンス

gothedistanceさんの言うとおり、これが出来るSI案件は少ないと思います。と思ったのも、とある案件でメンバーが足りず、協力会社さんにJavaエンジニアをお願いしたことがあります。40前後の方々10名ほどと面談したのですが、ほとんどの方が「詳細設計〜単体テスト」フェーズの経験のみ。話してる内容もなんだかパッとしない。これは別に上から目線なわけではなくて、単純に自分の10個ほど上な方々なので「すげぇっ!」って思わせて欲しかったなという期待もあったのです。

面談後に上長となんでこんなことになっちまったんですかねぇ?と話してたのですが、「詳細設計〜単体テスト」フェーズしかやらないから、基本設計から参画できない。参画できないから基本設計ができない。という負のスパイラルだよね、という話をしたと思います。ただ、それでも頭角を表わす人はいるわけで、いくらでも問題意識をもって上流に食い込むことは出来るわけで、結局は個人の問題だよね、という話もありましたね。

じゃあお前はどうなんだ?と言われると、僕もそこに片足突っ込んでしまってるなぁと思うわけで、正直その現状を目の当たりにして「ゾッ」としてしまいました。

フィードバックを受けられない

上の話の続きで、プロジェクトってどうしても詳細設計(もしくは開発)〜単体テストが膨らむので、そこで人員投入となることが多いです。んで、単体テストまで終わったら「じゃ!」ってめでたくリリースとなるわけですね。プロジェクトが上手くいってるときはもちろんですが、上手くいってなくてもお金がないので「じゃ!」となるわけです。じゃあだれが「じゃ!」の対象となるかというと、パッとしない人たちなわけです。

例え、詳細設計や開発から参画してたとしても、仕様上いけてないところのワークアラウンドやよりよい方法を提案したり、他の人が見逃してたバグをバリバリ見つけて直してくれるような人がいたら絶対に手放したくないはずです。パッとしない人たちはまた次の案件に参画し、単体テストが終わったくらいでまた「じゃ!」と言われるわけです。

これ、結構問題だと思います。パッとしないこと自体がどう、というよりもそのシステムが結局どうなったか見届けられないんですよね。フィードバックがない状態です。みんな査定とかではフィードバック欲しがるじゃないですか。そのフィードバックがない状態です。自分が作った部分がうまく動いてるのかどうかもわからない。そして、わからないから改善もできない。。

当人たちはその場その場で忙しくしていて働いてる感はとてもあると思うのですが、これを続けていくと40代になっても「詳細設計〜単体テスト」な人になってしまうんじゃないかなぁと。

あんたの言う通り作ったのに…

これ、ほんとに良くあります。いや、良くあっちゃいけないんですけど、、、これも「詳細設計〜単体テスト」しかやってなかったりするとはまりがちな気がします。思ったんですけど、こういうのってデザイナーさんの方が得意な気がします。デザイナーさんて言ってるのは単なる絵を書く人じゃなくてちゃんとデザインする人のことですね。もちろん業務プロセスを云々出来るという訳じゃなくて、分解→整理→再構築的な思考に長けている気がします。佐藤可士和的な。

うちはせっかく社内に優秀なデザイナーがいるんだから頭の中身を覗かせてもらうとかするといいんじゃないかなぁ。

使いにくい社内システム

どこの企業でも一つや二つ、、、もしくは全ての社内システムが使いにくかったりしませんか?システムだけでなく、ワークフローだったり、決まり事だったり、、思いつきで始めたものの効果測定されないまま放置されているようなやつです。こんなのを使い続けるなんて!と憤りを感じたこともありますけど、別に使えているんだから特にこれ以上コストを掛ける必要はないという経営的判断も正しいと思ってました。ただ、最近はこういうの放っておくとシステムに対する観点がどんどん鈍っていくんじゃないかという気がしています。

要するにお客さんのシステムを開発するときもかなり低いユーザビリティで満足しちゃうんじゃないかなぁと。もちろん、それだけが問題ってことは絶対にないですし、社内システム改善したから良い物が作れるかというとそれも違うんですけど、多少はそういう側面もあるんじゃないかなぁと思います。

まとめ

結局何が言いたかったのかというと、、常に問題意識を持って先を見据えて残念な人にならないように悪あがきでも続けていきましょうってことですかね。ま、色々とありますがだらだら言ってる自分に一言。

Shut the fuck up and write some code.