IT業界で気づいたことをこっそり書くブログ

くすぶってる系アプリエンジニアが、日々気づいたことを適当に綴っていきます(受託→ベンチャー→フリー→大企業→ベンチャー→起業(仮))

ソースコードの引き継ぎ改修案件が難しい理由

ここ3年くらいで何度か体験したことです。

条件としてはこういう状態です。

  • 既に完了しているプロジェクトの追加改修
  • プログラマーはもう居ない
  • 仕様書はほぼ無い
  • 完成したのが2年前とか

よくある話ですね。


こういう「ちょっと変えて欲しい」案件を、別に私は軽く見ていたつもりはなかったのですが、想像以上に上振れることがわかりました。
大体想像の30〜40%増のバッファで見積もるのですが、現実は80%〜300%という感じです。

 

原因は少し複雑です。
前提として大きいのは、引き継いだコードの質が自分のものより下であることです。
それだと「場合に依る」と思えるでしょうけど、意外と(?)十中八九自分より不出来であることが多いです(私が特別優秀というわけではなく)


理由はたぶんこうです

  • きちんとしたコードを書くようなプロジェクトでは、どこの馬の骨とも知らない人に引き継がせないし、最低限プロジェクト内にエンジニアが居ないみたいな状況にならない
  • 2,3年前だと皆レベルが低いみたいな状況がある(黎明期問題)
  • バージョンが上がりすぎていて、非推奨なコードになってしまっている
  • 外注の新規開発したコードって大抵クソですよ(元も子もない)

 

コードの品質やらなんやらがひどい場合。修正箇所を直そうとしている内にバグや潜在バグをポロポロと見つけてしまいます。もちろん直そうとはしないのですが、コードが密結合になってるとどうしてもそこを触らなければならなくなってきます。

そういったコードは、例えば既に顕在化していたり、それなりに重いバグならクライアントに交渉できますが、そうではないケースがあります。潜在していたり、凄く小さいものだったりします。すると交渉する方が大変で、勝手に直すほうが早くなってしまいます。
完全に放置する手もありますが、それを直さないと目的の改修ができないことがありますし、検収時にバグが再現されてしまうと自分の責任を問われます。最低限、説明が求められてしまいます。どっちにしても時間が取られてしまうわけです。

この「ちょっとしたバグ」が、密結合によりどこまでも連鎖していくパターンが結構あります。1個バグを潰したら3つバグが誕生するやつです。
すると今度は、整合性を取るために若干のリファクタが必要になってきます。糞真面目ほど、それは無視できなくなりますし、やはりクライアントにリファクタの説明をするのは非常に高コストです。

 

とやってる内に、1行直せばいいところがいつの間にか30行に、みたいなことがままあります。
厄介なのは

  • やってみないとどれだけ量があるかわからない(連鎖するから)
  • 一件一件が非常に小さいため、説明する手間のほうが大きい

あたりでしょうか。

 

たまたま自分の出会った案件がそうだったのだ、と最初は思ったのですが、最近はこちらの方がデフォルトだと考えるようになりました。それほど高確率で上振れます。

これの対策が見つかりません。
上記で書いたように、説明しようが追加料金を求めようが手間のほうが上回ります。「全力で不具合を無視する」という発想が出てきそうですが、不具合を無視したら修正タスクが終わらない状態になるのです。

回避するにはそもそも時間単位での仕事にしてしまうか、バッファを数倍レベルで盛るくらいでしょうか。
(反面教師じゃないですが、自分で一から作る際は密結合を頑張って回避しますし、資料を何かしら残します)

 

まとめ

ちょっと修正する程度の保守単発案件は死ぬほどおいしくないです。
やるとしても、それなりに大きい案件を選ぶか、時間単位での仕事にするべきだと思います。
その時も、見積もりはかなり盛ったほうがいいと思います。

新技術とどう向き合うか、どのフェーズで戦う人材になるか

ガートナーのハイプサイクルというのは有名だと思います。

ガートナー | プレス・リリース | ガートナー、「先進テクノロジのハイプ・サイクル:2017年」を発表

https://www.gartner.co.jp/press/html/img/pr20170823-01_img02.gif

 

新技術が世に生み出される時、一旦過度な期待を経るという経験則に基づいて、現在存在する新技術がどこのフェーズに居るかというものを分析したものです。

エンジニア、特にWeb系のような場所にいると、新技術とは向き合わなければならなくなりますが、どのフェーズで戦うかで戦略が大分変わりそうだと思いました。

 

※新技術というと特殊なものに感じますが、言語やフレームワークでも似た現象が起こると思います(少し緩やかになるでしょうけど)

 

安定期で戦う

