お久しぶりです。ツナかふぇです。
2021年も残すところあと僅かとなりました。
新型コロナウイルスに振り回された1年間でしたが、なんとか仕事も継続でき、無事に1年を終える事ができそうです。
さて、色々あった1年間ですが、記憶を辿り、今年の1月~12月の振り返りをしていこうと思います。
昨年から現場は継続。SpringBoot + Thymeleafで業務系の画面をせっせと作っていました。
フルリモート環境でしたが、slackを通じて仕様確認の意思疎通には特に困りませんでした。
ただ、同じプロジェクト内の新人君に技術的な事を連携するのには結構苦労しました。外部の人間がプロパーのOJTを兼任するのはいかがなものか…。
今年早々の青天の霹靂。いきなり同現場の違うプロジェクトへの移籍を命じられます。なんでも、チームの主要メンバーが退職してしまうので、その後釜として私が選ばれたのだとか。
フロントはjs + Thymeleaf 、バックエンドはSpringBootを主戦場としてきた私ですが、移籍先はフロント:React、バックエンド:GOというなんとも今時な言語。
少々不安もありましたが、これも経験だと自分に言い聞かせ、この移籍の話に乗ります。担当プロジェクトをキリのよい場面まで終わらせ、2月中旬から新たなプロジェクトへと参画しました。
正直、メチャメチャ大変でした。特にReactとその周辺のライブラリとアーキテクチャ。後から判明したことですが、これらのアーキテクチャが「なんとなく今時な感じ」という曖昧な理由で選定されていた為「なぜこんな作りに…」と言わざるを得ない個所が多々ありました。
他にも同メンバーの年齢層の若さや、全く知らない言語に対する学習コストの高さ等に頭を悩ませる日々が続きます。まるで新人に戻った気分でした。プロジェクトで使用されている技術に対する理解度が浅い状態でのフルリモートは割と地獄を見る、という事をしみじみと感じさせられる期間でした。
前月から引き続き、GOプロジェクトを進めています。
本プロジェクトは社内プロジェクトである為、納期の概念が薄く、goとreactに慣れるまでは有り難い体制でした。
ただ、「本当にこのプロダクトはビジネス価値に貢献しているのか?」と疑問を抱かずにはいられませんでした。要件も仕様も曖昧で、納期もほぼ無いようなもの。正直、経験上一番のぬるま湯環境です。
外様の私が口を出すのは憚られるような気もしましたが、移籍を命じた上長に状況をエスカレーションしたところ…この体制にメスが入ります。
そのメスというのが、「上記プロダクトを外部連携先として据え、納期ありのシステム開発プロジェクトが発足する」というもの。
で、私はというと、このプロジェクトの準テックリード的な立ち位置で参画する事が決定しました。GOプロジェクトに在席していたのは僅か2ヶ月半という事に。
さては、最初から私をこの慢性プロジェクトと発足プロジェクトのブリッジにする想定だったな? せっかく慣れてきてたのに…。
と、予定調和めいた流れを感じ取った私は、このタイミングで単価交渉に踏み切ります。
単価交渉は円満に成功しました。
話を聞いた所、やはり2月中旬からの流れは決まっていた話で、その間の私のスパイ的な動きは評価されてたっぽいです。「抜けて欲しくなきゃ金を詰め〜ッ!」な脅し文句を使わなくてホッとしました。失敗してこのコロナ中で仕事を失うのは避けたかったですしね。
で、晴れて(?)出戻りとなった私の前に、本格的にメンバー達が参画する6月に向けて、5月末までのギリギリなスケジュールが突き付けられます。
単価を上げてもらった直後に泣き言は言えません。このPM、中々にやり手です。若干顔を引きつらせつつ、このスケジュールで承諾します。
私を含んだ2名体制で、GW明けからゴリゴリとコーディングに勤しみます。画面は基底となるhtml,js,css、サーバサイドは基底クラス、例外ハンドラ、バリデーション基底、ORマッパーの調整等々…
最初の1機能がダメなら、その後に続く機能は全てダメになります。後に参画してくるメンバーは、全員が最初の取り掛かりとしてこの機能、ひいてはコーディング手法を参考にするからです。なので、この1ヶ月の成果が、プロジェクトの運命を担うと言っても過言ではありません。中々のプレッシャーです。
GW明けにも関わらず稼働は190hに達し、なんとかメンバーを受け入れる環境が整います。この1カ月が今年で一番大変なフェーズでした。
新規参画メンバーのサポートをしつつ、片手間に実装しつつ、暫定実装の基底処理のリファクタリングもやる、というテックリードっぽい動きが続きます。
実装する機能については「初めて使うライブラリに依存する機能」「ダウンロード/アップロード」「ややこしい非同期通信」等、まぁ新規メンバーがいきなり担当するには重い機能が優先的に私に振られてきます。人使い荒すぎィ!
年初のぬるま湯環境が恋しいなァ…と哀愁を感じずにはいられません。
5月の頑張りが効いたのか、開発フェーズは概ね順調に進み、私の方も若干余裕が生まれます。前にプロジェクトとのブリッジもまずますといった所。
…が、なんの気無しにガントチャートに対する全体の進捗率を眺めると、何やら不穏な凹が目に付きます。このシステムの『核』となる重要な機能の進捗率が、芳しくありません。
この時はソッ…と見なかった事にしましたが、こういう嫌な予感は、往々にして現実になるものです。
はい、現実になりました。
前述の機能は2名体制だったのですが、その片割れが鬱でフェードアウトしました。
残った方もメンバーの中では技術力が低く、一気に遅延が爆発します。
で、ヘルプとして既存の2名がまず宛てがわれ、2周間遅れて私もその核機能の一部にアサインされたのですが…。
改修と聞いていた機能、未実装でした。
うぉい?! と叫ばずにはいられませんでした。というより、その機能は外部APIのin/outを司っていたのですが、APIの仕様書は存在するものの、そのパラメータマッピングの資料がありませんでした。
なるほど〜、それじゃ確かに作れるワケないよね☆
エスカレーションしろよこのタワケどもがーーっ!!
かくして、『未実装』で『仕様書が無い』上に『実装する事で既存実装に影響が出る』という3重苦な状況に陥いる運びとなりました。流石に溜息が出ました…。
計画書上、本機能は9月から内部結合テストに入る予定でしたが、100%終わらないので上長に掛け合い、工数をもぎ取りました。
とにかく『何が正しいのか』が分からないと進みようが無い為、外部APIの担当者と連絡を取り、向こうの仕様書と呼び出し側のインタフェースを突き合わせながら、納品先のシステム担当者を交えて正解を導き出します。もはや基本設計フェーズの動きです。
その遣り取りの傍らで、案の定スパゲティコードと化していた核機能のリファクタリングも平行して進めます。実装で困ったら相談してくれと言ったのに…。
しかし、工数は貰ったものの、やはり完成を待っていたら納期がヤバいとの事で、実装途中だが、終わっている(と判断できる)箇所から内部結合テストを進める、という禁断の手法に出ます。
嗚呼、これは炎上コースだな! と口に出さずともメンバーと誰しもがそんな雰囲気だったのですが…
なんと、炎上寸前で踏みとどまりました。ヘルプに入った他2名の業務知識の吸収が著しく、業務的な正解への道のりを間違えなかったのが救いでした。
ボヤの時点でPMが力を発揮する場面を、今回のプロジェクトで初めて見ました。有り難や…。
迅速なバグ対応により開発フェーズは縮小していき、メンバーも離脱し始めます。
離脱メンバーが担当していた箇所で発覚した不具合修正、兼リファクタリングを全面的に担当。やはりどんなフェーズでもバグは発生するもので、システムの全容を朧げでも把握している人間は最後まで残さないといけません。そこのところが今回は死守されており、終盤の安定感は半端じゃありませんでした。ここでもPMの采配が光っています。
低優先度の残タスク消化。プロジェクトも結合テストフェーズまで以降し、不具合の収束率も上々の結果に。あれほど忙しかった5月や10月が嘘のように、稼働の密度も下がっていきます。
…と、簡易的に一年を振り返ってみました。
なんと今季、プロジェクトにおいて初めて単体〜内部結合テストフェーズへ参画しませんでした。主にアプリ側の基底的な処理を一任させて頂き、自身の成長を感じた一年でもありました。少々大変な時期もありましたが、いいプロジェクト進行に貢献できたのではないかと思っています。
来年も皆さんに、よき技術の場が与えられますよう、宜しくお願い致します。