仕事の総括: 1907-1912_androidアプリ
仕事について節目節目できちんと振り返っていこうという試み。あくまで個人的な振り返りなので、技術な部分は書きません。
概して
- 転職して、というか、エンジニアの会社に入って初めての案件。
- androidのアプリ開発。iOS版もやるはずだったけど、諸般の理由でやれず(後述)。
- 言語としてはKotlin。MVVMをやろうとボスと話していたが、工期的なヤバさがあり途中で断念、死亡、MVCっぽい何かに強引にシフトされていった。
- サーバーサイドは関連会社の開発だった。
結論から言うと
よかったところ
- androidに関してはなんだかんだチームで一番書いた量が多かったと思う。アプリ全体を設計に絡めた。
- 技術調査を任されたので結構がんばり、サンプルコードを量産できた→他の新人の開発の捗り。
- 障害対応経験。
- サーバー側のAPI周りもちょろっと設計した(なぜか)。
よくなかったところ
- タスク切り分けがへた。抱え込みすぎ。
- 十分な技術調査とは言えなかった。OSバージョンによる差異がきつかった。非同期処理がゴミ。
- (事情が事情とはいえ)結局iOS版やれなかった。androidとiOS両方ともやるチャンスを逃す。
- 客対応をボスに任せっぱなしであまり情報を積極的に取りに行けなかったところ。遠慮しなければよかった。
雑感
そもそも我々のチーム構成は、
- ボス(5年目)
- わたし(未経験の猿)
- 同期転職者と新卒氏(二人とも未経験)
という感じだった。
新人3人もおって大丈夫かー????と思っていた。
↓
大丈夫じゃなかった。
月の残業時間はMAXで80hほどだったから、体感ちょっと多めだな〜という感じだが、普通に定時で帰る他のチームからは「深夜レギュラー」と馬鹿にされていた。9月以降はほとんど毎日終電になり、β版納品後の打ち上げの時に、新卒の人がしんどすぎて泣き始めたのが印象的だった。わたしの転職同期はストロングゼロを帰りの電車の中で毎日飲む人間になってしまった。公共の迷惑だから逮捕されたらいい。
わたしは比較的長時間労働に耐性のあるようなので「まぁこんなもんやろ」と構えていた。そしたら自分だけが面談に呼ばれ「お前の心も本当はヤバイんじゃないのか?ほんとのこと言うてみ?」と聞かれる回があった。悲しいがどうもこうもない。平気なだけだ。
わたしは「長時間労働キャラ」として定着しそうになっており、普通に会社からの評価が下がりそうなので正直全然笑えない。
愚痴
そもそもマネジメントの会社がお客様と我々の間に入っていたはずだが、そのマネージャーとそのマネージャーのボスがお客様や関連会社の居る前で激しい舌戦を始めるくらい相性が悪かった。
マネージャーに聞いても情報が全然降りてこないのが普通で、マネージャーのボスに聞いても彼と会ってないから分からないという(君たちは会社で何してんの?)。
お客様への連絡先はなぜか教えてもらえない。はぐらかされてしまう。
我々は確実に分かっているところを作る。そして知りたかったことが分かる頃には仕様が土台から変わっている。お客様のお偉方から連絡が来て、仕様の変更を指示される。変更すると、別のお偉方からなんでこんなことをしたと言われる。長い会議がある。まるごと一機能が消える。増える。
デザイン会社が降りる。
そのうちExcelにビッシリ書かれた不具合・要望・何が言いたいのか分からない指示・理解できない日本語が送られてくる。マネージャー氏が手元でずっとチャージしていたものだ。
それを1個ずつ指摘を加えたり、各会社に振り分けたりする。ボスとわたしがそれに製造工数を取られる。
サーバー側からAPIが上がってこない……。
「β前日にアップします!」と言って夕方に上げられてきたAPIは、仕様を完全に無視して作られていた。夜通し繋ぎこむ。その忙しい時に、マネージャー氏がアポ無しで打ち合わせに来る。追い返す。次の日の朝来る。彼はお客様に送るメールの書き方を我々のボスに教わる。結局ボスが書く。
FIX版の納品が2ヶ月先になり、その間にRC版1、RC版2の納品期日が新たに設けられた。それらの納品後にも仕様は膨らんでいき、そのたびに"納品"した(何回も納品をしているので何を以って「納品」と言うのか分からない)。結局、アプリの審査期日のギリギリまで開発していた。
最後の最後にはマネジメントの会社から詫びの箱菓子が会社に送られてきた。キットカットだった。
障害対応
初めの予定では前半でandroid、後半でiOSを全員でやるはずだったが、チームの中でわたしだけがandroid版に残って障害対応、他の人はSwiftでiOS版の開発という運びになった。
わたしがandroid版に残ることになったのはボス以外で一番アプリ全体を把握している人間になっていたから、という理由だった。
正直、初めの一案件で両方のモバイルアプリが作れるのはキャリアとして美味しすぎると感じていたので、この配置には内心がっかりした(薄々予想してたけども!)。
iOSもやりたいとボスには伝えていたので、会社の上の方には掛け合ってくれたそうだけど、ボスのボスが「android破綻するから…」と許さなかった。かなり謝られたので別に恨んだりはしていない……。*1
ただ、毎朝上がってくる不具合報告に対して調査し、タスクを切り分け、アプリ側なら改修し、リリースノートを書き、夜までにお客様に報告するというサイクルを一ヶ月間ぐるぐる規則的に続けたのは、わりといい経験だったと思う。
他人のソースコードのまずい所に目ざとくなったし、こういう形での客対応も次のステップに繋がる良い経験だったと思う。(全然こっちの言いたいこと伝わってね〜ってことが沢山あったので右往左往したけど)
技術的におもろいと思ったところ
- BLE。今回は既存のライブラリに頼って開発したけど、がっつりやってみたいかも→IOT的なものへの興味→医療器具とか楽しそう。
- プッシュ通知の実装。Firebase便利すぎてすごい……。
- やっぱMVVMでやりたかった。
- Kotlin書くの楽しい……。
- スマホのミドルウェアとかってどーなってんの。
- android developperを読むのが大切。
技術的に敗北したところ
- androidはOSのバージョンの違いがすごく大きいです……。バックグラウンドで動くBLEやFCM周りの処理がバグりまくってた。ユーザーの知らんところで動かすのに年々厳しくなっているそう。パーミッションの要否等。
- チャイニーズのカスタムOSでも挙動が異なるとかある(Oppoが申し送りに……)。
- というかandroid開発って全般的に「皆これどーやって実装してんのぉ?!」って言いたくなること多くないですか……?
- なぜ世間一般のアプリは普通に動くのか不思議……。
*1:ぶっちゃけた話だと、かなり貢献したはずなのにこれは無い!という感じ。