多くの人は安定期で戦います。
既に市場が確率されていて、第一人者が居て、先輩が居ます。
将来のキャリアパスもある程度見えていて、見えているからこそ将来安泰か、不安かもわかります。
上がつっかえているため、イニシアチブを取るのは難しいかもしれません。
給料は適正価格に落ち着いていますが、徐々に安売りが始まるはずです。
いつまでその技術で食っていくのか、よく考えなければなりません。 

 

期待のピーク前後で戦う

技術者としては非常につらい状況です。
世間や上司、クライアントの期待値は非常に高いのに、思った成果が出ることは稀です。
毎日胃が痛くなることは間違いないでしょう。

しかし、世間の注目度は高く、予算をジャブジャブ使える時期でもあります。
普段はやれないような派手で夢のある案件に絡めるかもしれません。
その上、世間のエンジニアからも羨望の眼差しで見られます。
やりがいもあるかもしれません。

しかしこのフェーズで戦うためには、その少し前から勉強を始め、追いつき、日々更新される技術刷新に対応していかなければなりません。地頭の良さとタフネス、スピード感が必要です。

 

幻滅期〜啓蒙活動期で戦う

実は一番美味しいのではないかと思うのがここです。
既に多くの人が安定期の職を持っています。そしてピーク専門の人は去りました。
残るのは頭の痛い課題だけです。
取り組みたいという人は少ないでしょう。

しかし、もしそれが仕事にできるのなら、イニシアチブを取るチャンスです。
頑張って少し勉強するだけで、ベテラン扱いされます。
責任も重いのですが、成功ライン・失敗ラインが業界的にまだふわっとしているので、評価できる人も居ない状況です。
これを3年〜5年続けられれば、運が良ければ良いポジションと知見が得られるでしょう。
世間的には必要な技術なのに、3年以上取り組んでいる人が滅多に居ない状況で、それゆえに引く手数多になるかもしれません。

 

黎明期で戦う

もはやこれは研究職に近いです。
旨味とか狙ってはいけない領域です。あくまでその技術自体に可能性を見出して取り組むものだと思います。
もし期待のピークまで到達できれば、ちやほやされるかもしれませんがその後幻滅期が確実に来ます。
そういった周りの雑音の無視しつつも、技術の価値を世間に伝え、どれだけ真の仲間を集められるかという状況に成ってきそうです。

とは言え、殆どの技術は日の目を見ずに地下に潜り続けるでしょうから、やはり学術的な研究に近い作業ですね。

 

まとめ

と言ったように、同じ技術でもどのフェーズで戦う人かによって、価値観や戦略がガラッと変わってきます。性格まで違うかもしれません。例えばピークにいる人達は、盛り上がってる方に近寄っていきます。

フェーズが違うと話が通じないこともあるでしょう。フェーズが違う会社に転職したりすると、あまりに違う雰囲気で困惑することも多いと思います。
まずは自分がどこに住み着きたいか意識して、相手や周囲はどこを意識しているのか、よく観察したほうが何かと良いと思います。

技術でベンチャー企業を立ち上げる時は、特にこれが重要になるでしょう。
最初に入ってくる人と、安定してから入ってくる人の性格がガラッと変わってしまいます。会社はどのポジションを中心に据えるのか、あるいは全フェーズを内在するのか、考えていかないと価値観に依るすれ違いが起こってしまいます(経験あり)

自分のセンスの無さに苛つく

もうかれこれ1年以上、独自アプリを作っているのですが。
未だに仕様を作るのが苦手です。
ほとんどを自分で作っていると気がつくのですが、自由度が高すぎると変数が多くなり、決められなくなるのだと思います。
「とりあえず動く」まではいくが、「なんか違う」がずーっと残り続ける感じです。
そして自由度があるので、変えようと思えば変えられてしまうのです。

 

最初はそういうのを無視してMVPで作ろうなんて思っていましたが、「変えられる」というのは呪いのようについてきます。どうしても「もっとこうした方が」に思考が奪われてしまうのです。

 

そして何より、圧倒的にセンスが無いことも問題です。
これは覚えがあります。美的センスに似たものです。
例えば家具の配置、服の色、適切なモノを適切な場所に効果的に配置する作業というものが壊滅的に苦手です。
それだからか、画面の構成をいつまでもウンウン悩んでしまいますし、作ったはいいが明らかにダサいオブジェをこさえてしまいます(目だけ肥えている)。

 

デザイナーをアサインすれば、とも思うのですが(一時期していましたが)
人を増やすと今度は人のコントロールをしながらプロダクトのコントロールをする必要が出てきます。おまけに開発も必要です。自分のセンスが無いと、どうしても意思決定が鈍る気がします(熟練デザイナーであればそれも良いようにしてくれるんですけどね)

どうやら私はそういったマルチタスクが非常に苦手なようです。
これまで見てきた、ワイヤーをさらっと作り上げてしまうディレクターやクライアントが眩しく見えます。
世にあるどのUIも非常に素晴らしいものに見えてきます。

 

解決策はあまり多くありません。
今は「センスとか問われないくらいに定石を覚え、パクリ、考え続ける」くらいでしょうか。
量をこなすしかありません。

あるいは、デザイナーではなくとも他人の意見を聞くのがいいです。「ここはもっとこうした方がいいんじゃない?」というのは、例えそれを否定する結果になっても考える切っ掛けになり、一段回良くなると思います。

 

もう少し、0から100まできちんと設計・デザインする経験を詰むべきだったなと少し後悔しています(そんな余裕一ミリもありませんでしたが!)

Appleによるテンプレートアプリのリジェクト状況

これ2017年夏の話なんですが、その後どうなったか調べてみました。

gori.me

 
この記事が分かりやすいと思います(というか上記の記事のソースですねたぶん)

 

techcrunch.com

 

ざっくりまとめると

  • すでに小規模自動生成アプリはリジェクトされているケースが有る
  • 議員も注目している
  • 自動生成サービスが閉鎖した事例もある
  • 現在稼働中の自動生成サービスも、1/1により厳しくされると通達を受けている
  • Appleの懸念は、同じユーティリティを実行するアプリケーションで、同じようなことしかできないこと
  • テンプレート(ネイティブ)はダメで、非テンプレート(WebView)は許されている状態
  • 類似性ではなく生成方法で縛られている点で批判が相次いでいる

 Apple的にはPWAに移行されてもいい感じですかね?
経験則ですが、こういう規制パターンは「本当はもっと強い縛りをしたい」という気持ちの表れに思えます。今後、もう一段階厳しくなってもおかしくないのではないでしょうか。
(つまり自動生成に加え、クローン的なアプリが壊滅する可能性)
まあ批判が強く出ているようなので、どうなるかはわかりませんが。

 

開発者としてはネイティブを続ける一方でPWAを勉強しておいて損はないのかもしれませんね。

 

追記:AppleにとってのPWAの立ち位置って今どこなんですかね?以下も8月です

Apple Starts Work on Progressive Web Apps - Cloud Four

iOS がプログレッシブ ウェブ アプリをサポートする可能性が浮上 | 海外SEO情報ブログ

(ただまあ、フルスクラッチ専門なネイティブアプリ開発者にはいずれにしても影響少ないという妙な状態ですよね)

IT受託は消え去るのか?

「『プログラマー35歳限界説』はある」Rubyの父・まつもとゆきひろさんにその真意を聞いた | HRナビ by リクルート

恐らく、この10年ほどで、受託開発で十分な利益を出せる企業は減少していくでしょう。

外注はナンセンスだから今後減っていくだろうという話。

これ、はるか昔から言われてますよね。受託は滅び、内製に移ると。
しかし現状そうなるどころか拡大しています。
つまり、時代の流れではなく、法律や日本の企業文化的にそうなっているケースが多いと考えたほうが自然です。
状況が変わるためには法律が変わる必要があります。

そういった地合の中、10年以内に滅びるからできれば辞めろというのは、少し乱暴に感じました。

 

会社徒歩圏のすすめ

去年の今頃の平日

7:30 起床
~7:50 朝風呂
8:05 家を出る
8:15 電車に乗る
9:30 出社
18:30 終業
~22:00 残業
22:10 電車に乗る
23:30 帰宅
~0:30 飯
~1:30 ぼーっとする(疲れている)
1:30~ 就寝(睡眠時間6時間+電車の1時間)

 

今日

8:30 起床
8:50 朝風呂
9:12 家を出る
9:30 出社
18:30 終業
~19:00 残業
~21:30 新規サービス開発
~23:30 映画館でごちうさを見る
0:10 帰宅

 

仕事以外の活動ができた上に、映画を見れたことに感動を覚えました

って、残業が減ってるッッ!!

 

会社は徒歩圏にしましょう

残業を減らしましょう!!!

 

 

まあ、残業がなくて徒歩圏なら、仕事以外に2活動くらいできてしまうということで・・

(作りたい)動画コメント共有サービス

ニコ動のコメント部分だけ別に切り出してサービス化したいですよね
オープンコメントシステムみたいな
ある動画や音楽に紐付けられた、時系列コメントデータの共有

 

圧倒的に問題なのは、「どうコメントをコンテンツに被せるか」ですが
例えばアドオンでできたとしても、テレビにはできませんし、アプリにも難しそうです
SDKにして大手に使ってもらうという手もありますが相当しんどいでしょう

 

そして、それらを全てうまくやっても、コメントを書いてもらわないといけない問題が生じます
コンテンツとコミュニケーションが不可分なのって凄くもどかしいですね

 

例えばTwitter実況みたいなものがあるので、ミニマムで試すことは可能なのですが、二歩目が詰んでいます
これずっと前から考えているのですが、無理ですかねえ